Add test cases for nested record, collection with a record
diff --git a/java/src/org/eclipse/persistence/tools/oracleddl/test/ddlparser/PackageDDLTestSuite.java b/java/src/org/eclipse/persistence/tools/oracleddl/test/ddlparser/PackageDDLTestSuite.java
index 1d5812d..dedb57b 100644
--- a/java/src/org/eclipse/persistence/tools/oracleddl/test/ddlparser/PackageDDLTestSuite.java
+++ b/java/src/org/eclipse/persistence/tools/oracleddl/test/ddlparser/PackageDDLTestSuite.java
@@ -73,6 +73,14 @@
         assertNull("empty package should have no types", packageType.getTypes());
     }
 
+    /*
+    TYPE EREC IS RECORD(
+        FLAG    PLS_INTEGER,
+        EMPNO   NUMERIC,
+        ENAME   VARCHAR2,
+        JOB     VARCHAR2)
+      );
+    */
     static final String SIMPLE_PACKAGE = "SIMPLE_PACKAGE";
     static final String SIMPLE_TYPE = "EREC";
     static final String FIELD1_NAME = "FLAG";
@@ -89,7 +97,7 @@
                 "\n" + FIELD1_NAME + " " + FIELD1_TYPE + "," +
                 "\n" + FIELD2_NAME + " " + FIELD2_TYPE + "," +
                 "\n" + FIELD3_NAME + " " + FIELD3_TYPE + "," +
-                "\n" + FIELD4_NAME + " " + FIELD4_TYPE + 
+                "\n" + FIELD4_NAME + " " + FIELD4_TYPE +
             "\n);" +
         "\nEND " + SIMPLE_PACKAGE + ";";
     @Test
@@ -156,15 +164,15 @@
                 "\n" + NT1_FIELD3_NAME + " " + NT1_FIELD_TYPE + "," +
                 "\n" + NT1_FIELD4_NAME + " " + NT1_FIELD_TYPE + "," +
                 "\n" + NT1_FIELD5_NAME + " " + NT1_FIELD_TYPE + "," +
-                "\n" + NT1_FIELD6_NAME + " " + NT1_FIELD_TYPE + 
+                "\n" + NT1_FIELD6_NAME + " " + NT1_FIELD_TYPE +
             "\n);" +
             "\nTYPE " + NTYPE2 + " IS RECORD (" +
                 "\n" + NT2_FIELD1_NAME + " " + NT2_FIELD_TYPE + "," +
-                "\n" + NT2_FIELD2_NAME + " " + NT2_FIELD_TYPE + 
+                "\n" + NT2_FIELD2_NAME + " " + NT2_FIELD_TYPE +
             "\n);" +
         "\nEND " + NPACKAGE + ";";
     @Test
