2 * Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.yangtools.yang.stmt;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertTrue;
14 import java.util.Collection;
15 import java.util.Iterator;
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.stmt.UnrecognizedStatement;
24 public class Bug7037Test extends AbstractYangTest {
25 private static final String FOO_NS = "foo";
26 private static final String BAR_NS = "bar";
30 final var context = assertEffectiveModelDir("/bugs/bug7037");
32 final var unknownSchemaNodes = context.getModuleStatement(foo("foo")) .getDeclared()
33 .declaredSubstatements(UnrecognizedStatement.class);
34 assertEquals(1, unknownSchemaNodes.size());
36 final UnrecognizedStatement first = unknownSchemaNodes.iterator().next();
37 final Collection<? extends UnrecognizedStatement> firstUnknownNodes =
38 first.declaredSubstatements(UnrecognizedStatement.class);
39 assertEquals(1, firstUnknownNodes.size());
41 final UnrecognizedStatement barExtCont = firstUnknownNodes.iterator().next();
42 assertEquals(bar("container"), barExtCont.statementDefinition().getStatementName());
43 assertEquals("bar-ext-con", barExtCont.argument());
45 final DataSchemaNode root = context.getDataChildByName(foo("root"));
46 assertTrue(root instanceof ContainerSchemaNode);
48 final Collection<? extends UnrecognizedStatement> rootUnknownNodes =
49 ((ContainerSchemaNode) root).asEffectiveStatement().getDeclared()
50 .declaredSubstatements(UnrecognizedStatement.class);
51 assertEquals(2, rootUnknownNodes.size());
53 final Map<QName, UnrecognizedStatement> rootUnknownNodeMap = rootUnknownNodes.stream()
54 .collect(Collectors.toMap(u -> u.statementDefinition().getStatementName(), u -> u));
56 final UnrecognizedStatement barExt = rootUnknownNodeMap.get(bar("bar-ext"));
57 final Collection<? extends UnrecognizedStatement> barExtUnknownNodes =
58 barExt.declaredSubstatements(UnrecognizedStatement.class);
59 assertEquals(3, barExtUnknownNodes.size());
61 final Iterator<? extends UnrecognizedStatement> iterator = barExtUnknownNodes.iterator();
62 UnrecognizedStatement barExtCont2 = null;
63 while (iterator.hasNext()) {
64 final UnrecognizedStatement next = iterator.next();
65 if (bar("container").equals(next.statementDefinition().getStatementName())) {
70 assertNotNull(barExtCont2);
71 assertEquals("bar-ext-con-2", barExtCont2.argument());
73 final UnrecognizedStatement fooExt = rootUnknownNodeMap.get(foo("foo-ext"));
74 final Collection<? extends UnrecognizedStatement> fooUnknownNodes =
75 fooExt.declaredSubstatements(UnrecognizedStatement.class);
76 assertEquals(1, fooUnknownNodes.size());
78 final UnrecognizedStatement fooExtCont = fooUnknownNodes.iterator().next();
79 assertEquals(foo("container"), fooExtCont.statementDefinition().getStatementName());
80 assertEquals("foo-ext-con", fooExtCont.argument());
83 private static QName foo(final String localName) {
84 return QName.create(FOO_NS, localName);
87 private static QName bar(final String localName) {
88 return QName.create(BAR_NS, localName);