See this simply patch and what's going on with your unit-test. I think it should be ensured that the result is the same no matter if you are loading a database-definition file with/without a DTD.
If you agree with me there's no need any more for the test testColumnWithoutName() because it defaults to the DTD-Default VARCHAR Tom Tom Schindl wrote: > Thomas Dudziak wrote: > >>On 4/21/06, Tom Schindl <[EMAIL PROTECTED]> wrote: >> >> >> >>>Well that's really interesting if you don't have a <!DOCTYPE> >>>declaration in the source document but set the validation to true the >>>entity resolver doesn't get called and you'll get a parsing exception. >>>All test cases I've looked at don't have a <!DOCTYPE> in them and so the >>>test are failing. >>> >>>I've now checked: >>>java-1.4.2_04 >>>java-1.5.2_02 >>>java-1.5.2_06 >> >> >>Sure, because how would the XML parser know against which DTD to >>resolve without the DOCTYPE declaration ? >>For the test cases we did not put in the DTD because that would only >>make them slower. For me they are not failing however in Eclipse (not >>even spitting out errors). >> > > > Although that's reasonable there's a difference when you are loading a > DTD or not because there are default-values provided by the DTD who are > merged in automatically by the XML-Parser. Another problem is that even > your testcases don't follow your own DTD e.g. TestDataReader.java > defines an attribute defaultValue. > > >>Tom >> >> > >
Index: E:/eclipse-workspaces/beso-oo/commons-sql/src/java/org/apache/ddlutils/io/LocalEntityResolver.java =================================================================== --- E:/eclipse-workspaces/beso-oo/commons-sql/src/java/org/apache/ddlutils/io/LocalEntityResolver.java (revision 395713) +++ E:/eclipse-workspaces/beso-oo/commons-sql/src/java/org/apache/ddlutils/io/LocalEntityResolver.java (working copy) @@ -34,7 +34,7 @@ public class LocalEntityResolver implements EntityResolver { /** The default DTD. */ - private static final String DTD_PREFIX = "http://db.apache.org/torque/dtd/database"; + public static final String DTD_PREFIX = "http://db.apache.org/torque/dtd/database"; /** * [EMAIL PROTECTED]
Index: E:/eclipse-workspaces/beso-oo/commons-sql/src/java/org/apache/ddlutils/model/Database.java =================================================================== --- E:/eclipse-workspaces/beso-oo/commons-sql/src/java/org/apache/ddlutils/model/Database.java (revision 395713) +++ E:/eclipse-workspaces/beso-oo/commons-sql/src/java/org/apache/ddlutils/model/Database.java (working copy) @@ -48,7 +48,7 @@ /** The name of the database model. */ private String _name; /** The method for generating primary keys (currently ignored). */ - private String _idMethod; + private String _idMethod = "none"; /** The version of the model. */ private String _version; /** The tables. */
Index: E:/eclipse-workspaces/beso-oo/commons-sql/src/test/org/apache/ddlutils/io/TestDatabaseIO.java =================================================================== --- E:/eclipse-workspaces/beso-oo/commons-sql/src/test/org/apache/ddlutils/io/TestDatabaseIO.java (revision 395713) +++ E:/eclipse-workspaces/beso-oo/commons-sql/src/test/org/apache/ddlutils/io/TestDatabaseIO.java (working copy) @@ -50,13 +50,32 @@ * Reads the database model from the given string. * * @param modelAsXml The database model XML + * @param validateXml turn on validation * @return The database model */ + private Database readModel(String modelAsXml, boolean validateXml) + { + DatabaseIO reader = new DatabaseIO(); + reader.setValidateXml(validateXml); + + if( validateXml ) { + modelAsXml = "<!DOCTYPE database SYSTEM \""+LocalEntityResolver.DTD_PREFIX+"\">\n" + modelAsXml; + } + + return reader.read(new StringReader(modelAsXml)); + } + + /** + * Reads the database model from the given string. + * + * @param modelAsXml The database model XML + * @return The database model + */ private Database readModel(String modelAsXml) { - return new DatabaseIO().read(new StringReader(modelAsXml)); + return readModel(modelAsXml,true); } - + /** * Writes the given database model to a string. * @@ -124,7 +143,7 @@ column.getDescription()); assertEquals("javaId", column.getJavaName()); assertEquals( - " <database name=\"test\">\n" + + " <database name=\"test\" defaultIdMethod=\"none\">\n" + " <table name=\"SomeTable\" description=\"Some table\">\n" + " <column name=\"ID\" primaryKey=\"true\" required=\"true\" type=\"INTEGER\" autoIncrement=\"false\" description=\"The primary key\" javaName=\"javaId\"/>\n" + " </table>\n" + @@ -248,7 +267,7 @@ ref.getForeignColumnName()); assertEquals( - " <database name=\"test\">\n" + + " <database name=\"test\" defaultIdMethod=\"none\">\n" + " <table name=\"SomeTable\" description=\"Some table\">\n" + " <column name=\"ID\" primaryKey=\"true\" required=\"true\" type=\"VARCHAR\" size=\"16\" autoIncrement=\"false\" description=\"The primary key\"/>\n" + " </table>\n" + @@ -386,7 +405,7 @@ assertNull(indexColumn.getSize()); assertEquals( - " <database name=\"test\">\n" + + " <database name=\"test\" defaultIdMethod=\"none\">\n" + " <table name=\"TableWidthIndex\">\n" + " <column name=\"id\" primaryKey=\"true\" required=\"true\" type=\"DOUBLE\" autoIncrement=\"false\"/>\n" + " <column name=\"when\" primaryKey=\"false\" required=\"true\" type=\"TIMESTAMP\" autoIncrement=\"false\"/>\n" + @@ -504,7 +523,7 @@ assertNull(indexColumn.getSize()); assertEquals( - " <database name=\"test\">\n" + + " <database name=\"test\" defaultIdMethod=\"none\">\n" + " <table name=\"TableWidthIndices\">\n" + " <column name=\"id\" primaryKey=\"false\" required=\"true\" type=\"SMALLINT\" autoIncrement=\"true\"/>\n" + " <column name=\"when\" primaryKey=\"false\" required=\"false\" type=\"DATE\" autoIncrement=\"false\"/>\n" + @@ -908,7 +927,7 @@ assertNull(indexColumn.getSize()); assertEquals( - " <database name=\"test\">\n" + + " <database name=\"test\" defaultIdMethod=\"none\">\n" + " <table name=\"A\" description=\"Table A\">\n" + " <column name=\"id\" primaryKey=\"true\" required=\"true\" type=\"INTEGER\" autoIncrement=\"true\" description=\"The primary key of table A\"/>\n" + " <column name=\"parentId\" primaryKey=\"false\" required=\"false\" type=\"INTEGER\" autoIncrement=\"false\" description=\"The field for the foreign key parent\"/>\n" + @@ -1011,7 +1030,7 @@ " primaryKey='true'\n" + " required='true'/>\n" + " </table>\n" + - "</database>"); + "</database>",false); fail(); } @@ -1062,7 +1081,7 @@ " primaryKey='true'\n" + " required='true'/>\n" + " </table>\n" + - "</database>"); + "</database>",false); fail(); } @@ -1110,7 +1129,7 @@ " primaryKey='true'\n" + " required='true'/>\n" + " </table>\n" + - "</database>"); + "</database>",false); fail(); } @@ -1259,7 +1278,7 @@ Database database = readModel( "<database name='db' >\n" + " <index name='NotATable'/>\n" + - "</database>"); + "</database>",false); _log.debug("Table : " + Arrays.asList(database.getTables())); assertEquals(0, database.getTableCount()); @@ -1327,7 +1346,7 @@ assertNull(column.getDescription()); assertEquals( - " <database name=\"test\">\n" + + " <database name=\"test\" defaultIdMethod=\"none\">\n" + " <table name=\"SomeTable\">\n" + " <column name=\"intField\" primaryKey=\"false\" required=\"false\" type=\"TINYINT\" autoIncrement=\"false\"/>\n" + " <column name=\"charField\" primaryKey=\"false\" required=\"false\" type=\"CHAR\" autoIncrement=\"false\"/>\n" + @@ -1336,6 +1355,36 @@ writeModel(model)); } + public void testDTDDefaultValueSubstitution() { + Database dtdModel = readModel( + "<database name='test'>\n" + + " <table name='SomeTable'\n" + + " description='Some table'>\n" + + " <column name='ID'\n" + + " type='INTEGER'\n" + + " primaryKey='true'\n" + + " required='true'\n" + + " description='The primary key'\n" + + " javaName='javaId'/>\n" + + " </table>\n" + + "</database>",true); + + Database noDtdModel = readModel( + "<database name='test'>\n" + + " <table name='SomeTable'\n" + + " description='Some table'>\n" + + " <column name='ID'\n" + + " type='INTEGER'\n" + + " primaryKey='true'\n" + + " required='true'\n" + + " description='The primary key'\n" + + " javaName='javaId'/>\n" + + " </table>\n" + + "</database>",false); + + assertEquals( writeModel(dtdModel), writeModel(noDtdModel) ); + } + // TODO: Tests that include: // * foreign key references undefined table // * foreign key references undefined local column
signature.asc
Description: OpenPGP digital signature