Replace calls of StmtTestUtils.parseYangSource(String) two
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / YT1208Test.java
1 /*
2  * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.stmt;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertNotSame;
13 import static org.junit.Assert.assertSame;
14
15 import java.util.List;
16 import java.util.stream.Collectors;
17 import org.junit.Test;
18 import org.opendaylight.yangtools.yang.common.QNameModule;
19 import org.opendaylight.yangtools.yang.common.XMLNamespace;
20 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentEffectiveStatement;
21 import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement;
22 import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceEffectiveStatement;
23 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
24 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement;
25 import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
26 import org.opendaylight.yangtools.yang.model.api.stmt.LeafListEffectiveStatement;
27 import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
28 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
29 import org.opendaylight.yangtools.yang.model.api.stmt.NotificationEffectiveStatement;
30 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
31 import org.opendaylight.yangtools.yang.model.api.stmt.UsesEffectiveStatement;
32
33 public class YT1208Test extends AbstractYangTest {
34     @Test
35     public void testAugmentStatementReuse() {
36         final ModuleEffectiveStatement module = assertEffectiveModel("/bugs/YT1208/augment.yang")
37             .getModuleStatement(QNameModule.create(XMLNamespace.of("foo")));
38
39         final NotificationEffectiveStatement notif = module
40             .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
41
42         final AugmentEffectiveStatement grpAug = notif
43             .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
44             .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
45             .findFirstEffectiveSubstatement(AugmentEffectiveStatement.class).orElseThrow();
46         final AugmentEffectiveStatement contAug = notif
47             .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
48             .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
49             .findFirstEffectiveSubstatement(AugmentEffectiveStatement.class).orElseThrow();
50
51         assertSame(contAug, grpAug);
52     }
53
54     @Test
55     public void testCaseStatementReuse() {
56         final ModuleEffectiveStatement module = assertEffectiveModel("/bugs/YT1208/case.yang")
57             .getModuleStatement(QNameModule.create(XMLNamespace.of("foo")));
58
59         final NotificationEffectiveStatement notif = module
60             .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
61
62         final CaseEffectiveStatement grpBar = notif
63             .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
64             .findFirstEffectiveSubstatement(ChoiceEffectiveStatement.class).orElseThrow()
65             .findFirstEffectiveSubstatement(CaseEffectiveStatement.class).orElseThrow();
66         final CaseEffectiveStatement contBar = notif
67             .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
68             .findFirstEffectiveSubstatement(ChoiceEffectiveStatement.class).orElseThrow()
69             .findFirstEffectiveSubstatement(CaseEffectiveStatement.class).orElseThrow();
70
71         assertSame(contBar, grpBar);
72     }
73
74     @Test
75     public void testChoiceStatementReuse() {
76         final ModuleEffectiveStatement module = assertEffectiveModel("/bugs/YT1208/choice.yang")
77             .getModuleStatement(QNameModule.create(XMLNamespace.of("foo")));
78
79         final NotificationEffectiveStatement notif = module
80             .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
81
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();
88
89         assertSame(contBar, grpBar);
90     }
91
92     @Test
93     public void testGroupingStatementReuse() {
94         final ModuleEffectiveStatement module = assertEffectiveModel("/bugs/YT1208/grouping.yang")
95             .getModuleStatement(QNameModule.create(XMLNamespace.of("foo")));
96
97         final NotificationEffectiveStatement notif = module
98             .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
99
100         final GroupingEffectiveStatement grpBar = notif
101             .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
102             .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
103             .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow();
104         final GroupingEffectiveStatement contBar = notif
105             .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
106             .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
107             .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow();
108
109         assertSame(contBar, grpBar);
110     }
111
112     @Test
113     public void testLeafStatementReuse() {
114         final ModuleEffectiveStatement module = assertEffectiveModel("/bugs/YT1208/leaf.yang")
115             .getModuleStatement(QNameModule.create(XMLNamespace.of("foo")));
116         assertNotNull(module);
117
118         final NotificationEffectiveStatement notif = module
119             .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
120
121         final LeafEffectiveStatement grpBar = notif
122             .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
123             .findFirstEffectiveSubstatement(LeafEffectiveStatement.class).orElseThrow();
124         final LeafEffectiveStatement contBar = notif
125             .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
126             .findFirstEffectiveSubstatement(LeafEffectiveStatement.class).orElseThrow();
127
128         assertSame(contBar, grpBar);
129     }
130
131     @Test
132     public void testLeafListStatementReuse() {
133         final ModuleEffectiveStatement module = assertEffectiveModel("/bugs/YT1208/leaflist.yang")
134             .getModuleStatement(QNameModule.create(XMLNamespace.of("foo")));
135
136         final NotificationEffectiveStatement notif = module
137             .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
138
139         final LeafListEffectiveStatement grpBar = notif
140             .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
141             .findFirstEffectiveSubstatement(LeafListEffectiveStatement.class).orElseThrow();
142         final LeafListEffectiveStatement contBar = notif
143             .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
144             .findFirstEffectiveSubstatement(LeafListEffectiveStatement.class).orElseThrow();
145
146         assertSame(contBar, grpBar);
147     }
148
149     @Test
150     public void testListStatementReuse() {
151         final ModuleEffectiveStatement module = assertEffectiveModel("/bugs/YT1208/list.yang")
152             .getModuleStatement(QNameModule.create(XMLNamespace.of("foo")));
153
154         final NotificationEffectiveStatement notif = module
155             .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
156
157         final ListEffectiveStatement grpBar = notif
158             .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
159             .findFirstEffectiveSubstatement(ListEffectiveStatement.class).orElseThrow();
160         final ListEffectiveStatement contBar = notif
161             .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
162             .findFirstEffectiveSubstatement(ListEffectiveStatement.class).orElseThrow();
163
164         assertSame(contBar, grpBar);
165     }
166
167     @Test
168     public void testTypedefStatementReuse() {
169         final ModuleEffectiveStatement module = assertEffectiveModel("/bugs/YT1208/typedef.yang")
170             .getModuleStatement(QNameModule.create(XMLNamespace.of("foo")));
171
172         final TypedefEffectiveStatement grpBar = module
173             .findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow()
174             .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
175             .findFirstEffectiveSubstatement(TypedefEffectiveStatement.class).orElseThrow();
176         final TypedefEffectiveStatement contBar = module
177             .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow()
178             .findFirstEffectiveSubstatement(TypedefEffectiveStatement.class).orElseThrow();
179
180         assertSame(contBar, grpBar);
181     }
182
183     @Test
184     public void testUsesStatementReuse() {
185         final ModuleEffectiveStatement module = assertEffectiveModel("/bugs/YT1208/uses.yang")
186             .getModuleStatement(QNameModule.create(XMLNamespace.of("foo")));
187         assertNotNull(module);
188         final List<GroupingEffectiveStatement> groupings = module
189             .streamEffectiveSubstatements(GroupingEffectiveStatement.class).collect(Collectors.toList());
190         assertEquals(2, groupings.size());
191         final ContainerEffectiveStatement grpFoo = groupings.get(1)
192             .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow();
193         final ContainerEffectiveStatement foo = module
194             .findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow();
195         assertNotSame(foo, grpFoo);
196         assertSame(foo.findFirstEffectiveSubstatement(UsesEffectiveStatement.class).orElseThrow(),
197             grpFoo.findFirstEffectiveSubstatement(UsesEffectiveStatement.class).orElseThrow());
198     }
199 }