db-ddlutils-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From to...@apache.org
Subject svn commit: r357846 - in /db/ddlutils/trunk/src/test/org/apache/ddlutils/io: RoundtripTestBase.java TestRoundtripDerby.java
Date Mon, 19 Dec 2005 23:57:45 GMT
Author: tomdz
Date: Mon Dec 19 15:57:41 2005
New Revision: 357846

URL: http://svn.apache.org/viewcvs?rev=357846&view=rev
Log:
Implemented first roundtrip tests against Derby

Added:
    db/ddlutils/trunk/src/test/org/apache/ddlutils/io/RoundtripTestBase.java
    db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestRoundtripDerby.java

Added: db/ddlutils/trunk/src/test/org/apache/ddlutils/io/RoundtripTestBase.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/test/org/apache/ddlutils/io/RoundtripTestBase.java?rev=357846&view=auto
==============================================================================
--- db/ddlutils/trunk/src/test/org/apache/ddlutils/io/RoundtripTestBase.java (added)
+++ db/ddlutils/trunk/src/test/org/apache/ddlutils/io/RoundtripTestBase.java Mon Dec 19 15:57:41
2005
@@ -0,0 +1,147 @@
+package org.apache.ddlutils.io;
+
+/*
+ * Copyright 1999-2005 The Apache Software Foundation.
+ * 
+ * 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.
+ */
+
+import java.util.List;
+
+import org.apache.commons.beanutils.DynaBean;
+import org.apache.ddlutils.TestDatabaseWriterBase;
+import org.apache.ddlutils.model.IndexColumn;
+import org.apache.ddlutils.model.Table;
+import org.apache.ddlutils.model.UniqueIndex;
+
+/**
+ * Base class for database roundtrip (creation & reconstruction from the database).
+ * 
+ * @author Thomas Dudziak
+ * @version $Revision: 289996 $
+ */
+public abstract class RoundtripTestBase extends TestDatabaseWriterBase
+{
+    /** Test model with a simple BIT column. */
+    protected static final String TEST_BIT_MODEL = 
+        "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+        "<database name='roundtriptest'>\n"+
+        "  <table name='ROUNDTRIP'>\n"+
+        "    <column name='PK' type='INTEGER' primaryKey='true' required='true'/>\n"+
+        "    <column name='VALUE' type='BIT'/>\n"+
+        "  </table>\n"+
+        "</database>";
+    /** Test model with a BIT column with a default value. */
+    protected static final String TEST_BIT_MODEL_WITH_DEFAULT = 
+        "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+        "<database name='roundtriptest'>\n"+
+        "  <table name='ROUNDTRIP'>\n"+
+        "    <column name='PK' type='INTEGER' primaryKey='true' required='true'/>\n"+
+        "    <column name='VALUE' type='BIT' default='FALSE'/>\n"+
+        "  </table>\n"+
+        "</database>";
+    /** Test model with a simple BOOLEAN column. */
+    protected static final String TEST_BOOLEAN_MODEL = 
+        "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+        "<database name='roundtriptest'>\n"+
+        "  <table name='ROUNDTRIP'>\n"+
+        "    <column name='PK' type='INTEGER' primaryKey='true' required='true'/>\n"+
+        "    <column name='VALUE' type='BOOLEAN'/>\n"+
+        "  </table>\n"+
+        "</database>";
+
+    /**
+     * Inserts a row into the designated table.
+     * 
+     * @param tableName    The name of the table (case insensitive)
+     * @param columnValues The values for the columns in order of definition
+     */
+    protected void insertRow(String tableName, Object[] columnValues)
+    {
+        Table    table = getModel().findTable(tableName);
+        DynaBean bean  = getModel().createDynaBeanFor(table);
+
+        for (int idx = 0; (idx < table.getColumnCount()) && (idx < columnValues.length);
idx++)
+        {
+            bean.set(table.getColumn(idx).getName(), columnValues[idx]);
+        }
+        getPlatform().insert(getModel(), bean);
+    }
+
+    /**
+     * Retrieves all rows from the given table.
+     * 
+     * @param tableName The table
+     * @return The rows
+     */
+    protected List getRows(String tableName)
+    {
+        Table table = getModel().findTable(tableName);
+
+        return getPlatform().fetch(getModel(),
+                                   "SELECT * FROM " + tableName,
+                                   new Table[] { table });
+    }
+
+    /**
+     * Adds unique indices for the pks to the model (for comparison).
+     */
+    protected void addPrimaryKeyUniqueIndicesToModel()
+    {
+        for (int tableIdx = 0; tableIdx < getModel().getTableCount(); tableIdx++)
+        {
+            Table       table = getModel().getTable(tableIdx);
+            UniqueIndex index = new UniqueIndex();
+    
+            for (int pkIdx = 0; pkIdx < table.getPrimaryKeyColumns().length; pkIdx++)
+            {
+                index.addColumn(new IndexColumn(table.getPrimaryKeyColumns()[pkIdx].getName()));
+            }
+            table.addIndex(index);
+        }
+    }
+    
+    /**
+     * Compares the attribute value of the given bean to the expected object.
+     * 
+     * @param expected The expected object
+     * @param bean     The bean
+     * @param attrName The attribute name
+     */
+    protected void assertEquals(Object expected, Object bean, String attrName)
+    {
+        DynaBean dynaBean = (DynaBean)bean;
+
+        assertEquals(expected,
+                     dynaBean.get(attrName));
+    }
+
+    // boolean/bit columns
+    // boolean with default value
+    // simple bit
+    // bit with default value
+    
+    // numerical columns
+    // numeric/decimal incl. precision/scale
+    // char/varchar columns incl. different sizes
+    // time columns
+    // binary/varbinary & java_object etc. columns
+    // blob/clob columns
+
+    // auto-increment
+    // default values
+    // null/not null
+    // pk (incl. pk with auto-increment)
+    // index/unique (incl. for pks)
+    // fks (incl. multiple columns, circular references)
+}

