Fix for Bug 123. 64/2164/1
authorMartin Vitez <mvitez@cisco.com>
Fri, 25 Oct 2013 13:28:54 +0000 (15:28 +0200)
committerMartin Vitez <mvitez@cisco.com>
Fri, 25 Oct 2013 13:28:54 +0000 (15:28 +0200)
Added more tests.

Signed-off-by: Martin Vitez <mvitez@cisco.com>
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BaseTemplate.xtend
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/InterfaceTemplate.xtend
code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/AugmentToUsesInAugmentCompilationTest.java
code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/BaseCompilationTest.java
code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/CascadeUsesCompilationTest.java
code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/CompilationTest.java
code-generator/binding-java-api-generator/src/test/resources/compilation/augment-uses-to-augment/bar.yang

index 4d28de3b1a49ada2140783a93133b18751797fce..4056c6f2f7f778c00b3fda5fce7d0dafa8c0dee2 100644 (file)
@@ -108,7 +108,7 @@ abstract class BaseTemplate {
         GeneratorUtil.getExplicitType(type, intype, importMap)
     }
     
-    final protected def importedName(Class cls) {
+    final protected def importedName(Class<?> cls) {
         importedName(Types.typeForClass(cls))
     }
     
index 94aa9788320dc8711e8e48111f0484b038bc70db..484cc7ee59e7e8ffc3e05671d45c713356967af2 100644 (file)
@@ -1,5 +1,6 @@
 package org.opendaylight.yangtools.sal.java.api.generator\r
 \r
+import java.util.Arrays;\r
 import java.util.LinkedHashSet\r
 import java.util.List\r
 import java.util.Map\r
@@ -355,7 +356,7 @@ class BuilderTemplate extends BaseTemplate {
                 int result = 1;\r
                 «FOR property : properties»\r
                     «IF property.returnType.name.contains("[")»\r
-                    result = prime * result + ((«property.fieldName» == null) ? 0 : java.util.Arrays.hashCode(«property.fieldName»));\r
+                    result = prime * result + ((«property.fieldName» == null) ? 0 : «Arrays.importedName».hashCode(«property.fieldName»));\r
                     «ELSE»\r
                     result = prime * result + ((«property.fieldName» == null) ? 0 : «property.fieldName».hashCode());\r
                     «ENDIF»\r
@@ -394,7 +395,7 @@ class BuilderTemplate extends BaseTemplate {
                             return false;\r
                         }\r
                     «IF property.returnType.name.contains("[")»\r
-                    } else if(!java.util.Arrays.equals(«fieldName», other.«fieldName»)) {\r
+                    } else if(!«Arrays.importedName».equals(«fieldName», other.«fieldName»)) {\r
                     «ELSE»\r
                     } else if(!«fieldName».equals(other.«fieldName»)) {\r
                     «ENDIF»\r
index 56bb2b3163bf2cfdd6a6406697e9745006d52cd2..102c7c62b82a18e79bee3f7d9a1b8766800c2122 100644 (file)
@@ -8,8 +8,8 @@ import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject\r
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType\r
 import java.util.ArrayList\r
-import java.util.Collections\r
-\r
+import java.util.Collections\rimport java.util.Arrays
+
 /**\r
  * Template for generating JAVA class. \r
  */\r
@@ -230,7 +230,7 @@ class ClassTemplate extends BaseTemplate {
                     «IF cValue instanceof List<?>»\r
                         «val cValues = cValue as List<?>»\r
                         private static final List<Pattern> «Constants.MEMBER_PATTERN_LIST» = new ArrayList<Pattern>();\r
-                        public static final List<String> «TypeConstants.PATTERN_CONSTANT_NAME» = java.util.Arrays.asList(«\r
+                        public static final List<String> «TypeConstants.PATTERN_CONSTANT_NAME» = «Arrays.importedName».asList(«\r
                         FOR v : cValues SEPARATOR ", "»«\r
                             IF v instanceof String»"«\r
                                 v as String»"«\r
@@ -286,7 +286,7 @@ class ClassTemplate extends BaseTemplate {
                 int result = 1;\r
                 «FOR property : genTO.hashCodeIdentifiers»\r
                     «IF property.returnType.name.contains("[")»\r
-                    result = prime * result + ((«property.fieldName» == null) ? 0 : java.util.Arrays.hashCode(«property.fieldName»));\r
+                    result = prime * result + ((«property.fieldName» == null) ? 0 : «Arrays.importedName».hashCode(«property.fieldName»));\r
                     «ELSE»\r
                     result = prime * result + ((«property.fieldName» == null) ? 0 : «property.fieldName».hashCode());\r
                     «ENDIF»\r
@@ -322,7 +322,7 @@ class ClassTemplate extends BaseTemplate {
                             return false;\r
                         }\r
                     «IF property.returnType.name.contains("[")»\r
-                    } else if(!java.util.Arrays.equals(«fieldName», other.«fieldName»)) {\r
+                    } else if(!«Arrays.importedName».equals(«fieldName», other.«fieldName»)) {\r
                     «ELSE»\r
                     } else if(!«fieldName».equals(other.«fieldName»)) {\r
                     «ENDIF»\r
@@ -347,14 +347,14 @@ class ClassTemplate extends BaseTemplate {
                 «val properties = genTO.toStringIdentifiers»\r
                 builder.append("«type.name» [«properties.get(0).fieldName»=");\r
                 «IF properties.get(0).returnType.name.contains("[")»\r
-                    builder.append(java.util.Arrays.toString(«properties.get(0).fieldName»));\r
+                    builder.append(«Arrays.importedName».toString(«properties.get(0).fieldName»));\r
                 «ELSE»\r
                     builder.append(«properties.get(0).fieldName»);\r
                 «ENDIF»\r
                 «FOR i : 1..<genTO.toStringIdentifiers.size»\r
                     builder.append(", «properties.get(i).fieldName»=");\r
                     «IF properties.get(i).returnType.name.contains("[")»\r
-                        builder.append(java.util.Arrays.toString(«properties.get(i).fieldName»));\r
+                        builder.append(«Arrays.importedName».toString(«properties.get(i).fieldName»));\r
                     «ELSE»\r
                         builder.append(«properties.get(i).fieldName»);\r
                     «ENDIF»\r
index d1352f8e57b509e8f26ef193f8b401cbb09aba2d..ad6456fa20cbc8b4ff36ddb1f9020222596cbd4e 100644 (file)
@@ -131,6 +131,7 @@ class InterfaceTemplate extends BaseTemplate {
                 «IF (innerClass instanceof GeneratedTransferObject)»\r
                     «val classTemplate = new ClassTemplate(innerClass as GeneratedTransferObject)»\r
                     «classTemplate.generateAsInnerClass»\r
+                    «this.importMap.putAll(classTemplate.importMap)»\r
                     \r
                 «ENDIF»\r
             «ENDFOR»\r
index 8ae4e31da70965c4ee9a1f3615c7af787c5475da..8c1bbbf707598d1e052182dbcba5dd97f4a0ff79 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.yangtools.sal.java.api.generator.test;
 
-import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
@@ -39,15 +38,39 @@ public class AugmentToUsesInAugmentCompilationTest extends BaseCompilationTest {
         final GeneratorJavaFile generator = new GeneratorJavaFile(new HashSet<>(types));
         generator.generateToFile(sourcesOutputDir);
 
-        // Test if all sources are generated
+        // Test if all sources are generated from 'module foo'
         File fooParent = new File(sourcesOutputDir, NS_FOO);
-        assertEquals(4, fooParent.listFiles().length);
+        testFilesCount(fooParent, 4);
         assertTrue(new File(fooParent, "IgpLinkAttributes.java").exists());
         assertTrue(new File(fooParent, "Link1.java").exists());
         assertTrue(new File(fooParent, "Link1Builder.java").exists());
 
+        // Test if all sources are generated from 'module bar'
+        File barParent = new File(sourcesOutputDir, NS_BAR);
+        testFilesCount(barParent, 7);
+        assertTrue(new File(barParent, "BarData.java").exists());
+        assertTrue(new File(barParent, "NetworkTopology.java").exists());
+        assertTrue(new File(barParent, "NetworkTopologyBuilder.java").exists());
+        assertTrue(new File(barParent, "Link.java").exists());
+        assertTrue(new File(barParent, "LinkAttributes.java").exists());
+
+        File networkParent = new File(barParent, "network");
+        testFilesCount(networkParent, 1);
+        File topologyParent = new File(networkParent, "topology");
+        testFilesCount(topologyParent, 3);
+        assertTrue(new File(topologyParent, "Topology.java").exists());
+        assertTrue(new File(topologyParent, "TopologyBuilder.java").exists());
+        assertTrue(new File(topologyParent, "TopologyKey.java").exists());
+
+        File linkParent = new File(barParent, "link");
+        testFilesCount(linkParent, 3);
+        assertTrue(new File(linkParent, "Link.java").exists());
+        assertTrue(new File(linkParent, "LinkBuilder.java").exists());
+        assertTrue(new File(linkParent, "LinkKey.java").exists());
+
+        // Test if all sources are generated from 'module baz'
         File bazParent = new File(sourcesOutputDir, NS_BAZ);
-        assertEquals(4, bazParent.listFiles().length);
+        testFilesCount(bazParent, 4);
         assertTrue(new File(bazParent, "IgpLinkAttributes1.java").exists());
         assertTrue(new File(bazParent, "IgpLinkAttributes1Builder.java").exists());
         assertTrue(new File(bazParent, "LinkAttributes.java").exists());
@@ -57,13 +80,29 @@ public class AugmentToUsesInAugmentCompilationTest extends BaseCompilationTest {
 
         ClassLoader loader = new URLClassLoader(new URL[] { compiledOutputDir.toURI().toURL() });
 
+        try {
+            Class<?> link1Class = Class.forName(BASE_PKG + ".urn.opendaylight.foo.rev131008.Link1", true, loader);
+            String augmentableNode = BASE_PKG + ".urn.opendaylight.bar.rev131008.link.Link";
+            testAugmentation(link1Class, augmentableNode);
+
+            Class<?> igpLinkAttributesClass = Class.forName(BASE_PKG
+                    + ".urn.opendaylight.foo.rev131008.IgpLinkAttributes", true, loader);
+            testImplementsIfc(link1Class, igpLinkAttributesClass);
+        } catch (ClassNotFoundException e) {
+            throw new AssertionError("Class for augment wasn't generated");
+        }
+
         try {
             Class<?> igpLinkAttributes1Class = Class.forName(BASE_PKG
                     + ".urn.opendaylight.baz.rev131008.IgpLinkAttributes1", true, loader);
             String augmentableNode = BASE_PKG + ".urn.opendaylight.foo.rev131008.igp.link.attributes.IgpLinkAttributes";
             testAugmentation(igpLinkAttributes1Class, augmentableNode);
+
+            Class<?> linkAttributesClass = Class.forName(BASE_PKG + ".urn.opendaylight.baz.rev131008.LinkAttributes",
+                    true, loader);
+            testImplementsIfc(igpLinkAttributes1Class, linkAttributesClass);
         } catch (ClassNotFoundException e) {
-            throw new AssertionError("IdentityClass must have no-arg constructor");
+            throw new AssertionError("Class for augment wasn't generated");
         }
 
         cleanUp(sourcesOutputDir, compiledOutputDir);
index 64ac2b4d7e58308d9bff1cd7cfd054f5e2df1f6a..762c224f0eae9118e0f6c14bd0fea77792b9cc8d 100644 (file)
@@ -77,7 +77,15 @@ public abstract class BaseCompilationTest {
         }
     }
 
-    protected static void testImplementIfc(Class<?> classToTest, Class<?> ifcClass) throws ClassNotFoundException {
+    /**
+     * Test if generated source implements interface.
+     *
+     * @param classToTest
+     *            source to test
+     * @param ifcClass
+     *            expected interface type
+     */
+    protected static void testImplementsIfc(Class<?> classToTest, Class<?> ifcClass) {
         Class<?>[] interfaces = classToTest.getInterfaces();
         List<Class<?>> ifcsList = Arrays.asList(interfaces);
         if (!ifcsList.contains(ifcClass)) {
@@ -85,6 +93,15 @@ public abstract class BaseCompilationTest {
         }
     }
 
+    /**
+     * Test if interface generated from augment extends Augmentation interface
+     * with correct generic type.
+     * 
+     * @param classToTest
+     *            interface generated from augment
+     * @param paramClass
+     *            fully qualified name of expected parameter type
+     */
     protected static void testAugmentation(Class<?> classToTest, String paramClass) {
         final String augmentationIfc = "interface org.opendaylight.yangtools.yang.binding.Augmentation";
         ParameterizedType augmentation = null;
@@ -121,6 +138,15 @@ public abstract class BaseCompilationTest {
         assertTrue(compiled);
     }
 
+    protected static void testFilesCount(File dir, int count) {
+        File[] dirContent = dir.listFiles();
+        if (dirContent == null) {
+            throw new AssertionError("File " + dir + " doesn't exists or it's not a directory");
+        } else {
+            assertEquals("Unexpected count of generated files", count, dirContent.length);
+        }
+    }
+
     /**
      * Search recursively given directory for *.java files.
      * 
index aa6cc07b9836e964c67d0a4affa996f0f795112d..846126eec969a99955ce971cb54fd7f6ad99167d 100644 (file)
@@ -41,7 +41,7 @@ public class CascadeUsesCompilationTest extends BaseCompilationTest {
 
         // Test if all sources are generated from module foo
         File parent = new File(sourcesOutputDir, NS_FOO);
-        assertEquals(5, parent.listFiles().length);
+        testFilesCount(parent, 5);
         File fooData = new File(parent, "FooData.java");
         File foo_gr1 = new File(parent, "FooGr1.java");
         File nodes = new File(parent, "Nodes.java");
@@ -53,7 +53,7 @@ public class CascadeUsesCompilationTest extends BaseCompilationTest {
 
         // Test if all sources are generated from module bar
         parent = new File(sourcesOutputDir, NS_BAR);
-        assertEquals(2, parent.listFiles().length);
+        testFilesCount(parent, 2);
         File barGr1 = new File(parent, "BarGr1.java");
         File barGr2 = new File(parent, "BarGr2.java");
         assertTrue(barGr1.exists());
@@ -61,7 +61,7 @@ public class CascadeUsesCompilationTest extends BaseCompilationTest {
 
         // Test if all sources are generated from module baz
         parent = new File(sourcesOutputDir, NS_BAZ);
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         File bazGr1 = new File(parent, "BazGr1.java");
         assertTrue(bazGr1.exists());
 
@@ -77,8 +77,8 @@ public class CascadeUsesCompilationTest extends BaseCompilationTest {
         Class<?> barGr2Class = Class.forName(BASE_PKG + ".urn.opendaylight.bar.rev131008.BarGr2", true, loader);
 
         // test generated interface from 'container nodes'
-        testImplementIfc(nodesClass, fooGr1Class);
-        testImplementIfc(nodesClass, barGr2Class);
+        testImplementsIfc(nodesClass, fooGr1Class);
+        testImplementsIfc(nodesClass, barGr2Class);
 
         // test generated builder for 'container nodes'
         assertFalse(nodesBuilderClass.isInterface());
index ce011d8935010bb1a3c33909e417abd795c17159..29c7334e4d53d315a0f786fd27c5d449c2de8f71 100644 (file)
@@ -50,7 +50,7 @@ public class CompilationTest extends BaseCompilationTest {
 
         // Test if all sources are generated
         File parent = new File(sourcesOutputDir, NS_TEST);
-        assertEquals(6, parent.listFiles().length);
+        testFilesCount(parent, 6);
         File keyArgs = new File(parent, "KeyArgs.java");
         File links = new File(parent, "Links.java");
         File linksBuilder = new File(parent, "LinksBuilder.java");
@@ -63,7 +63,7 @@ public class CompilationTest extends BaseCompilationTest {
         assertTrue(testData.exists());
 
         parent = new File(sourcesOutputDir, NS_TEST + FS + "links");
-        assertEquals(7, parent.listFiles().length);
+        testFilesCount(parent, 7);
         File level = new File(parent, "Level.java");
         File linkGroup = new File(parent, "LinkGroup.java");
         File node = new File(parent, "Node.java");
@@ -106,7 +106,7 @@ public class CompilationTest extends BaseCompilationTest {
         assertTrue(linksClass.isInterface());
         // FIXME: anyxml
         assertEquals(5, linksClass.getDeclaredMethods().length);
-        testImplementIfc(linksClass, keyArgsClass);
+        testImplementsIfc(linksClass, keyArgsClass);
 
         // Test list key constructor arguments ordering
         try {
@@ -134,77 +134,77 @@ public class CompilationTest extends BaseCompilationTest {
 
         // Test if all sources were generated from 'module foo'
         File parent = new File(sourcesOutputDir, NS_FOO);
-        assertEquals(7, parent.listFiles().length);
+        testFilesCount(parent, 7);
         assertTrue(new File(parent, "Object.java").exists());
         assertTrue(new File(parent, "OpenObject.java").exists());
         assertTrue(new File(parent, "ExplicitRouteObject.java").exists());
         assertTrue(new File(parent, "PathKeySubobject.java").exists());
 
         parent = new File(parent, "object");
-        assertEquals(2, parent.listFiles().length);
+        testFilesCount(parent, 2);
         assertTrue(new File(parent, "Nodes.java").exists());
         assertTrue(new File(parent, "NodesBuilder.java").exists());
 
         parent = new File(sourcesOutputDir, NS_FOO + FS + "open");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
 
         parent = new File(parent, "object");
-        assertEquals(3, parent.listFiles().length);
+        testFilesCount(parent, 3);
         assertTrue(new File(parent, "Nodes1.java").exists());
         assertTrue(new File(parent, "Nodes1Builder.java").exists());
 
         parent = new File(parent, "nodes");
-        assertEquals(2, parent.listFiles().length);
+        testFilesCount(parent, 2);
         assertTrue(new File(parent, "Links.java").exists());
         assertTrue(new File(parent, "LinksBuilder.java").exists());
 
         parent = new File(sourcesOutputDir, NS_FOO + FS + "explicit");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "route");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "object");
-        assertEquals(3, parent.listFiles().length);
+        testFilesCount(parent, 3);
         assertTrue(new File(parent, "Subobjects.java").exists());
         assertTrue(new File(parent, "SubobjectsBuilder.java").exists());
 
         parent = new File(parent, "subobjects");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "subobject");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "type");
-        assertEquals(3, parent.listFiles().length);
+        testFilesCount(parent, 3);
         assertTrue(new File(parent, "PathKey.java").exists());
         assertTrue(new File(parent, "PathKeyBuilder.java").exists());
 
         parent = new File(parent, "path");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "key");
-        assertEquals(2, parent.listFiles().length);
+        testFilesCount(parent, 2);
         assertTrue(new File(parent, "PathKey.java").exists());
         assertTrue(new File(parent, "PathKeyBuilder.java").exists());
 
         // Test if all sources were generated from 'module bar'
         parent = new File(sourcesOutputDir, NS_BAR);
-        assertEquals(3, parent.listFiles().length);
+        testFilesCount(parent, 3);
         assertTrue(new File(parent, "BasicExplicitRouteSubobjects.java").exists());
         assertTrue(new File(parent, "ExplicitRouteSubobjects.java").exists());
 
         parent = new File(parent, "basic");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "explicit");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "route");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
 
         parent = new File(parent, "subobjects");
-        assertEquals(2, parent.listFiles().length);
+        testFilesCount(parent, 2);
         assertTrue(new File(parent, "SubobjectType.java").exists());
 
         parent = new File(parent, "subobject");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
 
         parent = new File(parent, "type");
-        assertEquals(4, parent.listFiles().length);
+        testFilesCount(parent, 4);
         assertTrue(new File(parent, "IpPrefix.java").exists());
         assertTrue(new File(parent, "IpPrefixBuilder.java").exists());
         assertTrue(new File(parent, "Label.java").exists());
@@ -232,7 +232,7 @@ public class CompilationTest extends BaseCompilationTest {
 
         // Test if all sources were generated from 'module foo'
         File parent = new File(sourcesOutputDir, NS_FOO);
-        assertEquals(6, parent.listFiles().length);
+        testFilesCount(parent, 6);
         File fooListener = new File(parent, "FooListener.java");
         File pathAttributes = new File(parent, "PathAttributes.java");
         File update = new File(parent, "Update.java");
@@ -243,16 +243,16 @@ public class CompilationTest extends BaseCompilationTest {
         assertTrue(updateBuilder.exists());
 
         parent = new File(sourcesOutputDir, NS_FOO + FS + "path");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "attributes");
-        assertEquals(2, parent.listFiles().length);
+        testFilesCount(parent, 2);
         File origin = new File(parent, "Origin.java");
         File originBuilder = new File(parent, "OriginBuilder.java");
         assertTrue(origin.exists());
         assertTrue(originBuilder.exists());
 
         parent = new File(sourcesOutputDir, NS_FOO + FS + "update");
-        assertEquals(2, parent.listFiles().length);
+        testFilesCount(parent, 2);
         pathAttributes = new File(parent, "PathAttributes.java");
         File pathAttributesBuilder = new File(parent, "PathAttributesBuilder.java");
         assertTrue(pathAttributes.exists());
@@ -260,7 +260,7 @@ public class CompilationTest extends BaseCompilationTest {
 
         // Test if all sources were generated from 'module bar'
         parent = new File(sourcesOutputDir, NS_BAR);
-        assertEquals(5, parent.listFiles().length);
+        testFilesCount(parent, 5);
         File destination = new File(parent, "Destination.java");
         File pathAttributes1 = new File(parent, "PathAttributes1.java");
         File pathAttributes1Builder = new File(parent, "PathAttributes1Builder.java");
@@ -269,74 +269,74 @@ public class CompilationTest extends BaseCompilationTest {
         assertTrue(pathAttributes1Builder.exists());
 
         parent = new File(sourcesOutputDir, NS_BAR + FS + "destination");
-        assertEquals(2, parent.listFiles().length);
+        testFilesCount(parent, 2);
         File destinationType = new File(parent, "DestinationType.java");
         assertTrue(destinationType.exists());
 
         parent = new File(parent, "destination");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "type");
-        assertEquals(2, parent.listFiles().length);
+        testFilesCount(parent, 2);
         File destinationIpv4 = new File(parent, "DestinationIp.java");
         File destinationIpv4Builder = new File(parent, "DestinationIpBuilder.java");
         assertTrue(destinationIpv4.exists());
         assertTrue(destinationIpv4Builder.exists());
 
         parent = new File(sourcesOutputDir, NS_BAR + FS + "update");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "path");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "attributes");
-        assertEquals(3, parent.listFiles().length);
+        testFilesCount(parent, 3);
         File mpUnreachNlri = new File(parent, "MpUnreachNlri.java");
         File mpUnreachNlriBuilder = new File(parent, "MpUnreachNlriBuilder.java");
         assertTrue(mpUnreachNlri.exists());
         assertTrue(mpUnreachNlriBuilder.exists());
 
         parent = new File(parent, "mp");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "unreach");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "nlri");
-        assertEquals(3, parent.listFiles().length);
+        testFilesCount(parent, 3);
         File withdrawnRoutes = new File(parent, "WithdrawnRoutes.java");
         File withdrawnRoutesBuilder = new File(parent, "WithdrawnRoutesBuilder.java");
         assertTrue(withdrawnRoutes.exists());
         assertTrue(withdrawnRoutesBuilder.exists());
 
         parent = new File(parent, "withdrawn");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "routes");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         destinationType = new File(parent, "DestinationType.java");
         assertTrue(destinationType.exists());
 
         // Test if all sources were generated from 'module baz'
         parent = new File(sourcesOutputDir, NS_BAZ);
-        assertEquals(2, parent.listFiles().length);
+        testFilesCount(parent, 2);
         File linkstateDestination = new File(parent, "LinkstateDestination.java");
         assertTrue(linkstateDestination.exists());
 
         parent = new File(sourcesOutputDir, NS_BAZ + FS + "update");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "path");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "attributes");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "mp");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "unreach");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "nlri");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "withdrawn");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "routes");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "destination");
-        assertEquals(1, parent.listFiles().length);
+        testFilesCount(parent, 1);
         parent = new File(parent, "type");
-        assertEquals(2, parent.listFiles().length);
+        testFilesCount(parent, 2);
         File destinationLinkstate = new File(parent, "DestinationLinkstate.java");
         File destinationLinkstateBuilder = new File(parent, "DestinationLinkstateBuilder.java");
         assertTrue(destinationLinkstate.exists());
@@ -363,6 +363,7 @@ public class CompilationTest extends BaseCompilationTest {
         generator.generateToFile(sourcesOutputDir);
 
         File parent = new File(sourcesOutputDir, NS_TEST);
+        testFilesCount(parent, 4);
         assertTrue(new File(parent, "TestData.java").exists());
         assertTrue(new File(parent, "Nodes.java").exists());
         assertTrue(new File(parent, "NodesBuilder.java").exists());
@@ -416,13 +417,13 @@ public class CompilationTest extends BaseCompilationTest {
 
         // Test if all sources are generated
         File fooParent = new File(sourcesOutputDir, NS_FOO);
-        assertEquals(3, fooParent.listFiles().length);
+        testFilesCount(fooParent, 3);
         assertTrue(new File(fooParent, "FooData.java").exists());
         assertTrue(new File(fooParent, "Nodes.java").exists());
         assertTrue(new File(fooParent, "NodesBuilder.java").exists());
 
         File barParent = new File(sourcesOutputDir, NS_BAR);
-        assertEquals(1, barParent.listFiles().length);
+        testFilesCount(barParent, 1);
         assertTrue(new File(barParent, "IdentityClass.java").exists());
 
         // Test if sources are compilable
index c4fd4eacf25c1db6c8a7eaad8cc060d67f79e402..38e71d04f5e74d6298eb0208fe147a9b6070adff 100644 (file)
@@ -12,10 +12,14 @@ module bar {
             leaf topology-id {
                 type int32;
             }
-            list link {
-                key "link-id";
-                uses link-attributes;
-            }
+            uses link;
+        }
+    }
+
+    grouping link {
+        list link {
+            key "link-id";
+            uses link-attributes;
         }
     }