[License Info] JSourcery
package org.springframework.jdbc.support;
import java.sql.SQLException;
import junit.framework.TestCase;
import org.springframework.dao.CannotAcquireLockException;
import org.springframework.dao.CannotSerializeTransactionException;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.dao.DeadlockLoserDataAccessException;
import org.springframework.jdbc.BadSqlGrammarException;
import org.springframework.jdbc.InvalidResultSetAccessException;
public class SQLErrorCodeSQLExceptionTranslatorTests  extends  TestCase {

      
  
  
    
    private static SQLErrorCodes ERROR_CODES = new SQLErrorCodes();
    static {
        ERROR_CODES.setBadSqlGrammarCodes(new String[]{"1", "2"});
        ERROR_CODES.setInvalidResultSetAccessCodes(new String[]{"3", "4"});
        ERROR_CODES.setDataAccessResourceFailureCodes(new String[]{"5"});
        ERROR_CODES.setDataIntegrityViolationCodes(new String[]{"6"});
        ERROR_CODES.setCannotAcquireLockCodes(new String[]{"7"});
        ERROR_CODES.setDeadlockLoserCodes(new String[]{"8"});
        ERROR_CODES.setCannotSerializeTransactionCodes(new String[]{"9"});
    }
    
    public void testErrorCodeTranslation() {
        SQLExceptionTranslator sext = new SQLErrorCodeSQLExceptionTranslator(ERROR_CODES);
        SQLException badSqlEx = new SQLException("", "", 1);
        BadSqlGrammarException bsgex = (BadSqlGrammarException)sext.translate("task", "SQL", badSqlEx);
        assertEquals("SQL", bsgex.getSql());
        assertEquals(badSqlEx, bsgex.getSQLException());
        SQLException invResEx = new SQLException("", "", 4);
        InvalidResultSetAccessException irsex = (InvalidResultSetAccessException)sext.translate("task", "SQL", invResEx);
        assertEquals("SQL", irsex.getSql());
        assertEquals(invResEx, irsex.getSQLException());
        checkTranslation(sext, 5, DataAccessResourceFailureException.class);
        checkTranslation(sext, 6, DataIntegrityViolationException.class);
        checkTranslation(sext, 7, CannotAcquireLockException.class);
        checkTranslation(sext, 8, DeadlockLoserDataAccessException.class);
        checkTranslation(sext, 9, CannotSerializeTransactionException.class);
        SQLException sex = new SQLException("", "07xxx", 666666666);
        BadSqlGrammarException bsgex2 = (BadSqlGrammarException)sext.translate("task", "SQL2", sex);
        assertEquals("SQL2", bsgex2.getSql());
        assertEquals(sex, bsgex2.getSQLException());
    }
    
    private void checkTranslation(SQLExceptionTranslator sext, int errorCode, Class exClass) {
        SQLException sex = new SQLException("", "", errorCode);
        DataAccessException ex = sext.translate("", "", sex);
        assertTrue(exClass.isInstance(ex));
        assertTrue(ex.getCause() == sex);
    }
    
    public void testCustomTranslateMethodTranslation() {
        final String TASK = "TASK";
        final String SQL = "SQL SELECT *";
        final DataAccessException customDex = new DataAccessException(""){
            
        };
        final SQLException badSqlEx = new SQLException("", "", 1);
        SQLException intVioEx = new SQLException("", "", 6);
        SQLErrorCodeSQLExceptionTranslator sext = new SQLErrorCodeSQLExceptionTranslator(){
            
            
            protected DataAccessException customTranslate(String task, String sql, SQLException sqlex) {
                assertEquals(TASK, task);
                assertEquals(SQL, sql);
                return (sqlex == badSqlEx) ? customDex : null;
            }
        };
        sext.setSqlErrorCodes(ERROR_CODES);
        assertEquals(customDex, sext.translate(TASK, SQL, badSqlEx));
        DataIntegrityViolationException diex = (DataIntegrityViolationException)sext.translate(TASK, SQL, intVioEx);
        assertEquals(intVioEx, diex.getCause());
    }
    
    public void testCustomExceptionTranslation() {
        final String TASK = "TASK";
        final String SQL = "SQL SELECT *";
        final SQLErrorCodes customErrorCodes = new SQLErrorCodes();
        final CustomSQLErrorCodesTranslation customTranslation = new CustomSQLErrorCodesTranslation();
        customErrorCodes.setBadSqlGrammarCodes(new String[]{"1", "2"});
        customErrorCodes.setDataIntegrityViolationCodes(new String[]{"3", "4"});
        customTranslation.setErrorCodes(new String[]{"1"});
        customTranslation.setExceptionClass(CustomErrorCodeException.class);
        customErrorCodes.setCustomTranslations(new CustomSQLErrorCodesTranslation[]{customTranslation});
        SQLErrorCodeSQLExceptionTranslator sext = new SQLErrorCodeSQLExceptionTranslator();
        sext.setSqlErrorCodes(customErrorCodes);
        SQLException badSqlEx = new SQLException("", "", 1);
        assertEquals(CustomErrorCodeException.class, sext.translate(TASK, SQL, badSqlEx).getClass());
        assertEquals(badSqlEx, sext.translate(TASK, SQL, badSqlEx).getCause());
        SQLException invResEx = new SQLException("", "", 3);
        DataIntegrityViolationException diex = (DataIntegrityViolationException)sext.translate(TASK, SQL, invResEx);
        assertEquals(invResEx, diex.getCause());
        try {
            customTranslation.setExceptionClass(String.class);
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException ex) {
        }
    }
}
[License Info] JSourcery