Make mock driver Java 7 compatible again (Travis standard JDK).

master
baztian 2017-03-12 21:47:10 +01:00
parent 4df6414d27
commit 8f3345bcdf
2 changed files with 76 additions and 78 deletions

View File

@ -8,8 +8,8 @@
<packaging>jar</packaging> <packaging>jar</packaging>
<properties> <properties>
<maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.target>1.7</maven.compiler.target>
</properties> </properties>
<dependencies> <dependencies>

View File

@ -1,4 +1,3 @@
package org.jaydebeapi.mockdriver; package org.jaydebeapi.mockdriver;
import java.lang.reflect.Field; import java.lang.reflect.Field;
@ -9,93 +8,92 @@ import java.sql.ResultSet;
import java.sql.ResultSetMetaData; import java.sql.ResultSetMetaData;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Types; import java.sql.Types;
import java.time.LocalDate; import java.util.Calendar;
import org.mockito.Mockito; import org.mockito.Mockito;
public abstract class MockConnection implements Connection { public abstract class MockConnection implements Connection {
ResultSet mockResultSet; ResultSet mockResultSet;
private static Throwable createException(String className, String exceptionMessage) {
public final void mockExceptionOnCommit(String className, String exceptionMessage) throws SQLException { try {
Throwable exception = createException(className, exceptionMessage); return (Throwable) Class.forName(className).getConstructor(String.class)
Mockito.doThrow(exception).when(this).commit(); .newInstance(exceptionMessage);
} catch (Exception e) {
throw new RuntimeException("Couldn't initialize class " + className + ".", e);
} }
}
private static int extractTypeCodeForName(String sqlTypesName) {
public final void mockExceptionOnRollback(String className, String exceptionMessage) throws SQLException { try {
Throwable exception = createException(className, exceptionMessage); Field field = Types.class.getField(sqlTypesName);
Mockito.doThrow(exception).when(this).rollback(); return field.getInt(null);
} catch (NoSuchFieldException e) {
throw new IllegalArgumentException("Type " + sqlTypesName + " not found in Types class.", e);
} catch (SecurityException e) {
throw new RuntimeException(e);
} catch (IllegalArgumentException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} }
}
public final void mockExceptionOnCommit(String className, String exceptionMessage)
throws SQLException {
Throwable exception = createException(className, exceptionMessage);
Mockito.doThrow(exception).when(this).commit();
}
public final void mockExceptionOnExecute(String className, String exceptionMessage) throws SQLException { public final void mockExceptionOnRollback(String className, String exceptionMessage)
PreparedStatement mockPreparedStatement = Mockito.mock(PreparedStatement.class); throws SQLException {
Throwable exception = createException(className, exceptionMessage); Throwable exception = createException(className, exceptionMessage);
Mockito.when(mockPreparedStatement.execute()).thenThrow(exception); Mockito.doThrow(exception).when(this).rollback();
Mockito.when(this.prepareStatement(Mockito.anyString())).thenReturn(mockPreparedStatement); }
}
public final void mockExceptionOnExecute(String className, String exceptionMessage)
throws SQLException {
PreparedStatement mockPreparedStatement = Mockito.mock(PreparedStatement.class);
Throwable exception = createException(className, exceptionMessage);
Mockito.when(mockPreparedStatement.execute()).thenThrow(exception);
Mockito.when(this.prepareStatement(Mockito.anyString())).thenReturn(mockPreparedStatement);
}
public final void mockDateResult(int year, int month, int day) throws SQLException { public final void mockDateResult(int year, int month, int day) throws SQLException {
PreparedStatement mockPreparedStatement = Mockito.mock(PreparedStatement.class); PreparedStatement mockPreparedStatement = Mockito.mock(PreparedStatement.class);
Mockito.when(mockPreparedStatement.execute()).thenReturn(true); Mockito.when(mockPreparedStatement.execute()).thenReturn(true);
mockResultSet = Mockito.mock(ResultSet.class, "ResultSet(for date)"); mockResultSet = Mockito.mock(ResultSet.class, "ResultSet(for date)");
Mockito.when(mockPreparedStatement.getResultSet()).thenReturn(mockResultSet); Mockito.when(mockPreparedStatement.getResultSet()).thenReturn(mockResultSet);
Mockito.when(mockResultSet.next()).thenReturn(true); Mockito.when(mockResultSet.next()).thenReturn(true);
ResultSetMetaData mockMetaData = Mockito.mock(ResultSetMetaData.class); ResultSetMetaData mockMetaData = Mockito.mock(ResultSetMetaData.class);
Mockito.when(mockResultSet.getMetaData()).thenReturn(mockMetaData); Mockito.when(mockResultSet.getMetaData()).thenReturn(mockMetaData);
Mockito.when(mockMetaData.getColumnCount()).thenReturn(1); Mockito.when(mockMetaData.getColumnCount()).thenReturn(1);
Date ancientDate = Date.valueOf(LocalDate.of(year, month, day)); Calendar cal = Calendar.getInstance();
Mockito.when(mockResultSet.getDate(1)).thenReturn(ancientDate); cal.clear();
Mockito.when(mockMetaData.getColumnType(1)).thenReturn(Types.DATE); cal.set(Calendar.YEAR, year);
Mockito.when(this.prepareStatement(Mockito.anyString())).thenReturn(mockPreparedStatement); cal.set(Calendar.MONTH, month - 1);
} cal.set(Calendar.DAY_OF_MONTH, day);
Date ancientDate = new Date(cal.getTime().getTime());
Mockito.when(mockResultSet.getDate(1)).thenReturn(ancientDate);
Mockito.when(mockMetaData.getColumnType(1)).thenReturn(Types.DATE);
Mockito.when(this.prepareStatement(Mockito.anyString())).thenReturn(mockPreparedStatement);
}
public final void mockType(String sqlTypesName) throws SQLException {
PreparedStatement mockPreparedStatement = Mockito.mock(PreparedStatement.class);
Mockito.when(mockPreparedStatement.execute()).thenReturn(true);
mockResultSet = Mockito.mock(ResultSet.class, "ResultSet(for type " + sqlTypesName + ")");
Mockito.when(mockPreparedStatement.getResultSet()).thenReturn(mockResultSet);
Mockito.when(mockResultSet.next()).thenReturn(true);
ResultSetMetaData mockMetaData = Mockito.mock(ResultSetMetaData.class);
Mockito.when(mockResultSet.getMetaData()).thenReturn(mockMetaData);
Mockito.when(mockMetaData.getColumnCount()).thenReturn(1);
int sqlTypeCode = extractTypeCodeForName(sqlTypesName);
Mockito.when(mockMetaData.getColumnType(1)).thenReturn(sqlTypeCode);
Mockito.when(this.prepareStatement(Mockito.anyString())).thenReturn(mockPreparedStatement);
}
public final void mockType(String sqlTypesName) throws SQLException { public final ResultSet verifyResultSet() {
PreparedStatement mockPreparedStatement = Mockito.mock(PreparedStatement.class); return Mockito.verify(mockResultSet);
Mockito.when(mockPreparedStatement.execute()).thenReturn(true); }
mockResultSet = Mockito.mock(ResultSet.class, "ResultSet(for type " + sqlTypesName + ")");
Mockito.when(mockPreparedStatement.getResultSet()).thenReturn(mockResultSet);
Mockito.when(mockResultSet.next()).thenReturn(true);
ResultSetMetaData mockMetaData = Mockito.mock(ResultSetMetaData.class);
Mockito.when(mockResultSet.getMetaData()).thenReturn(mockMetaData);
Mockito.when(mockMetaData.getColumnCount()).thenReturn(1);
int sqlTypeCode = extractTypeCodeForName(sqlTypesName);
Mockito.when(mockMetaData.getColumnType(1)).thenReturn(sqlTypeCode);
Mockito.when(this.prepareStatement(Mockito.anyString())).thenReturn(mockPreparedStatement);
}
public final ResultSet verifyResultSet() {
return Mockito.verify(mockResultSet);
}
private static Throwable createException(String className, String exceptionMessage) {
try {
return (Throwable) Class.forName(className).getConstructor(String.class).newInstance(exceptionMessage);
} catch (Exception e) {
throw new RuntimeException("Couldn't initialize class " + className + ".", e);
}
}
private static int extractTypeCodeForName(String sqlTypesName) {
try {
Field field = Types.class.getField(sqlTypesName);
return field.getInt(null);
} catch (NoSuchFieldException e) {
throw new IllegalArgumentException("Type " + sqlTypesName + " not found in Types class.", e);
} catch (SecurityException e) {
throw new RuntimeException(e);
} catch (IllegalArgumentException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
} }