| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.harmony.sql.tests.java.sql; |
| |
| import dalvik.annotation.TestTargetClass; |
| import dalvik.annotation.TestTargets; |
| import dalvik.annotation.TestLevel; |
| import dalvik.annotation.TestTargetNew; |
| |
| import java.io.Serializable; |
| import java.lang.reflect.Field; |
| import java.sql.SQLException; |
| |
| import org.apache.harmony.testframework.serialization.SerializationTest; |
| import org.apache.harmony.testframework.serialization.SerializationTest.SerializableAssert; |
| |
| import junit.framework.Assert; |
| import junit.framework.TestCase; |
| |
| @TestTargetClass(SQLException.class) |
| public class SQLExceptionTest extends TestCase { |
| |
| static long theFixedSUID = 2135244094396331484L; |
| |
| /* |
| * SUID test |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL, |
| notes = "Field testing", |
| method = "!Constants", |
| args = {} |
| ) |
| public void testSUID() { |
| |
| try { |
| Class<?> theClass = Class.forName("java.sql.SQLException"); |
| Field theField = theClass.getDeclaredField("serialVersionUID"); |
| theField.setAccessible(true); |
| long theSUID = theField.getLong(null); |
| assertEquals("SUID mismatch: ", theFixedSUID, theSUID); |
| } catch (Exception e) { |
| System.out.println("SUID check got exception: " + e.getMessage()); |
| // assertTrue("Exception while testing SUID ", false ); |
| } // end catch |
| |
| } // end method testSUID |
| |
| /* |
| * ConstructorTest |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "", |
| method = "SQLException", |
| args = {java.lang.String.class, java.lang.String.class, int.class} |
| ) |
| public void testSQLExceptionStringStringint() { |
| |
| String[] init1 = { "a", "1", "valid1", "----", "&valid*", "1", "a", |
| null, "", "\u0000", "a", "a", "a" }; |
| String[] init2 = { "a", "1", "valid1", "----", "&valid*", "a", |
| "&valid*", "a", "a", "a", null, "", "\u0000" }; |
| int[] init3 = { -2147483648, 2147483647, 0, 48429456, 1770127344, |
| 1047282235, -545472907, -2147483648, -2147483648, -2147483648, |
| -2147483648, -2147483648, -2147483648 }; |
| |
| String[] theFinalStates1 = init1; |
| String[] theFinalStates2 = init2; |
| int[] theFinalStates3 = init3; |
| SQLException[] theFinalStates4 = { null, null, null, null, null, null, |
| null, null, null, null, null, null, null }; |
| |
| Exception[] theExceptions = { null, null, null, null, null, null, null, |
| null, null, null, null, null, null }; |
| |
| SQLException aSQLException; |
| int loopCount = init1.length; |
| for (int i = 0; i < loopCount; i++) { |
| try { |
| aSQLException = new SQLException(init1[i], init2[i], init3[i]); |
| if (theExceptions[i] != null) { |
| fail(); |
| } |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getMessage(), theFinalStates1[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getSQLState(), theFinalStates2[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getErrorCode(), theFinalStates3[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getNextException(), theFinalStates4[i]); |
| |
| } catch (Exception e) { |
| if (theExceptions[i] == null) { |
| fail(i + "Unexpected exception"); |
| } |
| assertEquals(i + "Exception mismatch", e.getClass(), |
| theExceptions[i].getClass()); |
| assertEquals(i + "Exception mismatch", e.getMessage(), |
| theExceptions[i].getMessage()); |
| } // end try |
| } // end for |
| |
| } // end method testSQLExceptionStringStringint |
| |
| /* |
| * ConstructorTest |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "", |
| method = "SQLException", |
| args = {java.lang.String.class, java.lang.String.class} |
| ) |
| public void testSQLExceptionStringString() { |
| |
| String[] init1 = { "a", "1", "valid1", "----", "&valid*", null, "", |
| "\u0000", "a", "a", "a" }; |
| String[] init2 = { "a", "1", "valid1", "----", "&valid*", "a", "a", |
| "a", null, "", "\u0000" }; |
| |
| String[] theFinalStates1 = init1; |
| String[] theFinalStates2 = init2; |
| int[] theFinalStates3 = { 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0 }; |
| SQLException[] theFinalStates4 = { null, null, null, null, null, null, |
| null, null, null, null, null }; |
| |
| Exception[] theExceptions = { null, null, null, null, null, null, null, |
| null, null, null, null }; |
| |
| SQLException aSQLException; |
| int loopCount = init1.length; |
| for (int i = 0; i < loopCount; i++) { |
| try { |
| aSQLException = new SQLException(init1[i], init2[i]); |
| if (theExceptions[i] != null) { |
| fail(); |
| } |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getMessage(), theFinalStates1[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getSQLState(), theFinalStates2[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getErrorCode(), theFinalStates3[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getNextException(), theFinalStates4[i]); |
| |
| } catch (Exception e) { |
| if (theExceptions[i] == null) { |
| fail(i + "Unexpected exception"); |
| } |
| assertEquals(i + "Exception mismatch", e.getClass(), |
| theExceptions[i].getClass()); |
| assertEquals(i + "Exception mismatch", e.getMessage(), |
| theExceptions[i].getMessage()); |
| } // end try |
| } // end for |
| |
| } // end method testSQLExceptionStringString |
| |
| /* |
| * ConstructorTest |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "", |
| method = "SQLException", |
| args = {java.lang.String.class} |
| ) |
| public void testSQLExceptionString() { |
| |
| String[] init1 = { "a", "1", "valid1", "----", "&valid*", null, |
| "", "\u0000" }; |
| |
| String[] theFinalStates1 = init1; |
| String[] theFinalStates2 = { null, null, null, null, null, null, null, |
| null }; |
| int[] theFinalStates3 = { 0, 0, 0, 0, 0, |
| 0, 0, 0 }; |
| SQLException[] theFinalStates4 = { null, null, null, null, null, null, |
| null, null }; |
| |
| Exception[] theExceptions = { null, null, null, null, null, null, null, |
| null }; |
| |
| SQLException aSQLException; |
| int loopCount = init1.length; |
| for (int i = 0; i < loopCount; i++) { |
| try { |
| aSQLException = new SQLException(init1[i]); |
| if (theExceptions[i] != null) { |
| fail(); |
| } |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getMessage(), theFinalStates1[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getSQLState(), theFinalStates2[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getErrorCode(), theFinalStates3[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getNextException(), theFinalStates4[i]); |
| |
| } catch (Exception e) { |
| if (theExceptions[i] == null) { |
| fail(i + "Unexpected exception"); |
| } |
| assertEquals(i + "Exception mismatch", e.getClass(), |
| theExceptions[i].getClass()); |
| assertEquals(i + "Exception mismatch", e.getMessage(), |
| theExceptions[i].getMessage()); |
| } // end try |
| } // end for |
| |
| } // end method testSQLExceptionString |
| |
| /* |
| * ConstructorTest |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "", |
| method = "SQLException", |
| args = {} |
| ) |
| public void testSQLException() { |
| |
| String[] theFinalStates1 = { null }; |
| String[] theFinalStates2 = { null }; |
| int[] theFinalStates3 = { 0 }; |
| SQLException[] theFinalStates4 = { null }; |
| |
| Exception[] theExceptions = { null }; |
| |
| SQLException aSQLException; |
| int loopCount = 1; |
| for (int i = 0; i < loopCount; i++) { |
| try { |
| aSQLException = new SQLException(); |
| if (theExceptions[i] != null) { |
| fail(); |
| } |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getMessage(), theFinalStates1[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getSQLState(), theFinalStates2[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getErrorCode(), theFinalStates3[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getNextException(), theFinalStates4[i]); |
| |
| } catch (Exception e) { |
| if (theExceptions[i] == null) { |
| fail(i + "Unexpected exception"); |
| } |
| assertEquals(i + "Exception mismatch", e.getClass(), |
| theExceptions[i].getClass()); |
| assertEquals(i + "Exception mismatch", e.getMessage(), |
| theExceptions[i].getMessage()); |
| } // end try |
| } // end for |
| |
| } // end method testSQLException |
| |
| /* |
| * Method test for getErrorCode |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "", |
| method = "getErrorCode", |
| args = {} |
| ) |
| public void testGetErrorCode() { |
| |
| SQLException aSQLException; |
| String[] init1 = { "a", "1", "valid1", "----", null, "&valid*", "1" }; |
| String[] init2 = { "a", "1", "valid1", "----", "&valid*", null, "a" }; |
| int[] init3 = { -2147483648, 2147483647, 0, 48429456, 1770127344, |
| 1047282235, -545472907 }; |
| |
| int theReturn; |
| int[] theReturns = init3; |
| String[] theFinalStates1 = init1; |
| String[] theFinalStates2 = init2; |
| int[] theFinalStates3 = init3; |
| SQLException[] theFinalStates4 = { null, null, null, null, null, null, |
| null }; |
| |
| Exception[] theExceptions = { null, null, null, null, null, null, null }; |
| |
| int loopCount = 1; |
| for (int i = 0; i < loopCount; i++) { |
| try { |
| aSQLException = new SQLException(init1[i], init2[i], init3[i]); |
| theReturn = aSQLException.getErrorCode(); |
| if (theExceptions[i] != null) { |
| fail(i + "Exception missed"); |
| } |
| assertEquals(i + "Return value mismatch", theReturn, |
| theReturns[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getMessage(), theFinalStates1[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getSQLState(), theFinalStates2[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getErrorCode(), theFinalStates3[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getNextException(), theFinalStates4[i]); |
| |
| } catch (Exception e) { |
| if (theExceptions[i] == null) { |
| fail(i + "Unexpected exception"); |
| } |
| assertEquals(i + "Exception mismatch", e.getClass(), |
| theExceptions[i].getClass()); |
| assertEquals(i + "Exception mismatch", e.getMessage(), |
| theExceptions[i].getMessage()); |
| } // end try |
| } // end for |
| |
| } // end method testGetErrorCode |
| |
| /* |
| * Method test for getNextException |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "", |
| method = "getNextException", |
| args = {} |
| ) |
| public void testGetNextException() { |
| |
| SQLException aSQLException; |
| String[] init1 = { "a", "1", "valid1", "----", null, "&valid*", "1" }; |
| String[] init2 = { "a", "1", "valid1", "----", "&valid*", null, "a" }; |
| int[] init3 = { -2147483648, 2147483647, 0, 48429456, 1770127344, |
| 1047282235, -545472907 }; |
| SQLException[] init4 = { new SQLException(), null, new SQLException(), |
| new SQLException(), new SQLException(), null, |
| new SQLException() }; |
| |
| SQLException theReturn; |
| SQLException[] theReturns = init4; |
| String[] theFinalStates1 = init1; |
| String[] theFinalStates2 = init2; |
| int[] theFinalStates3 = init3; |
| SQLException[] theFinalStates4 = init4; |
| |
| Exception[] theExceptions = { null, null, null, null, null, null, null }; |
| |
| int loopCount = init1.length; |
| for (int i = 0; i < loopCount; i++) { |
| try { |
| aSQLException = new SQLException(init1[i], init2[i], init3[i]); |
| aSQLException.setNextException(init4[i]); |
| theReturn = aSQLException.getNextException(); |
| if (theExceptions[i] != null) { |
| fail(i + "Exception missed"); |
| } |
| assertEquals(i + "Return value mismatch", theReturn, |
| theReturns[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getMessage(), theFinalStates1[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getSQLState(), theFinalStates2[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getErrorCode(), theFinalStates3[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getNextException(), theFinalStates4[i]); |
| |
| } catch (Exception e) { |
| if (theExceptions[i] == null) { |
| fail(i + "Unexpected exception"); |
| } |
| assertEquals(i + "Exception mismatch", e.getClass(), |
| theExceptions[i].getClass()); |
| assertEquals(i + "Exception mismatch", e.getMessage(), |
| theExceptions[i].getMessage()); |
| } // end try |
| } // end for |
| |
| } // end method testGetNextException |
| |
| /* |
| * Method test for getSQLState |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "", |
| method = "getSQLState", |
| args = {} |
| ) |
| public void testGetSQLState() { |
| |
| SQLException aSQLException; |
| String[] init1 = { "a", "1", "valid1", "----", null, "&valid*", "1" }; |
| String[] init2 = { "a", "1", "valid1", "----", "&valid*", null, "a" }; |
| int[] init3 = { -2147483648, 2147483647, 0, 48429456, 1770127344, |
| 1047282235, -545472907 }; |
| |
| String theReturn; |
| String[] theReturns = init2; |
| String[] theFinalStates1 = init1; |
| String[] theFinalStates2 = init2; |
| int[] theFinalStates3 = init3; |
| SQLException[] theFinalStates4 = { null, null, null, null, null, null, |
| null }; |
| |
| Exception[] theExceptions = { null, null, null, null, null, null, null }; |
| |
| int loopCount = 1; |
| for (int i = 0; i < loopCount; i++) { |
| try { |
| aSQLException = new SQLException(init1[i], init2[i], init3[i]); |
| theReturn = aSQLException.getSQLState(); |
| if (theExceptions[i] != null) { |
| fail(i + "Exception missed"); |
| } |
| assertEquals(i + "Return value mismatch", theReturn, |
| theReturns[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getMessage(), theFinalStates1[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getSQLState(), theFinalStates2[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getErrorCode(), theFinalStates3[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getNextException(), theFinalStates4[i]); |
| |
| } catch (Exception e) { |
| if (theExceptions[i] == null) { |
| fail(i + "Unexpected exception"); |
| } |
| assertEquals(i + "Exception mismatch", e.getClass(), |
| theExceptions[i].getClass()); |
| assertEquals(i + "Exception mismatch", e.getMessage(), |
| theExceptions[i].getMessage()); |
| } // end try |
| } // end for |
| |
| } // end method testGetSQLState |
| |
| /* |
| * Method test for setNextException |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "setNextException", |
| args = {java.sql.SQLException.class} |
| ) |
| public void testSetNextExceptionSQLException() { |
| |
| SQLException[] parm1 = { new SQLException(), null, new SQLException(), |
| new SQLException(), new SQLException(), null, |
| new SQLException() }; |
| |
| SQLException aSQLException; |
| |
| String[] init1 = { "a", "1", "valid1", "----", null, "&valid*", "1" }; |
| String[] init2 = { "a", "1", "valid1", "----", "&valid*", null, "a" }; |
| int[] init3 = { -2147483648, 2147483647, 0, 48429456, 1770127344, |
| 1047282235, -545472907 }; |
| |
| String[] theFinalStates1 = init1; |
| String[] theFinalStates2 = init2; |
| int[] theFinalStates3 = init3; |
| SQLException[] theFinalStates4 = parm1; |
| |
| Exception[] theExceptions = { null, null, null, null, null, null, null, |
| null, null, null, null }; |
| |
| int loopCount = parm1.length; |
| for (int i = 0; i < loopCount; i++) { |
| try { |
| aSQLException = new SQLException(init1[i], init2[i], init3[i]); |
| aSQLException.setNextException(parm1[i]); |
| if (theExceptions[i] != null) { |
| fail(i + "Exception missed"); |
| } |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getMessage(), theFinalStates1[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getSQLState(), theFinalStates2[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getErrorCode(), theFinalStates3[i]); |
| assertEquals(i + " Final state mismatch", aSQLException |
| .getNextException(), theFinalStates4[i]); |
| |
| } catch (Exception e) { |
| if (theExceptions[i] == null) { |
| fail(i + "Unexpected exception"); |
| } |
| assertEquals(i + "Exception mismatch", e.getClass(), |
| theExceptions[i].getClass()); |
| assertEquals(i + "Exception mismatch", e.getMessage(), |
| theExceptions[i].getMessage()); |
| } // end try |
| } // end for |
| |
| } // end method testSetNextExceptionSQLException |
| |
| /** |
| * @tests serialization/deserialization compatibility. |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "Serialization test", |
| method = "!SerializationSelf", |
| args = {} |
| ) |
| public void testSerializationSelf() throws Exception { |
| SQLException object = new SQLException(); |
| SerializationTest.verifySelf(object, SQLEXCEPTION_COMPARATOR); |
| } |
| |
| /** |
| * @tests serialization/deserialization compatibility with RI. |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "Serialization test", |
| method = "!SerializationGolden", |
| args = {} |
| ) |
| public void testSerializationCompatibility() throws Exception { |
| |
| SQLException nextSQLException = new SQLException("nextReason", |
| "nextSQLState", 33); |
| |
| int vendorCode = 10; |
| SQLException object = new SQLException("reason", "SQLState", vendorCode); |
| |
| object.setNextException(nextSQLException); |
| |
| SerializationTest.verifyGolden(this, object, SQLEXCEPTION_COMPARATOR); |
| } |
| |
| // comparator for SQLException objects |
| private static final SerializableAssert SQLEXCEPTION_COMPARATOR = new SerializableAssert() { |
| public void assertDeserialized(Serializable initial, |
| Serializable deserialized) { |
| |
| // do common checks for all throwable objects |
| SerializationTest.THROWABLE_COMPARATOR.assertDeserialized(initial, |
| deserialized); |
| |
| SQLException initThr = (SQLException) initial; |
| SQLException dserThr = (SQLException) deserialized; |
| |
| // verify SQLState |
| Assert.assertEquals("SQLState", initThr.getSQLState(), dserThr |
| .getSQLState()); |
| |
| // verify vendorCode |
| Assert.assertEquals("vendorCode", initThr.getErrorCode(), dserThr |
| .getErrorCode()); |
| |
| // verify next |
| if (initThr.getNextException() == null) { |
| assertNull(dserThr.getNextException()); |
| } else { |
| // use the same comparator |
| SQLEXCEPTION_COMPARATOR.assertDeserialized(initThr |
| .getNextException(), dserThr.getNextException()); |
| } |
| } |
| }; |
| |
| /** |
| * @tests java.sql.SQLException#setNextException(java.sql.SQLException) |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "setNextException", |
| args = {java.sql.SQLException.class} |
| ) |
| public void test_setNextException_LSQLException() { |
| SQLException se1 = new SQLException("reason" , "SQLState" , 1); |
| SQLException se2 = new SQLException("reason" , "SQLState" , 2); |
| SQLException se3 = new SQLException("reason" , "SQLState" , 3); |
| SQLException se4 = new SQLException("reason" , "SQLState" , 4); |
| |
| se1.setNextException(se2); |
| assertSame(se2, se1.getNextException()); |
| |
| se1.setNextException(se3); |
| assertSame(se2, se1.getNextException()); |
| assertSame(se3, se2.getNextException()); |
| assertNull(se3.getNextException()); |
| |
| se3.setNextException(null); |
| assertNull(se3.getNextException()); |
| |
| se3.setNextException(se4); |
| assertSame(se4, se3.getNextException()); |
| } |
| |
| } // end class SQLExceptionTest |
| |