Added: db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestRoundtripDerby.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestRoundtripDerby.java?rev=357846&view=auto
==============================================================================
--- db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestRoundtripDerby.java (added)
+++ db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestRoundtripDerby.java Mon Dec 19 15:57:41
2005
@@ -0,0 +1,95 @@
+package org.apache.ddlutils.io;
+
+import java.util.List;
+
+import org.apache.ddlutils.model.Database;
+
+/**
+ * Performs the roundtrip test against a derby database.
+ */
+public class TestRoundtripDerby extends RoundtripTestBase
+{
+    /**
+     * Tests a simple BIT column.
+     */
+    public void testBit()
+    {
+        createDatabase(TEST_BIT_MODEL);
+        insertRow("ROUNDTRIP", new Object[] { new Integer(1), Boolean.TRUE });
+        insertRow("ROUNDTRIP", new Object[] { new Integer(2), Boolean.FALSE });
+
+        List beans = getRows("ROUNDTRIP");
+
+        assertEquals(Boolean.TRUE,  beans.get(0), "VALUE");
+        assertEquals(Boolean.FALSE, beans.get(1), "VALUE");
+
+        Database db = getPlatform().readModelFromDatabase();
+
+        db.setName("roundtriptest");
+
+        // Derby does not have a boolean type, so it gets mapped to SMALLINT
+        // we therefore adjust the original model according to our expectations
+        getModel().getTable(0).getColumn(1).setType("SMALLINT");
+
+        // Also we get a unique index for the PK
+        addPrimaryKeyUniqueIndicesToModel();
+        
+        assertEquals(getModel(), db);
+    }
+
+    /**
+     * Tests a BIT column with a default value.
+     */
+    public void testBitWithDefault()
+    {
+        createDatabase(TEST_BIT_MODEL_WITH_DEFAULT);
+        insertRow("ROUNDTRIP", new Object[] { new Integer(1) });
+        insertRow("ROUNDTRIP", new Object[] { new Integer(2), Boolean.TRUE });
+
+        List beans = getRows("ROUNDTRIP");
+
+        assertEquals(Boolean.FALSE, beans.get(0), "VALUE");
+        assertEquals(Boolean.TRUE,  beans.get(1), "VALUE");
+
+        Database db = getPlatform().readModelFromDatabase();
+
+        db.setName("roundtriptest");
+
+        // Derby does not have a boolean type, so it gets mapped to SMALLINT
+        // we therefore adjust the original model according to our expectations
+        getModel().getTable(0).getColumn(1).setType("SMALLINT");
+
+        // Also we get a unique index for the PK
+        addPrimaryKeyUniqueIndicesToModel();
+        
+        assertEquals(getModel(), db);
+    }
+
+    /**
+     * Tests a simple BOOLEAN column.
+     */
+    public void testBoolean()
+    {
+        createDatabase(TEST_BOOLEAN_MODEL);
+        insertRow("ROUNDTRIP", new Object[] { new Integer(1), Boolean.FALSE });
+        insertRow("ROUNDTRIP", new Object[] { new Integer(2), Boolean.TRUE });
+
+        List beans = getRows("ROUNDTRIP");
+
+        assertEquals(Boolean.FALSE, beans.get(0), "VALUE");
+        assertEquals(Boolean.TRUE,  beans.get(1), "VALUE");
+
+        Database db = getPlatform().readModelFromDatabase();
+
+        db.setName("roundtriptest");
+
+        // Derby does not have a boolean type, so it gets mapped to SMALLINT
+        // we therefore adjust the original model according to our expectations
+        getModel().getTable(0).getColumn(1).setType("SMALLINT");
+
+        // Also we get a unique index for the PK
+        addPrimaryKeyUniqueIndicesToModel();
+        
+        assertEquals(getModel(), db);
+    }
+}



Mime
View raw message