2 * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.assertNotNull;
11 import static org.junit.Assert.assertSame;
14 import org.junit.Test;
15 import org.opendaylight.yangtools.yang.common.QNameModule;
16 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentEffectiveStatement;
17 import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement;
18 import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceEffectiveStatement;
19 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
20 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement;
21 import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
22 import org.opendaylight.yangtools.yang.model.api.stmt.LeafListEffectiveStatement;
23 import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
24 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
25 import org.opendaylight.yangtools.yang.model.api.stmt.NotificationEffectiveStatement;
26 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
28 public class YT1208Test {
30 public void testAugmentStatementReuse() throws Exception {
31 final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1208/augment.yang")
32 .getModuleStatements()
33 .get(QNameModule.create(URI.create("foo")));
34 assertNotNull(module);
36 final NotificationEffectiveStatement notif = module
37 .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
39 final AugmentEffectiveStatement grpAug = notif
40 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
41 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
42 .findFirstEffectiveSubstatement(AugmentEffectiveStatement.class).orElseThrow();
43 final AugmentEffectiveStatement contAug = notif
44 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
45 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
46 .findFirstEffectiveSubstatement(AugmentEffectiveStatement.class).orElseThrow();
48 assertSame(contAug, grpAug);
52 public void testCaseStatementReuse() throws Exception {
53 final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1208/case.yang")
54 .getModuleStatements()
55 .get(QNameModule.create(URI.create("foo")));
56 assertNotNull(module);
58 final NotificationEffectiveStatement notif = module
59 .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
61 final CaseEffectiveStatement grpBar = notif
62 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
63 .findFirstEffectiveSubstatement(ChoiceEffectiveStatement.class).orElseThrow()
64 .findFirstEffectiveSubstatement(CaseEffectiveStatement.class).orElseThrow();
65 final CaseEffectiveStatement contBar = notif
66 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
67 .findFirstEffectiveSubstatement(ChoiceEffectiveStatement.class).orElseThrow()
68 .findFirstEffectiveSubstatement(CaseEffectiveStatement.class).orElseThrow();
70 assertSame(contBar, grpBar);
74 public void testChoiceStatementReuse() throws Exception {
75 final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1208/choice.yang")
76 .getModuleStatements()
77 .get(QNameModule.create(URI.create("foo")));
78 assertNotNull(module);
80 final NotificationEffectiveStatement notif = module
81 .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
83 final ChoiceEffectiveStatement grpBar = notif
84 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
85 .findFirstEffectiveSubstatement(ChoiceEffectiveStatement.class).orElseThrow();
86 final ChoiceEffectiveStatement contBar = notif
87 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
88 .findFirstEffectiveSubstatement(ChoiceEffectiveStatement.class).orElseThrow();
90 assertSame(contBar, grpBar);
94 public void testGroupingStatementReuse() throws Exception {
95 final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1208/grouping.yang")
96 .getModuleStatements()
97 .get(QNameModule.create(URI.create("foo")));
98 assertNotNull(module);
100 final NotificationEffectiveStatement notif = module
101 .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
103 final GroupingEffectiveStatement grpBar = notif
104 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
105 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
106 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow();
107 final GroupingEffectiveStatement contBar = notif
108 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
109 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
110 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow();
112 assertSame(contBar, grpBar);
116 public void testLeafStatementReuse() throws Exception {
117 final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1208/leaf.yang")
118 .getModuleStatements()
119 .get(QNameModule.create(URI.create("foo")));
120 assertNotNull(module);
122 final NotificationEffectiveStatement notif = module
123 .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
125 final LeafEffectiveStatement grpBar = notif
126 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
127 .findFirstEffectiveSubstatement(LeafEffectiveStatement.class).orElseThrow();
128 final LeafEffectiveStatement contBar = notif
129 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
130 .findFirstEffectiveSubstatement(LeafEffectiveStatement.class).orElseThrow();
132 assertSame(contBar, grpBar);
136 public void testLeafListStatementReuse() throws Exception {
137 final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1208/leaflist.yang")
138 .getModuleStatements()
139 .get(QNameModule.create(URI.create("foo")));
140 assertNotNull(module);
142 final NotificationEffectiveStatement notif = module
143 .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
145 final LeafListEffectiveStatement grpBar = notif
146 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
147 .findFirstEffectiveSubstatement(LeafListEffectiveStatement.class).orElseThrow();
148 final LeafListEffectiveStatement contBar = notif
149 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
150 .findFirstEffectiveSubstatement(LeafListEffectiveStatement.class).orElseThrow();
152 assertSame(contBar, grpBar);
156 public void testListStatementReuse() throws Exception {
157 final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1208/list.yang")
158 .getModuleStatements()
159 .get(QNameModule.create(URI.create("foo")));
160 assertNotNull(module);
162 final NotificationEffectiveStatement notif = module
163 .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
165 final ListEffectiveStatement grpBar = notif
166 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
167 .findFirstEffectiveSubstatement(ListEffectiveStatement.class).orElseThrow();
168 final ListEffectiveStatement contBar = notif
169 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
170 .findFirstEffectiveSubstatement(ListEffectiveStatement.class).orElseThrow();
172 assertSame(contBar, grpBar);
176 public void testTypedefStatementReuse() throws Exception {
177 final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1208/typedef.yang")
178 .getModuleStatements()
179 .get(QNameModule.create(URI.create("foo")));
180 assertNotNull(module);
182 final TypedefEffectiveStatement grpBar = module
183 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
184 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
185 .findFirstEffectiveSubstatement(TypedefEffectiveStatement.class).orElseThrow();
186 final TypedefEffectiveStatement contBar = module
187 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
188 .findFirstEffectiveSubstatement(TypedefEffectiveStatement.class).orElseThrow();
190 assertSame(contBar, grpBar);