-    public void testNPackage() {
+    public void testPackageWithNestedRecords() {
         parser.ReInit(new StringReader(CREATE_NPACKAGE));
         boolean worked = true;
         @SuppressWarnings("unused") PLSQLPackageType packageType = null;
@@ -198,4 +206,86 @@
         assertEquals("ntype2 field2 has wrong name", NT2_FIELD2_NAME, fields.get(1).getFieldName());
         assertEquals("ntype2 field1 has wrong type", NT2_FIELD_TYPE, fields.get(1).getTypeName());
     }
+
+    //TYPE VCHAR_ARRAY IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;
+    static final String PACKAGE_WCOLLECTION = "PACKAGE_WCOLLECTION";
+    static final String PACKAGE_WCOLLECTION_NAME = "VCHAR_ARRAY";
+    static final String PACKAGE_WCOLLECTION_TYPE = "VARCHAR2(20)";
+    static final String PACKAGE_WCOLLECTION_INDEXBY = "BINARY_INTEGER";
+    static final String CREATE_PACKAGE_WCOLLECTION =
+        CREATE_PACKAGE_PREFIX + PACKAGE_WCOLLECTION + " AS " +
+            "\nTYPE " + PACKAGE_WCOLLECTION_NAME + " IS TABLE OF " +
+                PACKAGE_WCOLLECTION_TYPE + " INDEX BY " + PACKAGE_WCOLLECTION_INDEXBY + ";" +
+        "\nEND " + PACKAGE_WCOLLECTION + ";";
+    @Test
+    public void testPackageWithCollection() {
+        parser.ReInit(new StringReader(CREATE_PACKAGE_WCOLLECTION));
+        boolean worked = true;
+        @SuppressWarnings("unused") PLSQLPackageType packageType = null;
+        try {
+            packageType = parser.parsePLSQLPackage();
+        }
+        catch (ParseException pe) {
+            worked = false;
+        }
+        assertTrue("package with collection should parse", worked);
+        assertEquals("package with collection has wrong name", packageType.getPackageName(),
+            PACKAGE_WCOLLECTION);
+        assertNull("package with collection should have no procedures", packageType.getProcedures());
+        assertNotNull("package with collection should have types", packageType.getTypes());
+        assertEquals("package with collection should have exactly 1 type", 1,
+            packageType.getTypes().size());
+        PLSQLType t1 = packageType.getTypes().get(0);
+        assertEquals("collection type1 has wrong name", PACKAGE_WCOLLECTION_NAME, t1.getTypeName());
+    }
+
+    /*
+    TYPE BOOK_TYPE IS RECORD (
+        ISBN          VARCHAR2(20)
+        ,TITLE        VARCHAR2(2000)
+        ,AUTHOR       VARCHAR2(2000)
+        ,PUBLISHER    VARCHAR2(120)
+        ,PUBLISHED_ON DATE
+    );
+    TYPE BOOKS_TAB IS TABLE OF BOOK_TYPE;
+     */
+    static final String PACKAGE_WCOLLECTION_WRECORD = "PACKAGE_WCOLLECTION_WRECORD";
+    static final String PACKAGE_WCOLLECTION_WRECORD_TYPE1 = "BOOK_TYPE";
+    static final String PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD1_NAME = "ISBN";
+    static final String PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD1_TYPE = "VARCHAR2(20)";
+    static final String PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD2_NAME = "TITLE";
+    static final String PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD2_TYPE = "VARCHAR2(2000)";
+    static final String PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD3_NAME = "AUTHOR";
+    static final String PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD3_TYPE = "VARCHAR2(2000)";
+    static final String PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD4_NAME = "PUBLISHER";
+    static final String PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD4_TYPE = "VARCHAR2";
+    static final String PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD5_NAME = "PUBLISHED_ON";
+    static final String PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD5_TYPE = "DATE";
+    static final String PACKAGE_WCOLLECTION_WRECORD_NAME = "BOOKS_TAB";
+    static final String CREATE_PACKAGE_WCOLLECTION_WRECORD =
+        CREATE_PACKAGE_PREFIX + PACKAGE_WCOLLECTION_WRECORD + " AS " +
+            "\nTYPE " + PACKAGE_WCOLLECTION_WRECORD_TYPE1 + " IS RECORD (" +
+                "\n" + PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD1_NAME + " " + PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD1_TYPE + "," +
+                "\n" + PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD2_NAME + " " + PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD2_TYPE + "," +
+                "\n" + PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD3_NAME + " " + PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD3_TYPE + "," +
+                "\n" + PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD4_NAME + " " + PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD4_TYPE + "," +
+                "\n" + PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD5_NAME + " " + PACKAGE_WCOLLECTION_WRECORD_TYPE1_FIELD5_TYPE +
+            "\n);" +
+            "\nTYPE " + PACKAGE_WCOLLECTION_WRECORD_NAME + " IS TABLE OF " +
+                PACKAGE_WCOLLECTION_WRECORD_TYPE1 + ";" +
+        "\nEND " + PACKAGE_WCOLLECTION_WRECORD + ";";
+    @Test
+    public void testPackageWithCollectionWithNestedRecord() {
+        parser.ReInit(new StringReader(CREATE_PACKAGE_WCOLLECTION_WRECORD));
+        boolean worked = true;
+        @SuppressWarnings("unused") PLSQLPackageType packageType = null;
+        try {
+            packageType = parser.parsePLSQLPackage();
+        }
+        catch (ParseException pe) {
+            worked = false;
+        }
+        assertTrue("package with collection with record should parse", worked);
+
+    }
 }
\ No newline at end of file