Bug 6491: Some imports are not exposed in Module.getImports 17/47317/2
authorFilip Gregor <fgregor@cisco.com>
Wed, 19 Oct 2016 13:57:33 +0000 (15:57 +0200)
committerRobert Varga <nite@hq.sk>
Fri, 21 Oct 2016 09:21:48 +0000 (09:21 +0000)
in case of no revision in module and imported module, method
getImports returns empty Set.
added tests, fixed Set with imports in AbstractEffectiveModule

Change-Id: Ie23196d9cbcca98266580d11a85d66c06ac8561c
Signed-off-by: Filip Gregor <fgregor@cisco.com>
(cherry picked from commit a9aa900b8c5d1dbe16011a0c6c0f00cbb2ec105e)

yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug6491Test.java [new file with mode: 0644]
yang/yang-parser-impl/src/test/resources/bugs/bug6491/importedModuleRevisionOnly/bar.yang [new file with mode: 0644]
yang/yang-parser-impl/src/test/resources/bugs/bug6491/importedModuleRevisionOnly/foo.yang [new file with mode: 0644]
yang/yang-parser-impl/src/test/resources/bugs/bug6491/moduleRevisionOnly/bar.yang [new file with mode: 0644]
yang/yang-parser-impl/src/test/resources/bugs/bug6491/moduleRevisionOnly/foo.yang [new file with mode: 0644]
yang/yang-parser-impl/src/test/resources/bugs/bug6491/withRevision/bar.yang [new file with mode: 0644]
yang/yang-parser-impl/src/test/resources/bugs/bug6491/withRevision/foo.yang [new file with mode: 0644]
yang/yang-parser-impl/src/test/resources/bugs/bug6491/withoutRevision/bar.yang [new file with mode: 0644]
yang/yang-parser-impl/src/test/resources/bugs/bug6491/withoutRevision/foo.yang [new file with mode: 0644]

