1b5a62d8a4462911bcf5d7984c011555d2b16d4d
[yangtools.git] / parser / 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.EffectiveModelContext;
23 import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement;
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 EffectiveModelContext context = StmtTestUtils.parseYangSources("/bugs/bug7037");
32         assertNotNull(context);
33
34         final Collection<? extends UnrecognizedStatement> unknownSchemaNodes = context.getModuleStatement(foo("foo"))
35             .getDeclared().declaredSubstatements(UnrecognizedStatement.class);
36         assertEquals(1, unknownSchemaNodes.size());
37
38         final UnrecognizedStatement first = unknownSchemaNodes.iterator().next();
39         final Collection<? extends UnrecognizedStatement> firstUnknownNodes =
40             first.declaredSubstatements(UnrecognizedStatement.class);
41         assertEquals(1, firstUnknownNodes.size());
42
43         final UnrecognizedStatement barExtCont = firstUnknownNodes.iterator().next();
44         assertEquals(bar("container"), barExtCont.statementDefinition().getStatementName());
45         assertEquals("bar-ext-con", barExtCont.argument());
46
47         final DataSchemaNode root = context.getDataChildByName(foo("root"));
48         assertTrue(root instanceof ContainerSchemaNode);
49
50         final Collection<? extends UnrecognizedStatement> rootUnknownNodes =
51             ((ContainerSchemaNode) root).asEffectiveStatement().getDeclared()
52             .declaredSubstatements(UnrecognizedStatement.class);
53         assertEquals(2, rootUnknownNodes.size());
54
55         final Map<QName, UnrecognizedStatement> rootUnknownNodeMap = rootUnknownNodes.stream()
56                 .collect(Collectors.toMap(u -> u.statementDefinition().getStatementName(), u -> u));
57
58         final UnrecognizedStatement barExt = rootUnknownNodeMap.get(bar("bar-ext"));
59         final Collection<? extends UnrecognizedStatement> barExtUnknownNodes =
60             barExt.declaredSubstatements(UnrecognizedStatement.class);
61         assertEquals(3, barExtUnknownNodes.size());
62
63         final Iterator<? extends UnrecognizedStatement> iterator = barExtUnknownNodes.iterator();
64         UnrecognizedStatement barExtCont2 = null;
65         while (iterator.hasNext()) {
66             final UnrecognizedStatement next = iterator.next();
67             if (bar("container").equals(next.statementDefinition().getStatementName())) {
68                 barExtCont2 = next;
69                 break;
70             }
71         }
72         assertNotNull(barExtCont2);
73         assertEquals("bar-ext-con-2", barExtCont2.argument());
74
75         final UnrecognizedStatement fooExt = rootUnknownNodeMap.get(foo("foo-ext"));
76         final Collection<? extends UnrecognizedStatement> fooUnknownNodes =
77             fooExt.declaredSubstatements(UnrecognizedStatement.class);
78         assertEquals(1, fooUnknownNodes.size());
79
80         final UnrecognizedStatement fooExtCont = fooUnknownNodes.iterator().next();
81         assertEquals(foo("container"), fooExtCont.statementDefinition().getStatementName());
82         assertEquals("foo-ext-con", fooExtCont.argument());
83     }
84
85     private static QName foo(final String localName) {
86         return QName.create(FOO_NS, localName);
87     }
88
89     private static QName bar(final String localName) {
90         return QName.create(BAR_NS, localName);
91     }
92 }