Consider submodule imports when sorting modules
[yangtools.git] / yang / yang-parser-impl / src / test / java / org / opendaylight / yangtools / yang / parser / util / ModuleDependencySortTest.java
index 7fce89f3d1ec07eb39689f2b55cf2eb842c92b9b..156522dcf2728d89ac847669e998d9cda4735700 100644 (file)
@@ -20,22 +20,54 @@ import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.YangVersion;
 import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.api.ModuleImport;
 
 @RunWith(MockitoJUnitRunner.class)
 public class ModuleDependencySortTest {
-    private static final QNameModule TEST = QNameModule.create(URI.create("foo"), null);
+    private static final QNameModule FOO_MODULE = QNameModule.create(URI.create("foo"), null);
+    private static final QNameModule BAR_MODULE = QNameModule.create(URI.create("bar"), null);
 
     @Mock
     private Module fooNoRev;
 
+    @Mock
+    private ModuleImport fooNoRevImport;
+
+    @Mock
+    private Module bar;
+
+    @Mock
+    private Module barSubmodule;
+
     @Before
     public void before() {
-        doReturn(ImmutableSet.of()).when(fooNoRev).getImports();
         doReturn("foo").when(fooNoRev).getName();
-        doReturn(TEST).when(fooNoRev).getQNameModule();
-        doReturn(TEST.getNamespace()).when(fooNoRev).getNamespace();
-        doReturn(TEST.getRevision()).when(fooNoRev).getRevision();
+        doReturn(FOO_MODULE).when(fooNoRev).getQNameModule();
+        doReturn(FOO_MODULE.getNamespace()).when(fooNoRev).getNamespace();
+        doReturn(FOO_MODULE.getRevision()).when(fooNoRev).getRevision();
+        doReturn(YangVersion.VERSION_1.toString()).when(fooNoRev).getYangVersion();
+        doReturn(ImmutableSet.of()).when(fooNoRev).getImports();
+        doReturn(ImmutableSet.of()).when(fooNoRev).getSubmodules();
+
+        doReturn("foo").when(fooNoRevImport).getModuleName();
+        doReturn(null).when(fooNoRevImport).getRevision();
+
+        doReturn("bar").when(bar).getName();
+        doReturn(BAR_MODULE).when(bar).getQNameModule();
+        doReturn(BAR_MODULE.getNamespace()).when(bar).getNamespace();
+        doReturn(BAR_MODULE.getRevision()).when(bar).getRevision();
+        doReturn(YangVersion.VERSION_1.toString()).when(bar).getYangVersion();
+        doReturn(ImmutableSet.of()).when(bar).getImports();
+        doReturn(ImmutableSet.of(barSubmodule)).when(bar).getSubmodules();
+
+        doReturn("bar-submodule").when(barSubmodule).getName();
+        doReturn(BAR_MODULE).when(barSubmodule).getQNameModule();
+        doReturn(BAR_MODULE.getNamespace()).when(barSubmodule).getNamespace();
+        doReturn(BAR_MODULE.getRevision()).when(barSubmodule).getRevision();
+        doReturn(ImmutableSet.of(fooNoRevImport)).when(barSubmodule).getImports();
+        doReturn(ImmutableSet.of()).when(barSubmodule).getSubmodules();
     }
 
     @Test
@@ -43,6 +75,12 @@ public class ModuleDependencySortTest {
         assertSortedTo(of(fooNoRev), fooNoRev);
     }
 
+    @Test
+    public void testSubmodules() {
+        assertSortedTo(of(fooNoRev, bar), bar, fooNoRev);
+        assertSortedTo(of(fooNoRev, bar), fooNoRev, bar);
+    }
+
     private static void assertSortedTo(final List<Module> expected, final Module... modules) {
         assertEquals(expected, ModuleDependencySort.sort(modules));
     }