index db7aa9ebed2fb2458c4b312eedb047124035517d..206cd4b47402b8616493efcb0147f224d9fb7158 100644 (file)
@@ -238,15 +238,13 @@ abstract class AbstractEffectiveModule<D extends DeclaredStatement<String>> exte
 
     private static Set<ModuleImport> resolveModuleImports(final Set<ModuleImport> importsInit,
             final StmtContext<String, ? extends DeclaredStatement<String>, ? extends EffectiveStatement<String, ?>> ctx) {
-        Set<ModuleImport> resolvedModuleImports = new LinkedHashSet<>();
+        final Set<ModuleImport> resolvedModuleImports = new LinkedHashSet<>();
         for (ModuleImport moduleImport : importsInit) {
             if (moduleImport.getRevision().equals(SimpleDateFormatUtil.DEFAULT_DATE_IMP)) {
-                QNameModule impModuleQName = Utils.getModuleQNameByPrefix(ctx, moduleImport.getPrefix());
-                if (!impModuleQName.getRevision().equals(SimpleDateFormatUtil.DEFAULT_DATE_REV)) {
-                    ModuleImport resolvedModuleImport = new ModuleImportImpl(moduleImport.getModuleName(),
-                            impModuleQName.getRevision(), moduleImport.getPrefix());
-                    resolvedModuleImports.add(resolvedModuleImport);
-                }
+                final QNameModule impModuleQName = Utils.getModuleQNameByPrefix(ctx, moduleImport.getPrefix());
+                final ModuleImport resolvedModuleImport = new ModuleImportImpl(moduleImport.getModuleName(),
+                        impModuleQName.getRevision(), moduleImport.getPrefix());
+                resolvedModuleImports.add(resolvedModuleImport);
             } else {
                 resolvedModuleImports.add(moduleImport);
             }
diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug6491Test.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug6491Test.java
new file mode 100644 (file)
index 0000000..44ccdfb
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.stmt;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil.DEFAULT_DATE_REV;
+import static org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil.getRevisionFormat;
+
+import java.io.FileNotFoundException;
+import java.net.URISyntaxException;
+import java.text.ParseException;
+import java.util.Date;
+import java.util.Set;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.api.ModuleImport;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
+
+public class Bug6491Test {
+    private Date date;
+
+    @Before
+    public void setup() throws ParseException {
+        date = getRevisionFormat().parse("2016-01-01");
+    }
+
+    @Test
+    public void tetststs() throws ReactorException, FileNotFoundException, URISyntaxException {
+        testRevision("withoutRevision", DEFAULT_DATE_REV, DEFAULT_DATE_REV);
+        testRevision("withRevision", date, date);
+        testRevision("importedModuleRevisionOnly", DEFAULT_DATE_REV, date);
+        testRevision("moduleRevisionOnly", date, DEFAULT_DATE_REV);
+    }
+
+    private void testRevision(final String path, final Date moduleRevision, final Date importedRevision) throws
+            ReactorException, FileNotFoundException, URISyntaxException {
+        final SchemaContext context = StmtTestUtils.parseYangSources("/bugs/bug6491/".concat(path));
+        assertNotNull(context);
+        final Module module = context.findModuleByName("bar", moduleRevision);
+        assertNotNull(module);
+        final Set<ModuleImport> imports = module.getImports();
+        assertNotNull(imports);
+        assertEquals(1, imports.size());
+        assertEquals(importedRevision, imports.iterator().next().getRevision());
+    }
+}
\ No newline at end of file
diff --git a/yang/yang-parser-impl/src/test/resources/bugs/bug6491/importedModuleRevisionOnly/bar.yang b/yang/yang-parser-impl/src/test/resources/bugs/bug6491/importedModuleRevisionOnly/bar.yang
new file mode 100644 (file)
index 0000000..ee4c238
--- /dev/null
@@ -0,0 +1,12 @@
+module bar {
+    namespace "bar";
+    prefix bar;
+
+    import foo {
+        prefix foo;
+    }
+
+    leaf bar-leaf {
+        type string;
+    }
+}
\ No newline at end of file
diff --git a/yang/yang-parser-impl/src/test/resources/bugs/bug6491/importedModuleRevisionOnly/foo.yang b/yang/yang-parser-impl/src/test/resources/bugs/bug6491/importedModuleRevisionOnly/foo.yang
new file mode 100644 (file)
index 0000000..410b573
--- /dev/null
@@ -0,0 +1,9 @@
+module foo {
+    namespace "foo";
+    prefix foo;
+    revision 2016-01-01;
+
+    leaf foo-leaf {
+        type string;
+    }
+}
\ No newline at end of file
diff --git a/yang/yang-parser-impl/src/test/resources/bugs/bug6491/moduleRevisionOnly/bar.yang b/yang/yang-parser-impl/src/test/resources/bugs/bug6491/moduleRevisionOnly/bar.yang
new file mode 100644 (file)
index 0000000..0732c41
--- /dev/null
@@ -0,0 +1,13 @@
+module bar {
+    namespace "bar";
+    prefix bar;
+    revision 2016-01-01;
+
+    import foo {
+        prefix foo;
+    }
+
+    leaf bar-leaf {
+        type string;
+    }
+}
\ No newline at end of file
diff --git a/yang/yang-parser-impl/src/test/resources/bugs/bug6491/moduleRevisionOnly/foo.yang b/yang/yang-parser-impl/src/test/resources/bugs/bug6491/moduleRevisionOnly/foo.yang
new file mode 100644 (file)
index 0000000..31ccc34
--- /dev/null
@@ -0,0 +1,8 @@
+module foo {
+    namespace "foo";
+    prefix foo;
+
+    leaf foo-leaf {
+        type string;
+    }
+}
\ No newline at end of file
diff --git a/yang/yang-parser-impl/src/test/resources/bugs/bug6491/withRevision/bar.yang b/yang/yang-parser-impl/src/test/resources/bugs/bug6491/withRevision/bar.yang
new file mode 100644 (file)
index 0000000..0732c41
--- /dev/null
@@ -0,0 +1,13 @@
+module bar {
+    namespace "bar";
+    prefix bar;
+    revision 2016-01-01;
+
+    import foo {
+        prefix foo;
+    }
+
+    leaf bar-leaf {
+        type string;
+    }
+}
\ No newline at end of file
diff --git a/yang/yang-parser-impl/src/test/resources/bugs/bug6491/withRevision/foo.yang b/yang/yang-parser-impl/src/test/resources/bugs/bug6491/withRevision/foo.yang
new file mode 100644 (file)
index 0000000..410b573
--- /dev/null
@@ -0,0 +1,9 @@
+module foo {
+    namespace "foo";
+    prefix foo;
+    revision 2016-01-01;
+
+    leaf foo-leaf {
+        type string;
+    }
+}
\ No newline at end of file
diff --git a/yang/yang-parser-impl/src/test/resources/bugs/bug6491/withoutRevision/bar.yang b/yang/yang-parser-impl/src/test/resources/bugs/bug6491/withoutRevision/bar.yang
new file mode 100644 (file)
index 0000000..ee4c238
--- /dev/null
@@ -0,0 +1,12 @@
+module bar {
+    namespace "bar";
+    prefix bar;
+
+    import foo {
+        prefix foo;
+    }
+
+    leaf bar-leaf {
+        type string;
+    }
+}
\ No newline at end of file
diff --git a/yang/yang-parser-impl/src/test/resources/bugs/bug6491/withoutRevision/foo.yang b/yang/yang-parser-impl/src/test/resources/bugs/bug6491/withoutRevision/foo.yang
new file mode 100644 (file)
index 0000000..31ccc34
--- /dev/null
@@ -0,0 +1,8 @@
+module foo {
+    namespace "foo";
+    prefix foo;
+
+    leaf foo-leaf {
+        type string;
+    }
+}
\ No newline at end of file