56293beea09a69a29232bae83529a5ee52cb7e17
[yangtools.git] / yang / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / Bug7037Test.java
1 /*
2  * Copyright (c) 2017 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.stmt;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertTrue;
13
14 import java.util.Collection;
15 import java.util.Iterator;
16 import java.util.Map;
17 import java.util.stream.Collectors;
18 import org.junit.Test;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
23 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
24
25 public class Bug7037Test {
26     private static final String FOO_NS = "foo";
27     private static final String BAR_NS = "bar";
28
29     @Test
30     public void test() throws Exception {
31         final SchemaContext context = StmtTestUtils.parseYangSources("/bugs/bug7037");
32         assertNotNull(context);
33
34         final Collection<? extends UnknownSchemaNode> unknownSchemaNodes = context.getUnknownSchemaNodes();
35         assertEquals(1, unknownSchemaNodes.size());
36
37         final UnknownSchemaNode first = unknownSchemaNodes.iterator().next();
38         final Collection<? extends UnknownSchemaNode> firstUnknownNodes = first.getUnknownSchemaNodes();
39         assertEquals(1, firstUnknownNodes.size());
40
41         final UnknownSchemaNode barExtCont = firstUnknownNodes.iterator().next();
42         assertEquals(bar("container"), barExtCont.getNodeType());
43         assertEquals(foo("bar-ext-con"), barExtCont.getQName());
44
45         final DataSchemaNode root = context.getDataChildByName(foo("root"));
46         assertTrue(root instanceof ContainerSchemaNode);
47
48         final Collection<? extends UnknownSchemaNode> rootUnknownNodes = root.getUnknownSchemaNodes();
49         assertEquals(2, rootUnknownNodes.size());
50
51         final Map<QName, UnknownSchemaNode> rootUnknownNodeMap = rootUnknownNodes.stream()
52                 .collect(Collectors.toMap(u -> u.getNodeType(), u -> u));
53
54         final UnknownSchemaNode barExt = rootUnknownNodeMap.get(bar("bar-ext"));
55         final Collection<? extends UnknownSchemaNode> barExtUnknownNodes = barExt.getUnknownSchemaNodes();
56         assertEquals(3, barExtUnknownNodes.size());
57
58         final Iterator<? extends UnknownSchemaNode> iterator = barExtUnknownNodes.iterator();
59         UnknownSchemaNode barExtCont2 = null;
60         while (iterator.hasNext()) {
61             final UnknownSchemaNode next = iterator.next();
62             if (bar("container").equals(next.getNodeType())) {
63                 barExtCont2 = next;
64                 break;
65             }
66         }
67         assertNotNull(barExtCont2);
68         assertEquals(foo("bar-ext-con-2"), barExtCont2.getQName());
69
70         final UnknownSchemaNode fooExt = rootUnknownNodeMap.get(foo("foo-ext"));
71         final Collection<? extends UnknownSchemaNode> fooUnknownNodes = fooExt.getUnknownSchemaNodes();
72         assertEquals(1, fooUnknownNodes.size());
73
74         final UnknownSchemaNode fooExtCont = fooUnknownNodes.iterator().next();
75         assertEquals(foo("container"), fooExtCont.getNodeType());
76         assertEquals(foo("foo-ext-con"), fooExtCont.getQName());
77     }
78
79     private static QName foo(final String localName) {
80         return QName.create(FOO_NS, localName);
81     }
82
83     private static QName bar(final String localName) {
84         return QName.create(BAR_NS, localName);
85     }
86 }