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.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertNotNull;
12 import static org.junit.jupiter.api.Assertions.assertNotSame;
13 import static org.junit.jupiter.api.Assertions.assertSame;
15 import org.junit.jupiter.api.Test;
16 import org.opendaylight.yangtools.yang.common.QNameModule;
17 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentEffectiveStatement;
18 import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement;
19 import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceEffectiveStatement;
20 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
21 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement;
22 import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
23 import org.opendaylight.yangtools.yang.model.api.stmt.LeafListEffectiveStatement;
24 import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
25 import org.opendaylight.yangtools.yang.model.api.stmt.NotificationEffectiveStatement;
26 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
27 import org.opendaylight.yangtools.yang.model.api.stmt.UsesEffectiveStatement;
29 class YT1208Test extends AbstractYangTest {
31 void testAugmentStatementReuse() {
32 final var module = assertEffectiveModel("/bugs/YT1208/augment.yang").getModuleStatement(QNameModule.of("foo"));
34 final var notif = module.findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
36 final AugmentEffectiveStatement grpAug = notif
37 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
38 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
39 .findFirstEffectiveSubstatement(AugmentEffectiveStatement.class).orElseThrow();
40 final AugmentEffectiveStatement contAug = notif
41 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
42 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
43 .findFirstEffectiveSubstatement(AugmentEffectiveStatement.class).orElseThrow();
45 assertSame(contAug, grpAug);
49 void testCaseStatementReuse() {
50 final var module = assertEffectiveModel("/bugs/YT1208/case.yang").getModuleStatement(QNameModule.of("foo"));
52 final var notif = module.findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
54 final CaseEffectiveStatement grpBar = notif
55 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
56 .findFirstEffectiveSubstatement(ChoiceEffectiveStatement.class).orElseThrow()
57 .findFirstEffectiveSubstatement(CaseEffectiveStatement.class).orElseThrow();
58 final CaseEffectiveStatement contBar = notif
59 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
60 .findFirstEffectiveSubstatement(ChoiceEffectiveStatement.class).orElseThrow()
61 .findFirstEffectiveSubstatement(CaseEffectiveStatement.class).orElseThrow();
63 assertSame(contBar, grpBar);
67 void testChoiceStatementReuse() {
68 final var module = assertEffectiveModel("/bugs/YT1208/choice.yang").getModuleStatement(QNameModule.of("foo"));
70 final var notif = module.findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
72 final ChoiceEffectiveStatement grpBar = notif
73 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
74 .findFirstEffectiveSubstatement(ChoiceEffectiveStatement.class).orElseThrow();
75 final ChoiceEffectiveStatement contBar = notif
76 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
77 .findFirstEffectiveSubstatement(ChoiceEffectiveStatement.class).orElseThrow();
79 assertSame(contBar, grpBar);
83 void testGroupingStatementReuse() {
84 final var module = assertEffectiveModel("/bugs/YT1208/grouping.yang").getModuleStatement(QNameModule.of("foo"));
86 final var notif = module.findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
88 final GroupingEffectiveStatement grpBar = notif
89 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
90 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
91 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow();
92 final GroupingEffectiveStatement contBar = notif
93 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
94 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
95 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow();
97 assertSame(contBar, grpBar);
101 void testLeafStatementReuse() {
102 final var module = assertEffectiveModel("/bugs/YT1208/leaf.yang").getModuleStatement(QNameModule.of("foo"));
103 assertNotNull(module);
105 final var notif = module.findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
107 final LeafEffectiveStatement grpBar = notif
108 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
109 .findFirstEffectiveSubstatement(LeafEffectiveStatement.class).orElseThrow();
110 final LeafEffectiveStatement contBar = notif
111 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
112 .findFirstEffectiveSubstatement(LeafEffectiveStatement.class).orElseThrow();
114 assertSame(contBar, grpBar);
118 void testLeafListStatementReuse() {
119 final var module = assertEffectiveModel("/bugs/YT1208/leaflist.yang").getModuleStatement(QNameModule.of("foo"));
121 final var notif = module.findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
123 final LeafListEffectiveStatement grpBar = notif
124 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
125 .findFirstEffectiveSubstatement(LeafListEffectiveStatement.class).orElseThrow();
126 final LeafListEffectiveStatement contBar = notif
127 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
128 .findFirstEffectiveSubstatement(LeafListEffectiveStatement.class).orElseThrow();
130 assertSame(contBar, grpBar);
134 void testListStatementReuse() {
135 final var module = assertEffectiveModel("/bugs/YT1208/list.yang").getModuleStatement(QNameModule.of("foo"));
137 final var notif = module.findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
139 final ListEffectiveStatement grpBar = notif
140 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
141 .findFirstEffectiveSubstatement(ListEffectiveStatement.class).orElseThrow();
142 final ListEffectiveStatement contBar = notif
143 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
144 .findFirstEffectiveSubstatement(ListEffectiveStatement.class).orElseThrow();
146 assertSame(contBar, grpBar);
150 void testTypedefStatementReuse() {
151 final var module = assertEffectiveModel("/bugs/YT1208/typedef.yang").getModuleStatement(QNameModule.of("foo"));
153 final TypedefEffectiveStatement grpBar = module
154 .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
155 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
156 .findFirstEffectiveSubstatement(TypedefEffectiveStatement.class).orElseThrow();
157 final TypedefEffectiveStatement contBar = module
158 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
159 .findFirstEffectiveSubstatement(TypedefEffectiveStatement.class).orElseThrow();
161 assertSame(contBar, grpBar);
165 void testUsesStatementReuse() {
166 final var module = assertEffectiveModel("/bugs/YT1208/uses.yang").getModuleStatement(QNameModule.of("foo"));
167 assertNotNull(module);
168 final var groupings = module.streamEffectiveSubstatements(GroupingEffectiveStatement.class).toList();
169 assertEquals(2, groupings.size());
170 final ContainerEffectiveStatement grpFoo = groupings.get(1)
171 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow();
172 final ContainerEffectiveStatement foo = module
173 .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow();
174 assertNotSame(foo, grpFoo);
175 assertSame(foo.findFirstEffectiveSubstatement(UsesEffectiveStatement.class).orElseThrow(),
176 grpFoo.findFirstEffectiveSubstatement(UsesEffectiveStatement.class).orElseThrow());