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.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertTrue;
15 import org.junit.Test;
16 import org.opendaylight.yangtools.yang.common.QName;
17 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
18 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
19 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
20 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
21 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
25 public class Bug6183Test {
26 private static final String FOO_NS = "foo";
29 public void testYang10() throws Exception {
30 assertSchemaContext(StmtTestUtils.parseYangSources("/bugs/bug6183/yang10"));
34 public void testYang11() throws Exception {
35 assertSchemaContext(StmtTestUtils.parseYangSources("/bugs/bug6183/yang11"));
38 public void assertSchemaContext(final SchemaContext context) throws Exception {
39 assertNotNull(context);
40 assertEquals(3, context.getChildNodes().size());
41 assertEquals(1, context.getModules().size());
42 assertEquals(4, context.getModules().iterator().next().getAugmentations().size());
44 assertTrue(context.getDataChildByName(foo("before")) instanceof ContainerSchemaNode);
45 assertTrue(context.getDataChildByName(foo("after")) instanceof ContainerSchemaNode);
47 final DataSchemaNode dataChildByName = context.getDataChildByName(foo("my-choice"));
48 assertTrue(dataChildByName instanceof ChoiceSchemaNode);
49 final ChoiceSchemaNode myChoice = (ChoiceSchemaNode) dataChildByName;
51 assertEquals(4, myChoice.getCases().size());
53 final CaseSchemaNode implCase = myChoice.findCase(foo("implicit-case-container")).get();
54 final CaseSchemaNode declCaseOne = myChoice.findCase(foo("declared-case-one")).get();
55 final CaseSchemaNode secondImplCase = myChoice.findCase(foo("second-implicit-case-container")).get();
56 final CaseSchemaNode declCaseTwo = myChoice.findCase(foo("declared-case-two")).get();
58 assertEquals(1, declCaseOne.getChildNodes().size());
59 assertFalse(getLeafSchemaNode(declCaseOne, "leaf-in-declare-case-one").isAugmenting());
60 assertEquals(1, declCaseTwo.getChildNodes().size());
61 assertFalse(getLeafSchemaNode(declCaseTwo, "leaf-in-declare-case-two").isAugmenting());
63 assertEquals(2, implCase.getChildNodes().size());
64 assertTrue(getLeafSchemaNode(implCase, "leaf-after-container").isAugmenting());
65 final ContainerSchemaNode implCaseContainer = getContainerSchemaNode(implCase, "implicit-case-container");
67 assertEquals(3, implCaseContainer.getChildNodes().size());
68 assertTrue(getLeafSchemaNode(implCaseContainer, "leaf-inside-container").isAugmenting());
69 assertFalse(getLeafSchemaNode(implCaseContainer, "declared-leaf-in-case-container").isAugmenting());
70 final ContainerSchemaNode declContInCaseCont = getContainerSchemaNode(implCaseContainer,
71 "declared-container-in-case-container");
73 assertEquals(1, declContInCaseCont.getChildNodes().size());
74 assertFalse(getLeafSchemaNode(declContInCaseCont, "declared-leaf").isAugmenting());
76 assertEquals(2, secondImplCase.getChildNodes().size());
77 assertTrue(getLeafSchemaNode(secondImplCase, "leaf-after-second-container").isAugmenting());
78 final ContainerSchemaNode secondImplCaseContainer = getContainerSchemaNode(secondImplCase,
79 "second-implicit-case-container");
81 assertEquals(2, secondImplCaseContainer.getChildNodes().size());
82 assertTrue(getLeafSchemaNode(secondImplCaseContainer, "leaf-inside-second-container").isAugmenting());
83 assertFalse(getLeafSchemaNode(secondImplCaseContainer, "declared-leaf-in-second-case-container")
87 private static ContainerSchemaNode getContainerSchemaNode(final DataNodeContainer parent,
88 final String containerName) {
89 final DataSchemaNode dataChildByName = parent.getDataChildByName(foo(containerName));
90 assertTrue(dataChildByName instanceof ContainerSchemaNode);
91 return (ContainerSchemaNode) dataChildByName;
94 private static LeafSchemaNode getLeafSchemaNode(final DataNodeContainer parent, final String leafName) {
95 final DataSchemaNode dataChildByName = parent.getDataChildByName(foo(leafName));
96 assertTrue(dataChildByName instanceof LeafSchemaNode);
97 return (LeafSchemaNode) dataChildByName;
100 private static QName foo(final String localName) {
101 return QName.create(FOO_NS, localName);