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;
27 public class YT1208Test {
29 public void testAugmentStatementReuse() throws Exception {
30 final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1208/augment.yang")
31 .getModuleStatements()
32 .get(QNameModule.create(URI.create("foo")));
33 assertNotNull(module);
35 final NotificationEffectiveStatement notif = module
36 .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
38 final AugmentEffectiveStatement grpAug = notif
39 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
40 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
41 .findFirstEffectiveSubstatement(AugmentEffectiveStatement.class).orElseThrow();
42 final AugmentEffectiveStatement contAug = notif
43 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
44 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
45 .findFirstEffectiveSubstatement(AugmentEffectiveStatement.class).orElseThrow();
47 assertSame(contAug, grpAug);
51 public void testCaseStatementReuse() throws Exception {
52 final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1208/case.yang")
53 .getModuleStatements()
54 .get(QNameModule.create(URI.create("foo")));
55 assertNotNull(module);
57 final NotificationEffectiveStatement notif = module
58 .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
60 final CaseEffectiveStatement grpBar = notif
61 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
62 .findFirstEffectiveSubstatement(ChoiceEffectiveStatement.class).orElseThrow()
63 .findFirstEffectiveSubstatement(CaseEffectiveStatement.class).orElseThrow();
64 final CaseEffectiveStatement contBar = notif
65 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
66 .findFirstEffectiveSubstatement(ChoiceEffectiveStatement.class).orElseThrow()
67 .findFirstEffectiveSubstatement(CaseEffectiveStatement.class).orElseThrow();
69 assertSame(contBar, grpBar);
73 public void testChoiceStatementReuse() throws Exception {
74 final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1208/choice.yang")
75 .getModuleStatements()
76 .get(QNameModule.create(URI.create("foo")));
77 assertNotNull(module);
79 final NotificationEffectiveStatement notif = module
80 .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
82 final ChoiceEffectiveStatement grpBar = notif
83 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
84 .findFirstEffectiveSubstatement(ChoiceEffectiveStatement.class).orElseThrow();
85 final ChoiceEffectiveStatement contBar = notif
86 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
87 .findFirstEffectiveSubstatement(ChoiceEffectiveStatement.class).orElseThrow();
89 assertSame(contBar, grpBar);
93 public void testGroupingStatementReuse() throws Exception {
94 final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1208/grouping.yang")
95 .getModuleStatements()
96 .get(QNameModule.create(URI.create("foo")));
97 assertNotNull(module);
99 final NotificationEffectiveStatement notif = module
100 .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
102 final GroupingEffectiveStatement grpBar = notif
103 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
104 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
105 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow();
106 final GroupingEffectiveStatement contBar = notif
107 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
108 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
109 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow();
111 assertSame(contBar, grpBar);
115 public void testLeafStatementReuse() throws Exception {
116 final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1208/leaf.yang")
117 .getModuleStatements()
118 .get(QNameModule.create(URI.create("foo")));
119 assertNotNull(module);
121 final NotificationEffectiveStatement notif = module
122 .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
124 final LeafEffectiveStatement grpBar = notif
125 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
126 .findFirstEffectiveSubstatement(LeafEffectiveStatement.class).orElseThrow();
127 final LeafEffectiveStatement contBar = notif
128 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
129 .findFirstEffectiveSubstatement(LeafEffectiveStatement.class).orElseThrow();
131 assertSame(contBar, grpBar);
135 public void testLeafListStatementReuse() throws Exception {
136 final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1208/leaflist.yang")
137 .getModuleStatements()
138 .get(QNameModule.create(URI.create("foo")));
139 assertNotNull(module);
141 final NotificationEffectiveStatement notif = module
142 .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
144 final LeafListEffectiveStatement grpBar = notif
145 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
146 .findFirstEffectiveSubstatement(LeafListEffectiveStatement.class).orElseThrow();
147 final LeafListEffectiveStatement contBar = notif
148 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
149 .findFirstEffectiveSubstatement(LeafListEffectiveStatement.class).orElseThrow();
151 assertSame(contBar, grpBar);
155 public void testListStatementReuse() throws Exception {
156 final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1208/list.yang")
157 .getModuleStatements()
158 .get(QNameModule.create(URI.create("foo")));
159 assertNotNull(module);
161 final NotificationEffectiveStatement notif = module
162 .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
164 final ListEffectiveStatement grpBar = notif
165 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
166 .findFirstEffectiveSubstatement(ListEffectiveStatement.class).orElseThrow();
167 final ListEffectiveStatement contBar = notif
168 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
169 .findFirstEffectiveSubstatement(ListEffectiveStatement.class).orElseThrow();
171 assertSame(contBar, grpBar);