Merge "BUG 2307: Filtering proxy for Schema context functionality"
[yangtools.git] / yang / yang-parser-impl / src / test / java / org / opendaylight / yangtools / yang / parser / impl / GroupingTest.java
1 /*
2  * Copyright (c) 2013 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 package org.opendaylight.yangtools.yang.parser.impl;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertNull;
14 import static org.junit.Assert.assertTrue;
15
16 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
17
18 import java.io.File;
19 import java.io.IOException;
20 import java.net.URI;
21 import java.net.URISyntaxException;
22 import java.text.SimpleDateFormat;
23 import java.util.Collection;
24 import java.util.Collections;
25 import java.util.Date;
26 import java.util.List;
27 import java.util.Map;
28 import java.util.Set;
29 import org.junit.Before;
30 import org.junit.Test;
31 import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
32 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
33 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
34 import org.opendaylight.yangtools.yang.model.api.ChoiceNode;
35 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
36 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
37 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
38 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
39 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
40 import org.opendaylight.yangtools.yang.model.api.Module;
41 import org.opendaylight.yangtools.yang.model.api.MustDefinition;
42 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
43 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
44 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
45 import org.opendaylight.yangtools.yang.model.api.UsesNode;
46 import org.opendaylight.yangtools.yang.model.parser.api.YangContextParser;
47 import org.opendaylight.yangtools.yang.model.util.SchemaNodeUtils;
48
49 public class GroupingTest {
50     private Set<Module> modules;
51
52     @Before
53     public void init() throws IOException, URISyntaxException {
54         modules = TestUtils.loadModules(getClass().getResource("/model").toURI());
55         assertEquals(3, modules.size());
56     }
57
58     @Test
59     public void testRefine() {
60         Module testModule = TestUtils.findModule(modules, "foo");
61         ContainerSchemaNode peer = (ContainerSchemaNode) testModule.getDataChildByName("peer");
62         ContainerSchemaNode destination = (ContainerSchemaNode) peer.getDataChildByName("destination");
63
64         Set<UsesNode> usesNodes = destination.getUses();
65         assertEquals(1, usesNodes.size());
66         UsesNode usesNode = usesNodes.iterator().next();
67         Map<SchemaPath, SchemaNode> refines = usesNode.getRefines();
68         assertEquals(4, refines.size());
69
70         LeafSchemaNode refineLeaf = null;
71         ContainerSchemaNode refineContainer = null;
72         ListSchemaNode refineList = null;
73         LeafSchemaNode refineInnerLeaf = null;
74         for (Map.Entry<SchemaPath, SchemaNode> entry : refines.entrySet()) {
75             SchemaNode value = entry.getValue();
76             if ("address".equals(value.getQName().getLocalName())) {
77                 refineLeaf = (LeafSchemaNode) value;
78             } else if ("port".equals(value.getQName().getLocalName())) {
79                 refineContainer = (ContainerSchemaNode) value;
80             } else if ("addresses".equals(value.getQName().getLocalName())) {
81                 refineList = (ListSchemaNode) value;
82             } else if ("id".equals(value.getQName().getLocalName())) {
83                 refineInnerLeaf = (LeafSchemaNode) value;
84             }
85         }
86
87         // leaf address
88         assertNotNull(refineLeaf);
89         assertEquals("IP address of target node", refineLeaf.getDescription());
90         assertEquals("address reference added by refine", refineLeaf.getReference());
91         assertFalse(refineLeaf.isConfiguration());
92         assertFalse(refineLeaf.getConstraints().isMandatory());
93         Set<MustDefinition> leafMustConstraints = refineLeaf.getConstraints().getMustConstraints();
94         assertEquals(1, leafMustConstraints.size());
95         MustDefinition leafMust = leafMustConstraints.iterator().next();
96         assertEquals("\"ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)\"", leafMust.toString());
97         assertEquals(1, refineLeaf.getUnknownSchemaNodes().size());
98
99         // container port
100         assertNotNull(refineContainer);
101         Set<MustDefinition> mustConstraints = refineContainer.getConstraints().getMustConstraints();
102         assertTrue(mustConstraints.isEmpty());
103         assertEquals("description of port defined by refine", refineContainer.getDescription());
104         assertEquals("port reference added by refine", refineContainer.getReference());
105         assertFalse(refineContainer.isConfiguration());
106         assertTrue(refineContainer.isPresenceContainer());
107
108         // list addresses
109         assertNotNull(refineList);
110         assertEquals("description of addresses defined by refine", refineList.getDescription());
111         assertEquals("addresses reference added by refine", refineList.getReference());
112         assertFalse(refineList.isConfiguration());
113         assertEquals(2, (int) refineList.getConstraints().getMinElements());
114         assertEquals(Integer.MAX_VALUE, (int) refineList.getConstraints().getMaxElements());
115
116         // leaf id
117         assertNotNull(refineInnerLeaf);
118         assertEquals("id of address", refineInnerLeaf.getDescription());
119     }
120
121     @Test
122     public void testGrouping() {
123         Module testModule = TestUtils.findModule(modules, "baz");
124         Set<GroupingDefinition> groupings = testModule.getGroupings();
125         assertEquals(1, groupings.size());
126         GroupingDefinition grouping = groupings.iterator().next();
127         Collection<DataSchemaNode> children = grouping.getChildNodes();
128         assertEquals(5, children.size());
129     }
130
131     @Test
132     public void testUses() {
133         // suffix _u = added by uses
134         // suffix _g = defined in grouping
135
136         Module testModule = TestUtils.findModule(modules, "baz");
137
138         // get grouping
139         Set<GroupingDefinition> groupings = testModule.getGroupings();
140         assertEquals(1, groupings.size());
141         GroupingDefinition grouping = groupings.iterator().next();
142
143         testModule = TestUtils.findModule(modules, "foo");
144
145         // get node containing uses
146         ContainerSchemaNode peer = (ContainerSchemaNode) testModule.getDataChildByName("peer");
147         ContainerSchemaNode destination = (ContainerSchemaNode) peer.getDataChildByName("destination");
148
149         // check uses
150         Set<UsesNode> uses = destination.getUses();
151         assertEquals(1, uses.size());
152
153         // check uses process
154         AnyXmlSchemaNode data_u = (AnyXmlSchemaNode) destination.getDataChildByName("data");
155         assertNotNull(data_u);
156         assertTrue(data_u.isAddedByUses());
157
158         AnyXmlSchemaNode data_g = (AnyXmlSchemaNode) grouping.getDataChildByName("data");
159         assertNotNull(data_g);
160         assertFalse(data_g.isAddedByUses());
161         assertFalse(data_u.equals(data_g));
162         assertEquals(data_g,  SchemaNodeUtils.getRootOriginalIfPossible(data_u));
163
164         ChoiceNode how_u = (ChoiceNode) destination.getDataChildByName("how");
165         assertNotNull(how_u);
166         TestUtils.checkIsAddedByUses(how_u, true);
167         assertEquals(2, how_u.getCases().size());
168
169         ChoiceNode how_g = (ChoiceNode) grouping.getDataChildByName("how");
170         assertNotNull(how_g);
171         TestUtils.checkIsAddedByUses(how_g, false);
172         assertEquals(2, how_g.getCases().size());
173         assertFalse(how_u.equals(how_g));
174         assertEquals(how_g, SchemaNodeUtils.getRootOriginalIfPossible(how_u));
175
176         LeafSchemaNode address_u = (LeafSchemaNode) destination.getDataChildByName("address");
177         assertNotNull(address_u);
178         assertEquals("1.2.3.4", address_u.getDefault());
179         assertEquals("IP address of target node", address_u.getDescription());
180         assertEquals("address reference added by refine", address_u.getReference());
181         assertFalse(address_u.isConfiguration());
182         assertTrue(address_u.isAddedByUses());
183         assertFalse(address_u.getConstraints().isMandatory());
184
185         LeafSchemaNode address_g = (LeafSchemaNode) grouping.getDataChildByName("address");
186         assertNotNull(address_g);
187         assertFalse(address_g.isAddedByUses());
188         assertNull(address_g.getDefault());
189         assertEquals("Target IP address", address_g.getDescription());
190         assertNull(address_g.getReference());
191         assertTrue(address_g.isConfiguration());
192         assertFalse(address_u.equals(address_g));
193         assertTrue(address_g.getConstraints().isMandatory());
194         assertEquals(address_g, SchemaNodeUtils.getRootOriginalIfPossible(address_u));
195
196         ContainerSchemaNode port_u = (ContainerSchemaNode) destination.getDataChildByName("port");
197         assertNotNull(port_u);
198         TestUtils.checkIsAddedByUses(port_u, true);
199
200         ContainerSchemaNode port_g = (ContainerSchemaNode) grouping.getDataChildByName("port");
201         assertNotNull(port_g);
202         TestUtils.checkIsAddedByUses(port_g, false);
203         assertFalse(port_u.equals(port_g));
204         assertEquals(port_g, SchemaNodeUtils.getRootOriginalIfPossible(port_u));
205
206         ListSchemaNode addresses_u = (ListSchemaNode) destination.getDataChildByName("addresses");
207         assertNotNull(addresses_u);
208         TestUtils.checkIsAddedByUses(addresses_u, true);
209
210         ListSchemaNode addresses_g = (ListSchemaNode) grouping.getDataChildByName("addresses");
211         assertNotNull(addresses_g);
212         TestUtils.checkIsAddedByUses(addresses_g, false);
213         assertFalse(addresses_u.equals(addresses_g));
214         assertEquals(addresses_g, SchemaNodeUtils.getRootOriginalIfPossible(addresses_u));
215
216         // grouping defined by 'uses'
217         Set<GroupingDefinition> groupings_u = destination.getGroupings();
218         assertEquals(1, groupings_u.size());
219         GroupingDefinition grouping_u = groupings_u.iterator().next();
220         TestUtils.checkIsAddedByUses(grouping_u, true);
221
222         // grouping defined in 'grouping' node
223         Set<GroupingDefinition> groupings_g = grouping.getGroupings();
224         assertEquals(1, groupings_g.size());
225         GroupingDefinition grouping_g = groupings_g.iterator().next();
226         TestUtils.checkIsAddedByUses(grouping_g, false);
227         assertFalse(grouping_u.equals(grouping_g));
228
229         List<UnknownSchemaNode> nodes_u = destination.getUnknownSchemaNodes();
230         assertEquals(1, nodes_u.size());
231         UnknownSchemaNode node_u = nodes_u.get(0);
232         assertTrue(node_u.isAddedByUses());
233
234         List<UnknownSchemaNode> nodes_g = grouping.getUnknownSchemaNodes();
235         assertEquals(1, nodes_g.size());
236         UnknownSchemaNode node_g = nodes_g.get(0);
237         assertFalse(node_g.isAddedByUses());
238         assertFalse(node_u.equals(node_g));
239     }
240
241     @Test
242     public void testUsesUnderModule() {
243         // suffix _u = added by uses
244         // suffix _g = defined in grouping
245
246         Module testModule = TestUtils.findModule(modules, "baz");
247
248         // get grouping
249         Set<GroupingDefinition> groupings = testModule.getGroupings();
250         assertEquals(1, groupings.size());
251         GroupingDefinition grouping = groupings.iterator().next();
252
253         // get node containing uses
254         Module foo = TestUtils.findModule(modules, "foo");
255
256         // check uses
257         Set<UsesNode> uses = foo.getUses();
258         assertEquals(1, uses.size());
259
260         // check uses process
261         AnyXmlSchemaNode data_u = (AnyXmlSchemaNode) foo.getDataChildByName("data");
262         assertNotNull(data_u);
263         assertTrue(data_u.isAddedByUses());
264
265         AnyXmlSchemaNode data_g = (AnyXmlSchemaNode) grouping.getDataChildByName("data");
266         assertNotNull(data_g);
267         assertFalse(data_g.isAddedByUses());
268         assertFalse(data_u.equals(data_g));
269         assertEquals(data_g, SchemaNodeUtils.getRootOriginalIfPossible(data_u));
270
271         ChoiceNode how_u = (ChoiceNode) foo.getDataChildByName("how");
272         assertNotNull(how_u);
273         TestUtils.checkIsAddedByUses(how_u, true);
274         assertFalse(how_u.isAugmenting());
275         Set<ChoiceCaseNode> cases_u = how_u.getCases();
276         assertEquals(2, cases_u.size());
277         ChoiceCaseNode interval = how_u.getCaseNodeByName("interval");
278         assertFalse(interval.isAugmenting());
279         LeafSchemaNode name = (LeafSchemaNode) interval.getDataChildByName("name");
280         assertTrue(name.isAugmenting());
281         LeafSchemaNode intervalLeaf = (LeafSchemaNode) interval.getDataChildByName("interval");
282         assertFalse(intervalLeaf.isAugmenting());
283
284         ChoiceNode how_g = (ChoiceNode) grouping.getDataChildByName("how");
285         assertNotNull(how_g);
286         TestUtils.checkIsAddedByUses(how_g, false);
287         assertFalse(how_u.equals(how_g));
288         assertEquals(how_g, SchemaNodeUtils.getRootOriginalIfPossible(how_u));
289
290         LeafSchemaNode address_u = (LeafSchemaNode) foo.getDataChildByName("address");
291         assertNotNull(address_u);
292         assertNull(address_u.getDefault());
293         assertEquals("Target IP address", address_u.getDescription());
294         assertNull(address_u.getReference());
295         assertTrue(address_u.isConfiguration());
296         assertTrue(address_u.isAddedByUses());
297
298         LeafSchemaNode address_g = (LeafSchemaNode) grouping.getDataChildByName("address");
299         assertNotNull(address_g);
300         assertFalse(address_g.isAddedByUses());
301         assertNull(address_g.getDefault());
302         assertEquals("Target IP address", address_g.getDescription());
303         assertNull(address_g.getReference());
304         assertTrue(address_g.isConfiguration());
305         assertFalse(address_u.equals(address_g));
306         assertEquals(address_g, SchemaNodeUtils.getRootOriginalIfPossible(address_u));
307
308         ContainerSchemaNode port_u = (ContainerSchemaNode) foo.getDataChildByName("port");
309         assertNotNull(port_u);
310         TestUtils.checkIsAddedByUses(port_u, true);
311
312         ContainerSchemaNode port_g = (ContainerSchemaNode) grouping.getDataChildByName("port");
313         assertNotNull(port_g);
314         TestUtils.checkIsAddedByUses(port_g, false);
315         assertFalse(port_u.equals(port_g));
316         assertEquals(port_g, SchemaNodeUtils.getRootOriginalIfPossible(port_u));
317
318         ListSchemaNode addresses_u = (ListSchemaNode) foo.getDataChildByName("addresses");
319         assertNotNull(addresses_u);
320         TestUtils.checkIsAddedByUses(addresses_u, true);
321
322         ListSchemaNode addresses_g = (ListSchemaNode) grouping.getDataChildByName("addresses");
323         assertNotNull(addresses_g);
324         TestUtils.checkIsAddedByUses(addresses_g, false);
325         assertFalse(addresses_u.equals(addresses_g));
326         assertEquals(addresses_g, SchemaNodeUtils.getRootOriginalIfPossible(addresses_u));
327
328         // grouping defined by 'uses'
329         Set<GroupingDefinition> groupings_u = foo.getGroupings();
330         assertEquals(1, groupings_u.size());
331         GroupingDefinition grouping_u = groupings_u.iterator().next();
332         TestUtils.checkIsAddedByUses(grouping_u, true);
333
334         // grouping defined in 'grouping' node
335         Set<GroupingDefinition> groupings_g = grouping.getGroupings();
336         assertEquals(1, groupings_g.size());
337         GroupingDefinition grouping_g = groupings_g.iterator().next();
338         TestUtils.checkIsAddedByUses(grouping_g, false);
339         assertFalse(grouping_u.equals(grouping_g));
340
341         List<UnknownSchemaNode> nodes_u = foo.getUnknownSchemaNodes();
342         assertEquals(1, nodes_u.size());
343         UnknownSchemaNode node_u = nodes_u.get(0);
344         assertTrue(node_u.isAddedByUses());
345
346         List<UnknownSchemaNode> nodes_g = grouping.getUnknownSchemaNodes();
347         assertEquals(1, nodes_g.size());
348         UnknownSchemaNode node_g = nodes_g.get(0);
349         assertFalse(node_g.isAddedByUses());
350         assertFalse(node_u.equals(node_g));
351
352         UsesNode un = uses.iterator().next();
353         Set<AugmentationSchema> usesAugments = un.getAugmentations();
354         assertEquals(1, usesAugments.size());
355         AugmentationSchema augment = usesAugments.iterator().next();
356         assertEquals("inner augment", augment.getDescription());
357         Collection<DataSchemaNode> children = augment.getChildNodes();
358         assertEquals(1, children.size());
359         DataSchemaNode leaf = children.iterator().next();
360         assertTrue(leaf instanceof LeafSchemaNode);
361         assertEquals("name", leaf.getQName().getLocalName());
362     }
363
364     @Test
365     public void testCascadeUses() throws Exception {
366         File yangFile = new File(getClass().getResource("/grouping-test/cascade-uses.yang").toURI());
367         YangContextParser parser = new YangParserImpl();
368         modules = parser.parseFiles(Collections.singleton(yangFile)).getModules();
369         assertEquals(1, modules.size());
370
371         Module testModule = TestUtils.findModule(modules, "cascade-uses");
372         Set<GroupingDefinition> groupings = testModule.getGroupings();
373
374         GroupingDefinition gu = null;
375         GroupingDefinition gv = null;
376         GroupingDefinition gx = null;
377         GroupingDefinition gy = null;
378         GroupingDefinition gz = null;
379         GroupingDefinition gzz = null;
380         for (GroupingDefinition gd : groupings) {
381             String name = gd.getQName().getLocalName();
382             switch (name) {
383             case "grouping-U":
384                 gu = gd;
385                 break;
386             case "grouping-V":
387                 gv = gd;
388                 break;
389             case "grouping-X":
390                 gx = gd;
391                 break;
392             case "grouping-Y":
393                 gy = gd;
394                 break;
395             case "grouping-Z":
396                 gz = gd;
397                 break;
398             case "grouping-ZZ":
399                 gzz = gd;
400                 break;
401             }
402         }
403         assertNotNull(gu);
404         assertNotNull(gv);
405         assertNotNull(gx);
406         assertNotNull(gy);
407         assertNotNull(gz);
408         assertNotNull(gzz);
409
410         URI expectedNS = URI.create("urn:grouping:cascade-uses");
411         Date expectedRev = new SimpleDateFormat("yyyy-MM-dd").parse("2013-07-18");
412         String expectedPref = "cu";
413         SchemaPath expectedPath;
414
415         // grouping-U
416         Collection<DataSchemaNode> childNodes = gu.getChildNodes();
417         assertEquals(7, childNodes.size());
418
419         LeafSchemaNode leafGroupingU = (LeafSchemaNode) gu.getDataChildByName("leaf-grouping-U");
420         assertNotNull(leafGroupingU);
421         assertFalse(leafGroupingU.isAddedByUses());
422         assertFalse(SchemaNodeUtils.getOriginalIfPossible(leafGroupingU).isPresent());
423
424         for (DataSchemaNode childNode : childNodes) {
425             if (!(childNode.getQName().equals(leafGroupingU.getQName()))) {
426                 TestUtils.checkIsAddedByUses(childNode, true);
427             }
428         }
429
430         // grouping-V
431         childNodes = gv.getChildNodes();
432         assertEquals(4, childNodes.size());
433         LeafSchemaNode leafGroupingV = null;
434         ContainerSchemaNode containerGroupingV = null;
435         for (DataSchemaNode childNode : childNodes) {
436             if ("leaf-grouping-V".equals(childNode.getQName().getLocalName())) {
437                 leafGroupingV = (LeafSchemaNode) childNode;
438             } else if ("container-grouping-V".equals(childNode.getQName().getLocalName())) {
439                 containerGroupingV = (ContainerSchemaNode) childNode;
440             } else {
441                 TestUtils.checkIsAddedByUses(childNode, true);
442             }
443         }
444         assertNotNull(leafGroupingV);
445         assertFalse(leafGroupingV.isAddedByUses());
446
447         // grouping-V/container-grouping-V
448         assertNotNull(containerGroupingV);
449         assertFalse(containerGroupingV.isAddedByUses());
450         expectedPath = TestUtils.createPath(true, expectedNS, expectedRev, expectedPref, "grouping-V",
451                 "container-grouping-V");
452         assertEquals(expectedPath, containerGroupingV.getPath());
453         childNodes = containerGroupingV.getChildNodes();
454         assertEquals(2, childNodes.size());
455         for (DataSchemaNode childNode : childNodes) {
456             TestUtils.checkIsAddedByUses(childNode, true);
457         }
458
459         // grouping-V/container-grouping-V/leaf-grouping-X
460         LeafSchemaNode leafXinContainerV = (LeafSchemaNode) containerGroupingV.getDataChildByName("leaf-grouping-X");
461         assertNotNull(leafXinContainerV);
462         expectedPath = TestUtils.createPath(true, expectedNS, expectedRev, expectedPref, "grouping-V",
463                 "container-grouping-V", "leaf-grouping-X");
464         assertEquals(expectedPath, leafXinContainerV.getPath());
465         // grouping-V/container-grouping-V/leaf-grouping-Y
466         LeafSchemaNode leafYinContainerV = (LeafSchemaNode) containerGroupingV.getDataChildByName("leaf-grouping-Y");
467         assertNotNull(leafYinContainerV);
468         expectedPath = TestUtils.createPath(true, expectedNS, expectedRev, expectedPref, "grouping-V",
469                 "container-grouping-V", "leaf-grouping-Y");
470         assertEquals(expectedPath, leafYinContainerV.getPath());
471
472         // grouping-X
473         childNodes = gx.getChildNodes();
474         assertEquals(2, childNodes.size());
475
476         // grouping-X/leaf-grouping-X
477         LeafSchemaNode leafXinGX = (LeafSchemaNode) gx.getDataChildByName("leaf-grouping-X");
478         assertNotNull(leafXinGX);
479         assertFalse(leafXinGX.isAddedByUses());
480         expectedPath = TestUtils.createPath(true, expectedNS, expectedRev, expectedPref, "grouping-X",
481                 "leaf-grouping-X");
482         assertEquals(expectedPath, leafXinGX.getPath());
483
484         // grouping-X/leaf-grouping-Y
485         LeafSchemaNode leafYinGX = (LeafSchemaNode) gx.getDataChildByName("leaf-grouping-Y");
486         assertNotNull(leafYinGX);
487         assertTrue(leafYinGX.isAddedByUses());
488         expectedPath = TestUtils.createPath(true, expectedNS, expectedRev, expectedPref, "grouping-X",
489                 "leaf-grouping-Y");
490         assertEquals(expectedPath, leafYinGX.getPath());
491
492         // grouping-Y
493         childNodes = gy.getChildNodes();
494         assertEquals(1, childNodes.size());
495
496         // grouping-Y/leaf-grouping-Y
497         LeafSchemaNode leafYinGY = (LeafSchemaNode) gy.getDataChildByName("leaf-grouping-Y");
498         assertNotNull(leafYinGY);
499         assertFalse(leafYinGY.isAddedByUses());
500         expectedPath = TestUtils.createPath(true, expectedNS, expectedRev, expectedPref, "grouping-Y",
501                 "leaf-grouping-Y");
502         assertEquals(expectedPath, leafYinGY.getPath());
503
504         // grouping-Z
505         childNodes = gz.getChildNodes();
506         assertEquals(1, childNodes.size());
507
508         // grouping-Z/leaf-grouping-Z
509         LeafSchemaNode leafZinGZ = (LeafSchemaNode) gz.getDataChildByName("leaf-grouping-Z");
510         assertNotNull(leafZinGZ);
511         assertFalse(leafZinGZ.isAddedByUses());
512         expectedPath = TestUtils.createPath(true, expectedNS, expectedRev, expectedPref, "grouping-Z",
513                 "leaf-grouping-Z");
514         assertEquals(expectedPath, leafZinGZ.getPath());
515
516         // grouping-ZZ
517         childNodes = gzz.getChildNodes();
518         assertEquals(1, childNodes.size());
519
520         // grouping-ZZ/leaf-grouping-ZZ
521         LeafSchemaNode leafZZinGZZ = (LeafSchemaNode) gzz.getDataChildByName("leaf-grouping-ZZ");
522         assertNotNull(leafZZinGZZ);
523         assertFalse(leafZZinGZZ.isAddedByUses());
524         expectedPath = TestUtils.createPath(true, expectedNS, expectedRev, expectedPref, "grouping-ZZ",
525                 "leaf-grouping-ZZ");
526         assertEquals(expectedPath, leafZZinGZZ.getPath());
527
528         // TEST getOriginal from grouping-U
529         assertEquals(gv.getDataChildByName("leaf-grouping-V"), SchemaNodeUtils.getRootOriginalIfPossible(gu.getDataChildByName("leaf-grouping-V")));
530         containerGroupingV = (ContainerSchemaNode) gu.getDataChildByName("container-grouping-V");
531         assertEquals(gv.getDataChildByName("container-grouping-V"), SchemaNodeUtils.getRootOriginalIfPossible(containerGroupingV));
532         assertEquals(gx.getDataChildByName("leaf-grouping-X"), SchemaNodeUtils.getRootOriginalIfPossible(containerGroupingV.getDataChildByName("leaf-grouping-X")
533                 ));
534         assertEquals(gy.getDataChildByName("leaf-grouping-Y"), SchemaNodeUtils.getRootOriginalIfPossible(containerGroupingV.getDataChildByName("leaf-grouping-Y")
535                 ));
536
537         assertEquals(gz.getDataChildByName("leaf-grouping-Z"), SchemaNodeUtils.getRootOriginalIfPossible(gu.getDataChildByName("leaf-grouping-Z")));
538         assertEquals(gzz.getDataChildByName("leaf-grouping-ZZ"), SchemaNodeUtils.getRootOriginalIfPossible(gu.getDataChildByName("leaf-grouping-ZZ")
539                 ));
540
541         // TEST getOriginal from grouping-V
542         assertEquals(gz.getDataChildByName("leaf-grouping-Z"), SchemaNodeUtils.getRootOriginalIfPossible(gv.getDataChildByName("leaf-grouping-Z")));
543         assertEquals(gzz.getDataChildByName("leaf-grouping-ZZ"), SchemaNodeUtils.getRootOriginalIfPossible(gv.getDataChildByName("leaf-grouping-ZZ")
544                 ));
545
546         // TEST getOriginal from grouping-X
547         assertEquals(gy.getDataChildByName("leaf-grouping-Y"),SchemaNodeUtils.getRootOriginalIfPossible( gx.getDataChildByName("leaf-grouping-Y")));
548     }
549
550     @Test
551     public void testAddedByUsesLeafTypeQName() throws IOException,
552             URISyntaxException {
553
554         Set<Module> loadModules = TestUtils.loadModules(getClass().getResource(
555                 "/added-by-uses-leaf-test").toURI());
556
557         assertEquals(2, loadModules.size());
558
559         Module foo = null;
560         Module imp = null;
561         for (Module module : loadModules) {
562             if (module.getName().equals("foo")) {
563                 foo = module;
564             }
565             if (module.getName().equals("import-module")) {
566                 imp = module;
567             }
568         }
569
570         LeafSchemaNode leaf = (LeafSchemaNode) ((ContainerSchemaNode) foo
571                 .getDataChildByName("my-container"))
572                 .getDataChildByName("my-leaf");
573
574         TypeDefinition impType = null;
575         Set<TypeDefinition<?>> typeDefinitions = imp.getTypeDefinitions();
576         for (TypeDefinition<?> typeDefinition : typeDefinitions) {
577             if (typeDefinition.getQName().getLocalName().equals("imp-type")) {
578                 impType = typeDefinition;
579                 break;
580             }
581         }
582
583         assertEquals(leaf.getType().getQName(), impType.getQName());
584
585     }
586
587 }