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
