Address FIXME for QueuedNotificationManager
[yangtools.git] / yang / yang-parser-impl / src / test / java / org / opendaylight / yangtools / yang / stmt / effective / build / test / EffectiveModulesAndSubmodulesTest.java
1 package org.opendaylight.yangtools.yang.stmt.effective.build.test;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertNotNull;
6 import java.net.URI;
7 import java.net.URISyntaxException;
8 import java.util.Collection;
9 import java.util.Set;
10 import org.junit.Test;
11 import org.opendaylight.yangtools.yang.common.QName;
12 import org.opendaylight.yangtools.yang.common.QNameModule;
13 import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
14 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
15 import org.opendaylight.yangtools.yang.model.api.Module;
16 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
17 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
18 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
19 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
20 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl;
21 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSchemaContext;
22 import org.opendaylight.yangtools.yang.stmt.test.StmtTestUtils;
23
24 public class EffectiveModulesAndSubmodulesTest {
25
26     private static final YangStatementSourceImpl ROOT_MODULE = new YangStatementSourceImpl(
27             "/stmt-test/submodules/root-module.yang",false);
28     private static final YangStatementSourceImpl IMPORTED_MODULE = new YangStatementSourceImpl(
29             "/stmt-test/submodules/imported-module.yang",false);
30     private static final YangStatementSourceImpl SUBMODULE_1 = new YangStatementSourceImpl(
31             "/stmt-test/submodules/submodule-1.yang",false);
32     private static final YangStatementSourceImpl SUBMODULE_2 = new YangStatementSourceImpl(
33             "/stmt-test/submodules/submodule-2.yang",false);
34     private static final YangStatementSourceImpl SUBMODULE_TO_SUBMODULE_1 = new YangStatementSourceImpl(
35             "/stmt-test/submodules/submodule-to-submodule-1.yang",false);
36
37     @Test
38     public void modulesAndSubmodulesSimpleReferencesTest()
39             throws SourceException, ReactorException, URISyntaxException {
40         CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
41                 .newBuild();
42         StmtTestUtils.addSources(reactor, ROOT_MODULE, IMPORTED_MODULE,
43                 SUBMODULE_1, SUBMODULE_2, SUBMODULE_TO_SUBMODULE_1);
44         EffectiveSchemaContext result = reactor.buildEffective();
45
46         assertNotNull(result);
47
48         Set<Module> modules = result.getModules();
49         assertNotNull(modules);
50         assertEquals(2, modules.size());
51
52         Module root = null;
53         Module imported = null;
54         for (Module module : modules) {
55             switch (module.getName()) {
56             case "root-module":
57                 root = module;
58                 break;
59             case "imported-module":
60                 imported = module;
61                 break;
62             default:
63             }
64             StmtTestUtils.printReferences(module, false, "");
65             StmtTestUtils.printChilds(module.getChildNodes(), "      ");
66         }
67
68         assertNotNull(root);
69         assertNotNull(imported);
70
71         Collection<DataSchemaNode> rootChildNodes = root.getChildNodes();
72         Collection<DataSchemaNode> importedChildNodes = imported
73                 .getChildNodes();
74
75         assertNotNull(rootChildNodes);
76         assertNotNull(importedChildNodes);
77
78         assertEquals(3, rootChildNodes.size());
79         assertEquals(1, importedChildNodes.size());
80
81         Set<Module> rootSubmodules = root.getSubmodules();
82         Set<Module> importedSubmodules = imported.getSubmodules();
83
84         assertNotNull(rootSubmodules);
85         assertNotNull(importedSubmodules);
86
87         assertEquals(2, rootSubmodules.size());
88         assertEquals(0, importedSubmodules.size());
89
90         Module sub1 = null;
91         Module sub2 = null;
92         for (Module rootSubmodule : rootSubmodules) {
93             switch (rootSubmodule.getName()) {
94             case "submodule-1":
95                 sub1 = rootSubmodule;
96                 break;
97             case "submodule-2":
98                 sub2 = rootSubmodule;
99                 break;
100             default:
101             }
102         }
103
104         assertNotNull(sub1);
105         assertNotNull(sub2);
106
107         assertEquals(QNameModule.create(new URI("root-module"),
108                 SimpleDateFormatUtil.DEFAULT_DATE_REV), sub1.getQNameModule());
109         assertEquals(QNameModule.create(new URI("root-module"),
110                 SimpleDateFormatUtil.DEFAULT_DATE_REV), sub2.getQNameModule());
111
112         Collection<DataSchemaNode> sub1ChildNodes = sub1.getChildNodes();
113         Collection<DataSchemaNode> sub2ChildNodes = sub2.getChildNodes();
114
115         assertNotNull(sub1ChildNodes);
116         assertNotNull(sub2ChildNodes);
117
118         assertEquals(2, sub1ChildNodes.size());
119         assertEquals(1, sub2ChildNodes.size());
120
121         Set<Module> sub1Submodules = sub1.getSubmodules();
122         Set<Module> sub2Submodules = sub2.getSubmodules();
123
124         assertNotNull(sub1Submodules);
125         assertNotNull(sub2Submodules);
126
127         assertEquals(1, sub1Submodules.size());
128         assertEquals(0, sub2Submodules.size());
129
130         Module sub1Submodule = null;
131         for (Module submodule : sub1Submodules) {
132             switch (submodule.getName()) {
133             case "submodule-to-submodule-1":
134                 sub1Submodule = submodule;
135                 break;
136             default:
137             }
138         }
139
140         assertNotNull(sub1Submodule);
141
142         assertEquals(QNameModule.create(new URI("root-module"),
143                 SimpleDateFormatUtil.DEFAULT_DATE_REV),
144                 sub1Submodule.getQNameModule());
145
146         Collection<DataSchemaNode> sub1SubmoduleChildNodes = sub1Submodule
147                 .getChildNodes();
148         assertNotNull(sub1SubmoduleChildNodes);
149         assertEquals(1, sub1SubmoduleChildNodes.size());
150
151         Set<Module> sub1SubmoduleSubmodules = sub1Submodule.getSubmodules();
152         assertNotNull(sub1SubmoduleSubmodules);
153         assertEquals(0, sub1SubmoduleSubmodules.size());
154
155         findModulesSubTest(result, root, imported);
156
157         getDataChildByNameSubTest(result, root);
158
159     }
160
161     private static void getDataChildByNameSubTest(final EffectiveSchemaContext result,
162             final Module root) {
163         DataSchemaNode containerInRoot = result.getDataChildByName(QName
164                 .create(root.getQNameModule(), "container-in-root-module"));
165         assertNotNull(containerInRoot);
166         assertEquals("desc", containerInRoot.getDescription());
167     }
168
169     private static void findModulesSubTest(final EffectiveSchemaContext result, final Module root,
170             final Module imported) throws URISyntaxException {
171         Module foundRoot = result.findModuleByName("root-module",
172                 SimpleDateFormatUtil.DEFAULT_DATE_REV);
173         Set<Module> foundRoots = result.findModuleByNamespace(new URI(
174                 "root-module"));
175         Module foundRoot3 = result.findModuleByNamespaceAndRevision(new URI(
176                 "root-module"), SimpleDateFormatUtil.DEFAULT_DATE_REV);
177
178         assertNotNull(foundRoot);
179         assertNotNull(foundRoots);
180         assertEquals(1, foundRoots.size());
181         Module foundRoot2 = foundRoots.iterator().next();
182
183         assertNotNull(foundRoot2);
184         assertNotNull(foundRoot3);
185
186         assertEquals(root, foundRoot);
187         assertEquals(root, foundRoot2);
188         assertEquals(root, foundRoot3);
189
190         Module foundImported = result.findModuleByName("imported-module",
191                 SimpleDateFormatUtil.DEFAULT_DATE_REV);
192         Set<Module> foundImporteds = result.findModuleByNamespace(new URI(
193                 "imported-module"));
194         Module foundImported3 = result.findModuleByNamespaceAndRevision(
195                 new URI("imported-module"),
196                 SimpleDateFormatUtil.DEFAULT_DATE_REV);
197
198         assertNotNull(foundImported);
199         assertNotNull(foundImporteds);
200         assertEquals(1, foundImporteds.size());
201         Module foundImported2 = foundImporteds.iterator().next();
202
203         assertNotNull(foundImported2);
204         assertNotNull(foundImported3);
205
206         assertEquals(imported, foundImported);
207         assertEquals(imported, foundImported2);
208         assertEquals(imported, foundImported3);
209
210         assertFalse(root.equals(imported));
211     }
212
213 }