package liquibase.database.core;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import junit.framework.TestCase;
import liquibase.database.Database;
import liquibase.database.DatabaseConnection;
import liquibase.database.ObjectQuotingStrategy;
import liquibase.structure.core.Table;
public class HsqlDatabaseTest extends TestCase {
public void testGetDefaultDriver() {
Database database = new HsqlDatabase();
assertEquals("org.hsqldb.jdbcDriver", database.getDefaultDriver("jdbc:hsqldb:mem:liquibase"));
assertNull(database.getDefaultDriver("jdbc:oracle://localhost;databaseName=liquibase"));
}
public void testGetConcatSql() {
Database database = new HsqlDatabase();
String expectedResult = "CONCAT(str1, CONCAT(str2, CONCAT(str3, str4)))";
String value = "v";
String[] values = new String[]{"str1", "str2", "str3", "str4"};
assertEquals(database.getConcatSql(value), value);
assertEquals(database.getConcatSql(values), expectedResult);
assertNull(database.getConcatSql((String[]) null));
}
/**
* Verifies that {@link HsqlDatabase#escapeObjectName(String, Class)}
* respects the value of {@link HsqlDatabase#getObjectQuotingStrategy()}.
*/
public void testEscapeObjectName() {
Database databaseWithDefaultQuoting = new HsqlDatabase();
databaseWithDefaultQuoting.setObjectQuotingStrategy(ObjectQuotingStrategy.LEGACY);
assertEquals("Test", databaseWithDefaultQuoting.escapeObjectName("Test", Table.class));
Database databaseWithAllQuoting = new HsqlDatabase();
databaseWithAllQuoting.setObjectQuotingStrategy(ObjectQuotingStrategy.QUOTE_ALL_OBJECTS);
assertEquals("\"Test\"", databaseWithAllQuoting.escapeObjectName("Test", Table.class));
}
public void testUsingOracleSyntax() {
HsqlDatabase database = new HsqlDatabase();
DatabaseConnection conn = mock(DatabaseConnection.class);
when(conn.getURL()).thenReturn("jdbc:hsqldb:mem:testdb;sql.syntax_ora=true;sql.enforce_names=true");
database.setConnection(conn );
assertTrue("Using oracle syntax", database.isUsingOracleSyntax());
}
public void testNotUsingOracleSyntax() {
HsqlDatabase database = new HsqlDatabase();
DatabaseConnection conn = mock(DatabaseConnection.class);
when(conn.getURL()).thenReturn("jdbc:hsqldb:mem:testdb");
database.setConnection(conn );
assertFalse("Using oracle syntax", database.isUsingOracleSyntax());
}
}