You are viewing a plain text version of this content. The canonical link for it is here.
Posted to torque-dev@db.apache.org by mp...@apache.org on 2003/02/10 14:21:36 UTC
cvs commit: db-torque/src/generator/src/test/org/apache/torque/engine/database/model NameFactoryTest.java
mpoeschl 2003/02/10 05:21:36
Added: src/generator/src/test/org/apache/torque/engine/database
TestPackageHandling.java package-schema.xml
package2-schema.xml
src/generator/src/test/org/apache/torque/engine/database/model
NameFactoryTest.java
Removed: src/test/org/apache/torque/engine/database
TestPackageHandling.java package-schema.xml
package2-schema.xml
src/test/org/apache/torque/engine/database/model
NameFactoryTest.java
Log:
move model tests to generator
Revision Changes Path
1.1 db-torque/src/generator/src/test/org/apache/torque/engine/database/TestPackageHandling.java
Index: TestPackageHandling.java
===================================================================
package org.apache.torque.engine.database;
import junit.framework.*;
import org.apache.torque.engine.database.transform.*;
import org.apache.torque.engine.database.model.*;
public class TestPackageHandling extends TestCase
{
private XmlToAppData xmlToAppData = null;
private AppData appData = null;
public TestPackageHandling(String name)
{
super(name);
}
protected void setUp() throws Exception
{
super.setUp();
}
protected void tearDown() throws Exception
{
xmlToAppData = null;
super.tearDown();
}
/**
* test if the tables get the package name from the properties file
*/
public void testDefaultPackageName()
{
xmlToAppData = new XmlToAppData("mysql", "defaultpackage", null);
appData = xmlToAppData.parseFile(
"src/test/org/apache/torque/engine/database/package-schema.xml");
Database db = appData.getDatabase("packagedb");
assertEquals("defaultpackage", db.getPackage());
Table table = db.getTable("table_a");
assertEquals("defaultpackage", table.getPackage());
}
/**
* test if the tables get the package name from the database tag
*/
public void testDatabasePackageName()
{
xmlToAppData = new XmlToAppData("mysql", "defaultpackage", null);
appData = xmlToAppData.parseFile(
"src/test/org/apache/torque/engine/database/package2-schema.xml");
Database db = appData.getDatabase("packagedb2");
assertEquals("packagefromdb", db.getPackage());
Table table = db.getTable("table_a");
assertEquals("packagefromdb", table.getPackage());
}
}
1.1 db-torque/src/generator/src/test/org/apache/torque/engine/database/package-schema.xml
Index: package-schema.xml
===================================================================
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE database SYSTEM "http://jakarta.apache.org/turbine/dtd/database.dtd">
<database name="packagedb" defaultIdMethod="idbroker">
<table name="table_a">
<column name="table_a_id" required="true" primaryKey="true" type="INTEGER" />
<column name="col_a" type="CHAR" size="5" />
</table>
</database>
1.1 db-torque/src/generator/src/test/org/apache/torque/engine/database/package2-schema.xml
Index: package2-schema.xml
===================================================================
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE database SYSTEM "http://jakarta.apache.org/turbine/dtd/database.dtd">
<database name="packagedb2" defaultIdMethod="idbroker" package="packagefromdb">
<table name="table_a">
<column name="table_a_id" required="true" primaryKey="true" type="INTEGER" />
<column name="col_a" type="CHAR" size="5" />
</table>
</database>
1.1 db-torque/src/generator/src/test/org/apache/torque/engine/database/model/NameFactoryTest.java
Index: NameFactoryTest.java
===================================================================
package org.apache.torque.engine.database.model;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Turbine" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import junit.framework.TestCase;
/**
* <p>Unit tests for class <code>NameFactory</code> and known
* <code>NameGenerator</code> implementations.</p>
*
* <p>To add more tests, add entries to the <code>ALGORITHMS</code>,
* <code>INPUTS</code>, and <code>OUTPUTS</code> arrays, and code to
* the <code>makeInputs()</code> method.</p>
*
* <p>This test assumes that it's being run using the MySQL database
* adapter, <code>DBMM</code>. MySQL has a column length limit of 64
* characters.</p>
*
* @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
* @version $Id: NameFactoryTest.java,v 1.1 2003/02/10 13:21:36 mpoeschl Exp $
*/
public class NameFactoryTest extends TestCase
{
/** The database to mimic in generating the SQL. */
private static final String DATABASE_TYPE = "mysql";
/**
* The list of known name generation algorithms, specified as the
* fully qualified class names to <code>NameGenerator</code>
* implementations.
*/
private static final String[] ALGORITHMS =
{ NameFactory.CONSTRAINT_GENERATOR, NameFactory.JAVA_GENERATOR };
/**
* Two dimensional arrays of inputs for each algorithm.
*/
private static final Object[][][] INPUTS =
{ { { makeString(61), "I", new Integer(1)}, {
makeString(61), "I", new Integer(2)
}, {
makeString(65), "I", new Integer(3)
}, {
makeString(4), "FK", new Integer(1)
}, {
makeString(5), "FK", new Integer(2)
}
}, {
{
"MY_USER", NameGenerator.CONV_METHOD_UNDERSCORE }, {
"MY_USER", NameGenerator.CONV_METHOD_JAVANAME }, {
"MY_USER", NameGenerator.CONV_METHOD_NOCHANGE }
}
};
/**
* Given the known inputs, the expected name outputs.
*/
private static final String[][] OUTPUTS =
{
{
makeString(60) + "_I_1",
makeString(60) + "_I_2",
makeString(60) + "_I_3",
makeString(4) + "_FK_1",
makeString(5) + "_FK_2" },
{
"MyUser", "MYUSER", "MY_USER" }
};
/**
* Used as an input.
*/
private Database database;
/**
* Creates a new instance.
*
* @param name the name of the test to run
*/
public NameFactoryTest(String name)
{
super(name);
}
/**
* Creates a string of the specified length consisting entirely of
* the character <code>A</code>. Useful for simulating table
* names, etc.
*
* @param len the number of characters to include in the string
* @return a string of length <code>len</code> with every character an 'A'
*/
private static final String makeString(int len)
{
StringBuffer buf = new StringBuffer();
for (int i = 0; i < len; i++)
{
buf.append('A');
}
return buf.toString();
}
/** Sets up the Torque model. */
public void setUp()
{
AppData appData = new AppData(DATABASE_TYPE, "src/templates/sql/base/");
database = new Database();
database.setDatabaseType(DATABASE_TYPE);
appData.addDatabase(database);
}
/**
* @throws Exception on fail
*/
public void testNames() throws Exception
{
for (int algoIndex = 0; algoIndex < ALGORITHMS.length; algoIndex++)
{
String algo = ALGORITHMS[algoIndex];
Object[][] algoInputs = INPUTS[algoIndex];
for (int i = 0; i < algoInputs.length; i++)
{
List inputs = makeInputs(algo, algoInputs[i]);
String generated = NameFactory.generateName(algo, inputs);
String expected = OUTPUTS[algoIndex][i];
assertEquals(
"Algorithm " + algo + " failed to generate an unique name",
generated,
expected);
}
}
}
/**
* Creates the list of arguments to pass to the specified type of
* <code>NameGenerator</code> implementation.
*
* @param algo The class name of the <code>NameGenerator</code> to
* create an argument list for.
* @param inputs The (possibly partial) list inputs from which to
* generate the final list.
* @return the list of arguments to pass to the <code>NameGenerator</code>
*/
private final List makeInputs(String algo, Object[] inputs)
{
List list = null;
if (NameFactory.CONSTRAINT_GENERATOR.equals(algo))
{
list = new ArrayList(inputs.length + 1);
list.add(0, database);
list.addAll(Arrays.asList(inputs));
}
else if (NameFactory.JAVA_GENERATOR.equals(algo))
{
list = Arrays.asList(inputs);
}
return list;
}
}