/*
* Copyright 2006 Le Duc Bao, Ralf Joachim
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.castor.ddlgen.test.framework;
import java.io.ByteArrayOutputStream;
import java.net.URL;
import junit.framework.TestCase;
import org.castor.ddlgen.AbstractGenerator;
import org.castor.ddlgen.DDLGenConfiguration;
import org.castor.ddlgen.DDLWriter;
import org.castor.mapping.MappingUnmarshaller;
import org.exolab.castor.mapping.Mapping;
/**
* This class handles all testcase for all database. The specific database will
* inherite this class. Expecting that all testcase use the same scenarios for
* all database. The expected results may differ. The engine defines which expected
* result will be loaded to the testcase. The inherited class may redefine this
* variable to reuse the test scenarios.
*
* @author <a href="mailto:leducbao AT gmail DOT com">Le Duc Bao</a>
* @author <a href="mailto:ralf DOT joachim AT syscon DOT eu">Ralf Joachim</a>
* @version $Revision: 5951 $ $Date: 2006-04-25 16:09:10 -0600 (Tue, 25 Apr 2006) $
* @since 1.1
*/
public abstract class AbstractGeneratorTest extends TestCase {
//--------------------------------------------------------------------------
/** Path of the expected result pattern files. */
private static final String EXPECTED_PATH = "../expected/";
/** Path of the test mapping files. */
private static final String MAPPING_PATH = "../mapping/";
/** Default parameter prefix. */
protected static final String PARAM_PREFIX = "default_";
/** Prostfix of length parameters for types in ddl.properties file. */
protected static final String PARAM_LENGTH = "_length";
/** Prostfix of precision parameters for types in ddl.properties file. */
protected static final String PARAM_PRECISION = "_precision";
/** Prostfix of decimals parameters for types in ddl.properties file. */
protected static final String PARAM_DECIMALS = "_decimals";
//--------------------------------------------------------------------------
/** Database engine. */
private String _engine = Expected.ENGINE_GENERIC;
/** DDL generator. */
private AbstractGenerator _generator;
/** Expected result pattern. */
private Expected _expected;
//--------------------------------------------------------------------------
/**
* Constructor for BaseGeneratorTest
*
* @param testcase
* test case
*/
public AbstractGeneratorTest(final String testcase) {
super(testcase);
}
//--------------------------------------------------------------------------
/**
* Get database engine.
*
* @return Database engine.
*/
public final String getEngine() {
return _engine;
}
/**
* Set database engine.
*
* @param engine atabase engine.
*/
public final void setEngine(final String engine) {
_engine = engine;
}
/**
* Get DDL generator.
*
* @return DDL generator.
*/
public final AbstractGenerator getGenerator() {
return _generator;
}
/**
* Set DDL generator.
*
* @param generator DDL generator.
*/
public final void setGenerator(final AbstractGenerator generator) {
_generator = generator;
}
/**
* Get expected result pattern.
*
* @return Expected result pattern.
*/
public final Expected getExpected() {
return _expected;
}
/**
* Set expected result pattern.
*
* @param expected Expected result pattern.
*/
public final void setExpected(final Expected expected) {
_expected = expected;
}
//--------------------------------------------------------------------------
/**
* Load test mapping file and expected result pattern file with given filename.
*
* @param filename Name of test mapping and expected result pattern files.
* @throws Exception If any exception occured during unmarshalling of expected result
* patterns, loading of test mapping or creation of schema objects.
*/
protected final void loadData(final String filename) throws Exception {
URL mappingURL = AbstractGeneratorTest.class.getResource(MAPPING_PATH + filename);
Mapping mapping = new Mapping();
mapping.loadMapping(mappingURL);
new MappingUnmarshaller().loadMappingOnly(mapping);
// TODO Joachim 2007-09-07 the InternalContext should be set into the unmarshaller!
_generator.setMapping(mapping);
_generator.createSchema();
URL expectedURL = AbstractGeneratorTest.class.getResource(EXPECTED_PATH + filename);
_expected = Expected.getExpectedResult(expectedURL);
_expected.setConf(_generator.getConfiguration());
}
//--------------------------------------------------------------------------
/**
* Create DDL script for one table.
*/
public final void testSingleTable() {
try {
loadData("single_table.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getStringValue(PARAM_PREFIX + "integer" + PARAM_PRECISION, ""),
conf.getStringValue(PARAM_PREFIX + "char" + PARAM_LENGTH, "") };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testSingleTable: " + e.getMessage());
}
}
/**
* Ignore class mapping without table definition.
*/
public final void testIgnoredTable() {
try {
loadData("ignored_table.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testIgnoredTable: " + e.getMessage());
}
}
/**
* Mapping contains no class definitions..
*/
public final void testNoTable() {
try {
loadData("no_table.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testNoTable: " + e.getMessage());
}
}
/**
* Create drop table DDL script.
*/
public final void testDropTable() {
try {
loadData("drop_table.xml");
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, _generator.getConfiguration());
_generator.generateDrop(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, ddl);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testDropTable: " + e.getMessage());
}
}
/**
* Identity is defined at class tag.
*/
public final void testClassId() {
try {
loadData("class_id.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, 0, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
out = new ByteArrayOutputStream();
writer = new DDLWriter(out, conf);
_generator.generatePrimaryKey(writer);
writer.close();
ddl = out.toString();
b = _expected.match(_engine, 1, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testClassId: " + e.getMessage());
}
}
/**
* Identity is defined at class tag and there are multiple identities.
*/
public final void testClassMultipleId() {
try {
loadData("class_multiple_id.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, 0, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
out = new ByteArrayOutputStream();
writer = new DDLWriter(out, conf);
_generator.generatePrimaryKey(writer);
writer.close();
ddl = out.toString();
b = _expected.match(_engine, 1, ddl, null);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testClassMultipleId: " + e.getMessage());
}
}
/**
* Identity is defined at field tag.
*/
public final void testFieldId() {
try {
loadData("field_id.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, 0, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
out = new ByteArrayOutputStream();
writer = new DDLWriter(out, conf);
_generator.generatePrimaryKey(writer);
writer.close();
ddl = out.toString();
b = _expected.match(_engine, 1, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testFieldId: " + e.getMessage());
}
}
/**
* Identity is defined at field tag and there are multiple identities.
*/
public final void testFieldMultipleId() {
try {
loadData("field_multiple_id.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, 0, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
out = new ByteArrayOutputStream();
writer = new DDLWriter(out, conf);
_generator.generatePrimaryKey(writer);
writer.close();
ddl = out.toString();
b = _expected.match(_engine, 1, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testFieldMultipleId: " + e.getMessage());
}
}
/**
* Missing identity definition.
*/
public final void testNoId() {
try {
loadData("no_id.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, 0, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
out = new ByteArrayOutputStream();
writer = new DDLWriter(out, conf);
_generator.generatePrimaryKey(writer);
writer.close();
ddl = out.toString();
b = _expected.match(_engine, 1, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testNoId: " + e.getMessage());
}
}
/**
* Create many tables from one mapping.
*/
public final void testMultipleTable() {
try {
loadData("multiple_table.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testMultipleTable: " + e.getMessage());
}
}
/**
* Create a table with 23 fields representing to each possible data type.
*/
public final void testSingleFieldForAll() {
try {
loadData("single_field_for_all.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "tinyint" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "smallint" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "bigint" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "float" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "float" + PARAM_DECIMALS),
conf.getInteger(PARAM_PREFIX + "double" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "double" + PARAM_DECIMALS),
conf.getInteger(PARAM_PREFIX + "real" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "real" + PARAM_DECIMALS),
conf.getInteger(PARAM_PREFIX + "numeric" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "numeric" + PARAM_DECIMALS),
conf.getInteger(PARAM_PREFIX + "decimal" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "decimal" + PARAM_DECIMALS),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH),
conf.getInteger(PARAM_PREFIX + "varchar" + PARAM_LENGTH),
conf.getStringValue(PARAM_PREFIX + "longvarchar" + PARAM_LENGTH),
conf.getInteger(PARAM_PREFIX + "timestamp" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "binary" + PARAM_LENGTH),
conf.getStringValue(PARAM_PREFIX + "varbinary" + PARAM_LENGTH),
conf.getStringValue(PARAM_PREFIX + "longvarbinary" + PARAM_LENGTH),
conf.getInteger(PARAM_PREFIX + "time" + PARAM_PRECISION),
conf.getStringValue(PARAM_PREFIX + "bigint" + PARAM_DECIMALS),
conf.getStringValue(PARAM_PREFIX + "other" + PARAM_LENGTH),
conf.getStringValue(PARAM_PREFIX + "javaobject" + PARAM_LENGTH),
conf.getStringValue(PARAM_PREFIX + "blob" + PARAM_LENGTH),
conf.getStringValue(PARAM_PREFIX + "clob" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testSingleFieldForAll: " + e.getMessage());
}
}
/**
* Class with one single field only.
*/
public final void testSingleField() {
try {
loadData("single_field.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testSingleField: " + e.getMessage());
}
}
/**
* Use identity key generator which means to set auto increment on identity column.
*/
public final void testKeyGenIdentity() {
try {
loadData("key_gen_identity.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, 0, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
out = new ByteArrayOutputStream();
writer = new DDLWriter(out, conf);
_generator.generateKeyGenerator(writer);
writer.close();
ddl = out.toString();
b = _expected.match(_engine, 1, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testKeyGenIdentity: " + e.getMessage());
}
}
/**
* Use high-low key generator. No DDL will be created.
*/
public final void testKeyGenHighLow() {
try {
loadData("key_gen_high-low.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, 0, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
out = new ByteArrayOutputStream();
writer = new DDLWriter(out, conf);
_generator.generateKeyGenerator(writer);
writer.close();
ddl = out.toString();
b = _expected.match(_engine, 1, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testKeyGenHighLow: " + e.getMessage());
}
}
/**
* Use MAX key generator. No DDL will be created.
*/
public final void testKeyGenMax() {
try {
loadData("key_gen_max.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, 0, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
out = new ByteArrayOutputStream();
writer = new DDLWriter(out, conf);
_generator.generateKeyGenerator(writer);
writer.close();
ddl = out.toString();
b = _expected.match(_engine, 1, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testKeyGenMax: " + e.getMessage());
}
}
/**
* Use sequence key generator. Only some databases support to create sequence and/or
* trigger statement.
*/
public final void testKeyGenSequence() {
try {
loadData("key_gen_sequence.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, 0, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
out = new ByteArrayOutputStream();
writer = new DDLWriter(out, conf);
_generator.generateKeyGenerator(writer);
writer.close();
ddl = out.toString();
b = _expected.match(_engine, 1, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testKeyGenSequence: " + e.getMessage());
}
}
/**
* Use UUID key generator. No DDL will be created.
*/
public final void testKeyGenUUID() {
try {
loadData("key_gen_uuid.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, 0, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
out = new ByteArrayOutputStream();
writer = new DDLWriter(out, conf);
_generator.generateKeyGenerator(writer);
writer.close();
ddl = out.toString();
b = _expected.match(_engine, 1, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testKeyGenUUID: " + e.getMessage());
}
}
/**
* Mapping with one-one relationship.
*/
public final void testOneOneRelationship() {
try {
loadData("relationship_1_1.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, 0, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
out = new ByteArrayOutputStream();
writer = new DDLWriter(out, conf);
_generator.generateForeignKey(writer);
writer.close();
ddl = out.toString();
b = _expected.match(_engine, 1, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testOneOneRelationship: " + e.getMessage());
}
}
/**
* Mapping with one-many relationship.
*/
public final void testOneManyRelationship() {
try {
loadData("relationship_1_n.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, 0, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
out = new ByteArrayOutputStream();
writer = new DDLWriter(out, conf);
_generator.generateForeignKey(writer);
writer.close();
ddl = out.toString();
b = _expected.match(_engine, 1, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testOneManyRelationship: " + e.getMessage());
}
}
/**
* Mapping with many-many relationship.
*/
public final void testManyManyRelationship() {
try {
loadData("relationship_m_n.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, 0, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
out = new ByteArrayOutputStream();
writer = new DDLWriter(out, conf);
_generator.generateForeignKey(writer);
writer.close();
ddl = out.toString();
b = _expected.match(_engine, 1, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testManyManyRelationship: " + e.getMessage());
}
}
/**
* 2 levels ID's references in a mapping.
*/
public final void test2LevelsReference() {
try {
loadData("2levels_reference.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getStringValue(PARAM_PREFIX + "integer" + PARAM_PRECISION, ""),
conf.getStringValue(PARAM_PREFIX + "char" + PARAM_LENGTH, "") };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("test2LevelsReference: " + e.getMessage());
}
}
/**
* Ignore field without sql mapping.
*/
public final void testIgnoredField() {
try {
loadData("ignored_field.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testIgnoredField: " + e.getMessage());
}
}
/**
* Table without a field.
*/
public final void testNoField() {
try {
loadData("no_field.xml");
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, _generator.getConfiguration());
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, ddl);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testNoField: " + e.getMessage());
}
}
/**
* Overwrite identity definition on class with definition on field.
*/
public final void testOverwriteFieldId() {
try {
loadData("overwrite_field_id.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testOverwriteFieldId: " + e.getMessage());
}
}
/**
* Relationship with multpile key reference. Identity defined at class.
*/
public final void testManyKeysReference() {
try {
loadData("many_keys_reference.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testManyKeysReference: " + e.getMessage());
}
}
/**
* Relationship with multpile key reference. Identity defined at field.
*/
public final void testManyClassKeysReference() {
try {
loadData("many_class_keys_reference.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
Object[] params = new Object[] {
conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION),
conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) };
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, conf);
_generator.generateCreate(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, ddl, params);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testManyClassKeysReference: " + e.getMessage());
}
}
/**
* Create schema.
*/
public final void testCreateSchema() {
try {
loadData("create_schema.xml");
DDLGenConfiguration conf = _generator.getConfiguration();
conf.setProperty(DDLGenConfiguration.SCHEMA_NAME_KEY, "test");
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, _generator.getConfiguration());
_generator.getSchema().toCreateDDL(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, 0, ddl, new String[] {"test"});
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
conf.setProperty(DDLGenConfiguration.SCHEMA_NAME_KEY, "");
out = new ByteArrayOutputStream();
writer = new DDLWriter(out, _generator.getConfiguration());
_generator.getSchema().toCreateDDL(writer);
writer.close();
ddl = out.toString();
b = _expected.match(_engine, 1, ddl, new String[] {});
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testCreateSchema: " + e.getMessage());
}
}
/**
* Create index. There will be no DDL created at the moment.
*/
public final void testCreateIndex() {
try {
loadData("index_creation.xml");
ByteArrayOutputStream out = new ByteArrayOutputStream();
DDLWriter writer = new DDLWriter(out, _generator.getConfiguration());
_generator.generateIndex(writer);
writer.close();
String ddl = out.toString();
boolean b = _expected.match(_engine, ddl);
assertTrue("Generated DDL: " + ddl + "\n"
+ "Expected DDL: " + _expected.getLastMatchString(), b);
} catch (Exception e) {
fail("testCreateIndex: " + e.getMessage());
}
}
//--------------------------------------------------------------------------
}