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")); // } // } }