package org.hibernate.cfg;
import java.util.Properties;
import org.hibernate.cfg.reveng.dialect.H2MetaDataDialect;
import org.hibernate.cfg.reveng.dialect.HSQLMetaDataDialect;
import org.hibernate.cfg.reveng.dialect.JDBCMetaDataDialect;
import org.hibernate.cfg.reveng.dialect.MySQLMetaDataDialect;
import org.hibernate.cfg.reveng.dialect.OracleMetaDataDialect;
import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.H2Dialect;
import org.hibernate.dialect.HSQLDialect;
import org.hibernate.dialect.MySQL5Dialect;
import org.hibernate.dialect.MySQLDialect;
import org.hibernate.dialect.Oracle10gDialect;
import org.hibernate.dialect.Oracle8iDialect;
import org.hibernate.dialect.Oracle9iDialect;
import org.junit.Assert;
import org.junit.Test;
public class MetaDataDialectFactoryTest {
private static class NoNameDialect extends Dialect {}
private static class H2NamedDialect extends Dialect {}
@Test
public void testCreateMetaDataDialect() {
assertSameClass(
"Generic metadata for dialects with no specifics",
JDBCMetaDataDialect.class,
MetaDataDialectFactory.createMetaDataDialect(
new NoNameDialect(),
new Properties()));
assertSameClass(
H2MetaDataDialect.class,
MetaDataDialectFactory.createMetaDataDialect(new H2NamedDialect(), new Properties()));
assertSameClass(
OracleMetaDataDialect.class,
MetaDataDialectFactory.createMetaDataDialect(
new Oracle9iDialect(),
new Properties()));
assertSameClass(
MySQLMetaDataDialect.class,
MetaDataDialectFactory.createMetaDataDialect(
new MySQL5Dialect(),
new Properties()));
Properties p = new Properties();
p.setProperty(
"hibernatetool.metadatadialect",
H2MetaDataDialect.class.getCanonicalName());
assertSameClass(
"property should override specific dialect",
H2MetaDataDialect.class,
MetaDataDialectFactory.createMetaDataDialect(new MySQL5Dialect(), p));
}
@Test
public void testCreateMetaDataDialectNonExistingOverride() {
Properties p = new Properties();
p.setProperty("hibernatetool.metadatadialect", "DoesNotExists");
try {
MetaDataDialectFactory.createMetaDataDialect(new MySQL5Dialect(), p);
Assert.fail();
} catch (JDBCBinderException jbe) {
// expected
} catch(Exception e) {
Assert.fail();
}
}
@Test
public void testFromDialect() {
assertSameClass(
"Generic metadata for dialects with no specifics",
null,
MetaDataDialectFactory.fromDialect(new NoNameDialect()));
assertSameClass(
OracleMetaDataDialect.class,
MetaDataDialectFactory.fromDialect(new Oracle8iDialect()));
assertSameClass(
OracleMetaDataDialect.class,
MetaDataDialectFactory.fromDialect(new Oracle9iDialect()));
assertSameClass(
OracleMetaDataDialect.class,
MetaDataDialectFactory.fromDialect(new Oracle10gDialect()));
assertSameClass(
MySQLMetaDataDialect.class,
MetaDataDialectFactory.fromDialect(new MySQLDialect()));
assertSameClass(
H2MetaDataDialect.class,
MetaDataDialectFactory.fromDialect(new H2Dialect()));
assertSameClass(
HSQLMetaDataDialect.class,
MetaDataDialectFactory.fromDialect(new HSQLDialect()));
}
@Test
public void testFromDialectName() {
assertSameClass(
null,
MetaDataDialectFactory.fromDialectName("BlahBlah"));
assertSameClass(
OracleMetaDataDialect.class,
MetaDataDialectFactory.fromDialectName("mYorAcleDialect"));
assertSameClass(
OracleMetaDataDialect.class,
MetaDataDialectFactory.fromDialectName(Oracle8iDialect.class.getName()));
assertSameClass(
OracleMetaDataDialect.class,
MetaDataDialectFactory.fromDialectName(Oracle9iDialect.class.getName()));
assertSameClass(
MySQLMetaDataDialect.class,
MetaDataDialectFactory.fromDialectName(MySQLDialect.class.getName()));
assertSameClass(
H2MetaDataDialect.class,
MetaDataDialectFactory.fromDialectName(H2Dialect.class.getName()));
assertSameClass(
HSQLMetaDataDialect.class,
MetaDataDialectFactory.fromDialectName(HSQLDialect.class.getName()));
}
private void assertSameClass(Class<?> clazz, Object instance) {
if(clazz==null && instance==null) {
Assert.assertEquals((Object)null, (Object)null);
return;
}
if(clazz==null) {
Assert.assertEquals(null, instance);
return;
}
if(instance==null) {
Assert.assertEquals(clazz.getCanonicalName(), null);
return;
}
Assert.assertEquals(clazz.getCanonicalName(), instance.getClass().getName());
}
private void assertSameClass(String msg, Class<?> clazz, Object instance) {
if(clazz==null && instance==null) {
Assert.assertEquals((Object)null, (Object)null);
return;
}
if(clazz==null) {
Assert.assertEquals(msg, null, instance);
return;
}
if(instance==null) {
Assert.assertEquals(msg, clazz.getCanonicalName(), null);
return;
}
Assert.assertEquals(msg, clazz.getCanonicalName(), instance.getClass().getName());
}
}