Remove usage of deprecated yang parser classes
[yangtools.git] / yang / yang-parser-impl / src / test / java / org / opendaylight / yangtools / yang / stmt / IfFeatureResolutionTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.yangtools.yang.stmt;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertNull;
14
15 import java.util.HashSet;
16 import java.util.Set;
17 import java.util.function.Predicate;
18 import org.junit.Test;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.Module;
24 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
25 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
26 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
27 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
28 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
29 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl;
30
31 public class IfFeatureResolutionTest {
32
33     private static final StatementStreamSource FOO_MODULE =
34             new YangStatementSourceImpl("/if-feature-resolution-test/foo.yang", false);
35     private static final StatementStreamSource BAR_MODULE =
36             new YangStatementSourceImpl("/if-feature-resolution-test/bar.yang", false);
37
38     @Test
39     public void testSomeFeaturesSupported() throws ReactorException {
40         Predicate<QName> isFeatureSupported = qName -> {
41             Set<QName> supportedFeatures = new HashSet<>();
42             supportedFeatures.add(QName.create("foo-namespace", "1970-01-01", "test-feature-1"));
43             supportedFeatures.add(QName.create("foo-namespace", "1970-01-01", "test-feature-2"));
44             supportedFeatures.add(QName.create("foo-namespace", "1970-01-01", "test-feature-3"));
45             supportedFeatures.add(QName.create("bar-namespace", "1970-01-01", "imp-feature"));
46
47             return supportedFeatures.contains(qName);
48         };
49
50         CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild(isFeatureSupported);
51         reactor.addSources(FOO_MODULE, BAR_MODULE);
52
53         SchemaContext schemaContext = reactor.buildEffective();
54         assertNotNull(schemaContext);
55
56         Module testModule = schemaContext.findModuleByName("foo", null);
57         assertNotNull(testModule);
58
59         assertEquals(9, testModule.getChildNodes().size());
60
61         ContainerSchemaNode testContainerA = (ContainerSchemaNode) testModule.getDataChildByName(
62                 QName.create(testModule.getQNameModule(), "test-container-a"));
63         assertNull(testContainerA);
64
65         ContainerSchemaNode testContainerB = (ContainerSchemaNode) testModule.getDataChildByName(
66                 QName.create(testModule.getQNameModule(), "test-container-b"));
67         assertNotNull(testContainerB);
68         LeafSchemaNode testLeafB = (LeafSchemaNode) testContainerB.getDataChildByName(
69                 QName.create(testModule.getQNameModule(), "test-leaf-b"));
70         assertNotNull(testLeafB);
71
72         ContainerSchemaNode testContainerC = (ContainerSchemaNode) testModule.getDataChildByName(
73                 QName.create(testModule.getQNameModule(), "test-container-c"));
74         assertNotNull(testContainerC);
75         LeafSchemaNode testLeafC = (LeafSchemaNode) testContainerC.getDataChildByName(
76                 QName.create(testModule.getQNameModule(), "test-leaf-c"));
77         assertNotNull(testLeafC);
78
79         ContainerSchemaNode testContainerD = (ContainerSchemaNode) testModule.getDataChildByName(
80                 QName.create(testModule.getQNameModule(), "test-container-d"));
81         assertNull(testContainerD);
82
83         ContainerSchemaNode testContainerE = (ContainerSchemaNode) testModule.getDataChildByName(
84                 QName.create(testModule.getQNameModule(), "test-container-e"));
85         assertNotNull(testContainerE);
86         ContainerSchemaNode testSubContainerE = (ContainerSchemaNode) testContainerE.getDataChildByName(
87                 QName.create(testModule.getQNameModule(), "test-subcontainer-e"));
88         assertNotNull(testSubContainerE);
89         LeafSchemaNode testLeafE = (LeafSchemaNode) testSubContainerE.getDataChildByName(
90                 QName.create(testModule.getQNameModule(), "test-leaf-e"));
91         assertNull(testLeafE);
92
93         ContainerSchemaNode testContainerF = (ContainerSchemaNode) testModule.getDataChildByName(
94                 QName.create(testModule.getQNameModule(), "test-container-f"));
95         assertNotNull(testContainerF);
96         ContainerSchemaNode testSubContainerF = (ContainerSchemaNode) testContainerF.getDataChildByName(
97                 QName.create(testModule.getQNameModule(), "test-subcontainer-f"));
98         assertNull(testSubContainerF);
99
100         ContainerSchemaNode testContainerG = (ContainerSchemaNode) testModule.getDataChildByName(
101                 QName.create(testModule.getQNameModule(), "test-container-g"));
102         assertNotNull(testContainerG);
103         assertEquals(1, testContainerG.getAvailableAugmentations().size());
104         LeafSchemaNode testLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
105                 QName.create(testModule.getQNameModule(), "test-leaf-g"));
106         assertNotNull(testLeafG);
107         LeafSchemaNode augmentingTestLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
108                 QName.create(testModule.getQNameModule(), "augmenting-test-leaf-g"));
109         assertNull(augmentingTestLeafG);
110         AnyXmlSchemaNode augmentingTestAnyxmlG = (AnyXmlSchemaNode) testContainerG.getDataChildByName(
111                 QName.create(testModule.getQNameModule(), "augmenting-test-anyxml-g"));
112         assertNotNull(augmentingTestAnyxmlG);
113
114         ContainerSchemaNode testContainerH = (ContainerSchemaNode) testModule.getDataChildByName(
115                 QName.create(testModule.getQNameModule(), "test-container-h"));
116         assertNotNull(testContainerH);
117         assertEquals(0, testContainerH.getChildNodes().size());
118         assertEquals(0, testContainerH.getUses().size());
119
120         ContainerSchemaNode testContainerI = (ContainerSchemaNode) testModule.getDataChildByName(
121                 QName.create(testModule.getQNameModule(), "test-container-i"));
122         assertNotNull(testContainerI);
123         assertEquals(1, testContainerI.getUses().size());
124         ContainerSchemaNode testGroupingSubContainer = (ContainerSchemaNode) testContainerI.getDataChildByName(
125                 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
126         assertNotNull(testGroupingSubContainer);
127         LeafSchemaNode testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
128                 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
129         assertNull(testGroupingLeaf);
130
131         ContainerSchemaNode testContainerJ = (ContainerSchemaNode) testModule.getDataChildByName(
132                 QName.create(testModule.getQNameModule(), "test-container-j"));
133         assertNotNull(testContainerJ);
134         LeafSchemaNode testLeafJ = (LeafSchemaNode) testContainerJ.getDataChildByName(
135                 QName.create(testModule.getQNameModule(), "test-leaf-j"));
136         assertNotNull(testLeafJ);
137
138         ContainerSchemaNode testContainerK = (ContainerSchemaNode) testModule.getDataChildByName(
139                 QName.create(testModule.getQNameModule(), "test-container-k"));
140         assertNotNull(testContainerK);
141         assertEquals(1, testContainerK.getUses().size());
142         testGroupingSubContainer = (ContainerSchemaNode) testContainerK.getDataChildByName(
143                 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
144         assertNotNull(testGroupingSubContainer);
145         assertEquals(1, testGroupingSubContainer.getAvailableAugmentations().size());
146         LeafSchemaNode augmentingTestGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
147                 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf"));
148         assertNotNull(augmentingTestGroupingLeaf);
149         LeafSchemaNode augmentingTestGroupingLeaf2 = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
150                 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf-2"));
151         assertNull(augmentingTestGroupingLeaf2);
152     }
153
154     @Test
155     public void testAllFeaturesSupported() throws ReactorException {
156         CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
157         reactor.addSources(FOO_MODULE, BAR_MODULE);
158
159         SchemaContext schemaContext = reactor.buildEffective();
160         assertNotNull(schemaContext);
161
162         Module testModule = schemaContext.findModuleByName("foo", null);
163         assertNotNull(testModule);
164
165         assertEquals(11, testModule.getChildNodes().size());
166
167         ContainerSchemaNode testContainerA = (ContainerSchemaNode) testModule.getDataChildByName(
168                 QName.create(testModule.getQNameModule(), "test-container-a"));
169         assertNotNull(testContainerA);
170         LeafSchemaNode testLeafA = (LeafSchemaNode) testContainerA.getDataChildByName(
171                 QName.create(testModule.getQNameModule(), "test-leaf-a"));
172         assertNotNull(testLeafA);
173
174
175         ContainerSchemaNode testContainerB = (ContainerSchemaNode) testModule.getDataChildByName(
176                 QName.create(testModule.getQNameModule(), "test-container-b"));
177         assertNotNull(testContainerB);
178         LeafSchemaNode testLeafB = (LeafSchemaNode) testContainerB.getDataChildByName(
179                 QName.create(testModule.getQNameModule(), "test-leaf-b"));
180         assertNotNull(testLeafB);
181
182         ContainerSchemaNode testContainerC = (ContainerSchemaNode) testModule.getDataChildByName(
183                 QName.create(testModule.getQNameModule(), "test-container-c"));
184         assertNotNull(testContainerC);
185         LeafSchemaNode testLeafC = (LeafSchemaNode) testContainerC.getDataChildByName(
186                 QName.create(testModule.getQNameModule(), "test-leaf-c"));
187         assertNotNull(testLeafC);
188
189         ContainerSchemaNode testContainerD = (ContainerSchemaNode) testModule.getDataChildByName(
190                 QName.create(testModule.getQNameModule(), "test-container-d"));
191         assertNotNull(testContainerD);
192         LeafSchemaNode testLeafD = (LeafSchemaNode) testContainerD.getDataChildByName(
193                 QName.create(testModule.getQNameModule(), "test-leaf-d"));
194         assertNotNull(testLeafD);
195
196         ContainerSchemaNode testContainerE = (ContainerSchemaNode) testModule.getDataChildByName(
197                 QName.create(testModule.getQNameModule(), "test-container-e"));
198         assertNotNull(testContainerE);
199         ContainerSchemaNode testSubContainerE = (ContainerSchemaNode) testContainerE.getDataChildByName(
200                 QName.create(testModule.getQNameModule(), "test-subcontainer-e"));
201         assertNotNull(testSubContainerE);
202         LeafSchemaNode testLeafE = (LeafSchemaNode) testSubContainerE.getDataChildByName(
203                 QName.create(testModule.getQNameModule(), "test-leaf-e"));
204         assertNotNull(testLeafE);
205
206         ContainerSchemaNode testContainerF = (ContainerSchemaNode) testModule.getDataChildByName(
207                 QName.create(testModule.getQNameModule(), "test-container-f"));
208         assertNotNull(testContainerF);
209         ContainerSchemaNode testSubContainerF = (ContainerSchemaNode) testContainerF.getDataChildByName(
210                 QName.create(testModule.getQNameModule(), "test-subcontainer-f"));
211         assertNotNull(testSubContainerF);
212         ContainerSchemaNode testSubSubContainerF = (ContainerSchemaNode) testSubContainerF.getDataChildByName(
213                 QName.create(testModule.getQNameModule(), "test-subsubcontainer-f"));
214         assertNotNull(testSubSubContainerF);
215         LeafSchemaNode testLeafF = (LeafSchemaNode) testSubSubContainerF.getDataChildByName(
216                 QName.create(testModule.getQNameModule(), "test-leaf-f"));
217         assertNotNull(testLeafF);
218
219         ContainerSchemaNode testContainerG = (ContainerSchemaNode) testModule.getDataChildByName(
220                 QName.create(testModule.getQNameModule(), "test-container-g"));
221         assertNotNull(testContainerG);
222         assertEquals(2, testContainerG.getAvailableAugmentations().size());
223         LeafSchemaNode testLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
224                 QName.create(testModule.getQNameModule(), "test-leaf-g"));
225         assertNotNull(testLeafG);
226         LeafSchemaNode augmentingTestLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
227                 QName.create(testModule.getQNameModule(), "augmenting-test-leaf-g"));
228         assertNotNull(augmentingTestLeafG);
229         AnyXmlSchemaNode augmentingTestAnyxmlG = (AnyXmlSchemaNode) testContainerG.getDataChildByName(
230                 QName.create(testModule.getQNameModule(), "augmenting-test-anyxml-g"));
231         assertNotNull(augmentingTestAnyxmlG);
232
233         ContainerSchemaNode testContainerH = (ContainerSchemaNode) testModule.getDataChildByName(
234                 QName.create(testModule.getQNameModule(), "test-container-h"));
235         assertNotNull(testContainerH);
236         assertEquals(1, testContainerH.getUses().size());
237         ContainerSchemaNode testGroupingSubContainer = (ContainerSchemaNode) testContainerH.getDataChildByName(
238                 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
239         assertNotNull(testGroupingSubContainer);
240         LeafSchemaNode testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
241                 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
242         assertNotNull(testGroupingLeaf);
243
244         ContainerSchemaNode testContainerI = (ContainerSchemaNode) testModule.getDataChildByName(
245                 QName.create(testModule.getQNameModule(), "test-container-i"));
246         assertNotNull(testContainerI);
247         assertEquals(1, testContainerI.getUses().size());
248         testGroupingSubContainer = (ContainerSchemaNode) testContainerI.getDataChildByName(
249                 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
250         assertNotNull(testGroupingSubContainer);
251         testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
252                 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
253         assertNotNull(testGroupingLeaf);
254
255         ContainerSchemaNode testContainerJ = (ContainerSchemaNode) testModule.getDataChildByName(
256                 QName.create(testModule.getQNameModule(), "test-container-j"));
257         assertNotNull(testContainerJ);
258         LeafSchemaNode testLeafJ = (LeafSchemaNode) testContainerJ.getDataChildByName(
259                 QName.create(testModule.getQNameModule(), "test-leaf-j"));
260         assertNotNull(testLeafJ);
261
262         ContainerSchemaNode testContainerK = (ContainerSchemaNode) testModule.getDataChildByName(
263                 QName.create(testModule.getQNameModule(), "test-container-k"));
264         assertNotNull(testContainerK);
265         assertEquals(1, testContainerK.getUses().size());
266         testGroupingSubContainer = (ContainerSchemaNode) testContainerK.getDataChildByName(
267                 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
268         assertNotNull(testGroupingSubContainer);
269         assertEquals(1, testGroupingSubContainer.getAvailableAugmentations().size());
270         LeafSchemaNode augmentingTestGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
271                 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf"));
272         assertNotNull(augmentingTestGroupingLeaf);
273         LeafSchemaNode augmentingTestGroupingLeaf2 = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
274                 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf-2"));
275         assertNotNull(augmentingTestGroupingLeaf2);
276         testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
277                 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
278         assertNotNull(testGroupingLeaf);
279     }
280
281     @Test
282     public void testNoFeaturesSupported() throws ReactorException {
283         Predicate<QName> isFeatureSupported = qName -> false;
284
285         CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild(isFeatureSupported);
286         reactor.addSources(FOO_MODULE, BAR_MODULE);
287
288         SchemaContext schemaContext = reactor.buildEffective();
289         assertNotNull(schemaContext);
290
291         Module testModule = schemaContext.findModuleByName("foo", null);
292         assertNotNull(testModule);
293
294         assertEquals(6, testModule.getChildNodes().size());
295
296         ContainerSchemaNode testContainerE = (ContainerSchemaNode) testModule.getDataChildByName(
297                 QName.create(testModule.getQNameModule(), "test-container-e"));
298         assertNotNull(testContainerE);
299         ContainerSchemaNode testSubContainerE = (ContainerSchemaNode) testContainerE.getDataChildByName(
300                 QName.create(testModule.getQNameModule(), "test-subcontainer-e"));
301         assertNotNull(testSubContainerE);
302         LeafSchemaNode testLeafE = (LeafSchemaNode) testSubContainerE.getDataChildByName(
303                 QName.create(testModule.getQNameModule(), "test-leaf-e"));
304         assertNull(testLeafE);
305
306         ContainerSchemaNode testContainerF = (ContainerSchemaNode) testModule.getDataChildByName(
307                 QName.create(testModule.getQNameModule(), "test-container-f"));
308         assertNotNull(testContainerF);
309         ContainerSchemaNode testSubContainerF = (ContainerSchemaNode) testContainerF.getDataChildByName(
310                 QName.create(testModule.getQNameModule(), "test-subcontainer-f"));
311         assertNull(testSubContainerF);
312
313         ContainerSchemaNode testContainerG = (ContainerSchemaNode) testModule.getDataChildByName(
314                 QName.create(testModule.getQNameModule(), "test-container-g"));
315         assertNotNull(testContainerG);
316         assertEquals(1, testContainerG.getAvailableAugmentations().size());
317         LeafSchemaNode testLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
318                 QName.create(testModule.getQNameModule(), "test-leaf-g"));
319         assertNotNull(testLeafG);
320         LeafSchemaNode augmentingTestLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
321                 QName.create(testModule.getQNameModule(), "augmenting-test-leaf-g"));
322         assertNull(augmentingTestLeafG);
323         AnyXmlSchemaNode augmentingTestAnyxmlG = (AnyXmlSchemaNode) testContainerG.getDataChildByName(
324                 QName.create(testModule.getQNameModule(), "augmenting-test-anyxml-g"));
325         assertNotNull(augmentingTestAnyxmlG);
326
327         ContainerSchemaNode testContainerH = (ContainerSchemaNode) testModule.getDataChildByName(
328                 QName.create(testModule.getQNameModule(), "test-container-h"));
329         assertNotNull(testContainerH);
330         assertEquals(0, testContainerH.getChildNodes().size());
331         assertEquals(0, testContainerH.getUses().size());
332
333         ContainerSchemaNode testContainerI = (ContainerSchemaNode) testModule.getDataChildByName(
334                 QName.create(testModule.getQNameModule(), "test-container-i"));
335         assertNotNull(testContainerI);
336         assertEquals(1, testContainerI.getUses().size());
337         ContainerSchemaNode testGroupingSubContainer = (ContainerSchemaNode) testContainerI.getDataChildByName(
338                 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
339         assertNotNull(testGroupingSubContainer);
340         LeafSchemaNode testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
341                 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
342         assertNull(testGroupingLeaf);
343
344         ContainerSchemaNode testContainerK = (ContainerSchemaNode) testModule.getDataChildByName(
345                 QName.create(testModule.getQNameModule(), "test-container-k"));
346         assertNotNull(testContainerK);
347         assertEquals(1, testContainerK.getUses().size());
348         testGroupingSubContainer = (ContainerSchemaNode) testContainerK.getDataChildByName(
349                 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
350         assertNotNull(testGroupingSubContainer);
351         assertEquals(1, testGroupingSubContainer.getAvailableAugmentations().size());
352         LeafSchemaNode augmentingTestGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
353                 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf"));
354         assertNull(augmentingTestGroupingLeaf);
355         LeafSchemaNode augmentingTestGroupingLeaf2 = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
356                 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf-2"));
357         assertNull(augmentingTestGroupingLeaf2);
358         testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
359                 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
360         assertNull(testGroupingLeaf);
361     }
362 }