package liquibase.database;
import static org.easymock.EasyMock.*;
import static org.junit.Assert.*;
import org.junit.Test;
/**
* Base test class for database-specific tests
*/
public abstract class AbstractDatabaseTest {
protected AbstractDatabase database;
protected AbstractDatabaseTest(AbstractDatabase database) throws Exception {
this.database = database;
}
public AbstractDatabase getDatabase() {
return database;
}
protected abstract String getProductNameString();
public abstract void supportsInitiallyDeferrableColumns();
public abstract void getCurrentDateTimeFunction();
@Test
public void isCorrectDatabaseImplementation() throws Exception {
assertTrue(getDatabase().isCorrectDatabaseImplementation(getMockConnection()));
}
protected DatabaseConnection getMockConnection() throws Exception {
DatabaseConnection conn = createMock(DatabaseConnection.class);
// DatabaseMetaData metaData = createMock(DatabaseMetaData.class);
conn.setAutoCommit(false);
expectLastCall().anyTimes();
// expect(((JdbcConnection) conn).getUnderlyingConnection().getMetaData()).andReturn(metaData).anyTimes();
expect(conn.getDatabaseProductName()).andReturn(getProductNameString()).anyTimes();
replay(conn);
// replay(metaData);
return conn;
}
@Test
public void escapeTableName_noSchema() {
Database database = getDatabase();
assertEquals("tableName", database.escapeTableName(null, "tableName"));
}
@Test
public void escapeTableName_withSchema() {
Database database = getDatabase();
assertEquals("schemaName.tableName", database.escapeTableName("schemaName", "tableName"));
}
// @Test
// public void getColumnType_javaTypes() throws SQLException {
// Database database = getDatabase();
// DatabaseConnection connection = database.getConnection();
// if (connection != null) {
// ((JdbcConnection) connection).getUnderlyingConnection().rollback();
// assertEquals(database.getDateType().getDataTypeName().toUpperCase(), database.getDataType("java.sql.Types.DATE", false).toUpperCase());
// assertEquals(database.getBooleanType().getDataTypeName().toUpperCase(), database.getDataType("java.sql.Types.BOOLEAN", false).toUpperCase());
// assertEquals("VARCHAR(255)", database.getDataType("java.sql.Types.VARCHAR(255)", false).toUpperCase().replaceAll("VARCHAR2", "VARCHAR"));
// }
// }
}