Deprecate simple DataTreeFactory.create()
[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.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
12 import static org.junit.jupiter.api.Assertions.assertNotNull;
13
14 import java.util.Collection;
15 import java.util.Map;
16 import java.util.stream.Collectors;
17 import org.junit.jupiter.api.Test;
18 import org.opendaylight.yangtools.yang.common.QName;
19 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
20 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement;
22
23 class Bug7037Test extends AbstractYangTest {
24     private static final String FOO_NS = "foo";
25     private static final String BAR_NS = "bar";
26
27     @Test
28     void test() {
29         final var context = assertEffectiveModelDir("/bugs/bug7037");
30
31         final var unknownSchemaNodes = context.getModuleStatement(foo("foo")) .getDeclared()
32             .declaredSubstatements(UnrecognizedStatement.class);
33         assertEquals(1, unknownSchemaNodes.size());
34
35         final UnrecognizedStatement first = unknownSchemaNodes.iterator().next();
36         final Collection<? extends UnrecognizedStatement> firstUnknownNodes =
37             first.declaredSubstatements(UnrecognizedStatement.class);
38         assertEquals(1, firstUnknownNodes.size());
39
40         final UnrecognizedStatement barExtCont = firstUnknownNodes.iterator().next();
41         assertEquals(bar("container"), barExtCont.statementDefinition().getStatementName());
42         assertEquals("bar-ext-con", barExtCont.argument());
43
44         final DataSchemaNode root = context.getDataChildByName(foo("root"));
45
46         final Collection<? extends UnrecognizedStatement> rootUnknownNodes =
47             assertInstanceOf(ContainerSchemaNode.class, root).asEffectiveStatement().getDeclared()
48                 .declaredSubstatements(UnrecognizedStatement.class);
49         assertEquals(2, rootUnknownNodes.size());
50
51         final Map<QName, UnrecognizedStatement> rootUnknownNodeMap = rootUnknownNodes.stream()
52             .collect(Collectors.toMap(u -> u.statementDefinition().getStatementName(), u -> u));
53
54         final UnrecognizedStatement barExt = rootUnknownNodeMap.get(bar("bar-ext"));
55         final Collection<? extends UnrecognizedStatement> barExtUnknownNodes =
56             barExt.declaredSubstatements(UnrecognizedStatement.class);
57         assertEquals(3, barExtUnknownNodes.size());
58
59         UnrecognizedStatement barExtCont2 = null;
60         for (UnrecognizedStatement next : barExtUnknownNodes) {
61             if (bar("container").equals(next.statementDefinition().getStatementName())) {
62                 barExtCont2 = next;
63                 break;
64             }
65         }
66         assertNotNull(barExtCont2);
67         assertEquals("bar-ext-con-2", barExtCont2.argument());
68
69         final UnrecognizedStatement fooExt = rootUnknownNodeMap.get(foo("foo-ext"));
70         final Collection<? extends UnrecognizedStatement> fooUnknownNodes =
71             fooExt.declaredSubstatements(UnrecognizedStatement.class);
72         assertEquals(1, fooUnknownNodes.size());
73
74         final UnrecognizedStatement fooExtCont = fooUnknownNodes.iterator().next();
75         assertEquals(foo("container"), fooExtCont.statementDefinition().getStatementName());
76         assertEquals("foo-ext-con", fooExtCont.argument());
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 }