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

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to