import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
}
// no need to check if other Type of object, check is performed in process modules
- for (final ModuleImport imprt : module.getImports()) {
+ for (final ModuleImport imprt : allImports(module)) {
final String toName = imprt.getModuleName();
final Optional<Revision> toRevision = imprt.getRevision();
}
}
+ private static Collection<ModuleImport> allImports(final Module mod) {
+ if (mod.getSubmodules().isEmpty()) {
+ return mod.getImports();
+ }
+
+ final Collection<ModuleImport> concat = new LinkedHashSet<>();
+ concat.addAll(mod.getImports());
+ for (Module sub : mod.getSubmodules()) {
+ concat.addAll(sub.getImports());
+ }
+ return concat;
+ }
+
/**
* Get imported module by its name and revision from moduleGraph.
*/
import com.google.common.collect.ImmutableSet;
import java.net.URI;
import java.util.List;
+import java.util.Optional;
import org.junit.Before;
import org.junit.Test;
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"));
+ private static final QNameModule FOO_MODULE = QNameModule.create(URI.create("foo"));
+ private static final QNameModule BAR_MODULE = QNameModule.create(URI.create("bar"));
@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).when(fooNoRev).getYangVersion();
+ doReturn(ImmutableSet.of()).when(fooNoRev).getImports();
+ doReturn(ImmutableSet.of()).when(fooNoRev).getSubmodules();
+
+ doReturn("foo").when(fooNoRevImport).getModuleName();
+ doReturn(Optional.empty()).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).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
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));
}