/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.engine.jdbc.dialect.internal;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.sql.SQLException;
import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.PostgreSQL81Dialect;
import org.hibernate.dialect.PostgreSQL82Dialect;
import org.hibernate.dialect.PostgreSQL9Dialect;
import org.hibernate.dialect.SQLServer2005Dialect;
import org.hibernate.dialect.SQLServer2008Dialect;
import org.hibernate.dialect.SQLServer2012Dialect;
import org.hibernate.dialect.SQLServerDialect;
import org.hibernate.dialect.resolver.TestingDialectResolutionInfo;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.junit.Test;
/**
* Unit test of the {@link StandardDialectResolver} class.
*
* @author Bryan Turner
*/
public class StandardDialectResolverTest extends BaseUnitTestCase {
@Test
public void testResolveDialectInternalForSQLServer2000()
throws SQLException {
runSQLServerDialectTest( 8, SQLServerDialect.class );
}
@Test
public void testResolveDialectInternalForSQLServer2005()
throws SQLException {
runSQLServerDialectTest( 9, SQLServer2005Dialect.class );
}
@Test
public void testResolveDialectInternalForSQLServer2008()
throws SQLException {
runSQLServerDialectTest( 10, SQLServer2008Dialect.class );
}
@Test
public void testResolveDialectInternalForSQLServer2012()
throws SQLException {
runSQLServerDialectTest( 11, SQLServer2008Dialect.class );
}
@Test
public void testResolveDialectInternalForSQLServer2014()
throws SQLException {
runSQLServerDialectTest( 12, SQLServer2012Dialect.class );
}
@Test
public void testResolveDialectInternalForUnknownSQLServerVersion()
throws SQLException {
runSQLServerDialectTest( 7, SQLServerDialect.class );
}
@Test
public void testResolveDialectInternalForPostgres81()
throws SQLException {
runPostgresDialectTest( 8, 1, PostgreSQL81Dialect.class );
}
@Test
public void testResolveDialectInternalForPostgres82()
throws SQLException {
runPostgresDialectTest( 8, 2, PostgreSQL82Dialect.class );
}
@Test
public void testResolveDialectInternalForPostgres83() throws SQLException {
runPostgresDialectTest( 8, 3, PostgreSQL82Dialect.class );
}
@Test
public void testResolveDialectInternalForPostgres84() throws SQLException {
runPostgresDialectTest( 8, 4, PostgreSQL82Dialect.class );
}
@Test
public void testResolveDialectInternalForPostgres9() throws SQLException {
runPostgresDialectTest( 9, 0, PostgreSQL9Dialect.class );
}
@Test
public void testResolveDialectInternalForPostgres91() throws SQLException {
runPostgresDialectTest( 9, 1, PostgreSQL9Dialect.class );
}
@Test
public void testResolveDialectInternalForPostgres92() throws SQLException {
runPostgresDialectTest( 9, 2, PostgreSQL9Dialect.class );
}
private static void runSQLServerDialectTest(
int version, Class<? extends SQLServerDialect> expectedDialect)
throws SQLException {
runDialectTest( "Microsoft SQL Server", version, 0,
expectedDialect );
}
private static void runPostgresDialectTest(
int majorVersion, int minorVersion,
Class<? extends Dialect> expectedDialect) throws SQLException {
runDialectTest( "PostgreSQL", majorVersion, minorVersion,
expectedDialect );
}
private static void runDialectTest(
String productName,
int majorVersion,
int minorVersion,
Class<? extends Dialect> expectedDialect) {
TestingDialectResolutionInfo info = TestingDialectResolutionInfo.forDatabaseInfo( productName, majorVersion, minorVersion );
Dialect dialect = StandardDialectResolver.INSTANCE.resolveDialect( info );
StringBuilder builder = new StringBuilder( productName ).append( " " )
.append( majorVersion );
if ( minorVersion > 0 ) {
builder.append( "." ).append( minorVersion );
}
String dbms = builder.toString();
assertNotNull( "Dialect for " + dbms + " should not be null", dialect );
assertTrue( "Dialect for " + dbms + " should be "
+ expectedDialect.getSimpleName(),
expectedDialect.isInstance( dialect ) );
}
}