Deprecate simple DataTreeFactory.create()
[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.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;
14
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;
28
29 class YT1208Test extends AbstractYangTest {
30     @Test
31     void testAugmentStatementReuse() {
32         final var module = assertEffectiveModel("/bugs/YT1208/augment.yang").getModuleStatement(QNameModule.of("foo"));
33
34         final var notif = module.findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
35
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();
44
45         assertSame(contAug, grpAug);
46     }
47
48     @Test
49     void testCaseStatementReuse() {
50         final var module = assertEffectiveModel("/bugs/YT1208/case.yang").getModuleStatement(QNameModule.of("foo"));
51
52         final var notif = module.findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
53
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();
62
63         assertSame(contBar, grpBar);
64     }
65
66     @Test
67     void testChoiceStatementReuse() {
68         final var module = assertEffectiveModel("/bugs/YT1208/choice.yang").getModuleStatement(QNameModule.of("foo"));
69
70         final var notif = module.findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
71
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();
78
79         assertSame(contBar, grpBar);
80     }
81
82     @Test
83     void testGroupingStatementReuse() {
84         final var module = assertEffectiveModel("/bugs/YT1208/grouping.yang").getModuleStatement(QNameModule.of("foo"));
85
86         final var notif = module.findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
87
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();
96
97         assertSame(contBar, grpBar);
98     }
99
100     @Test
101     void testLeafStatementReuse() {
102         final var module = assertEffectiveModel("/bugs/YT1208/leaf.yang").getModuleStatement(QNameModule.of("foo"));
103         assertNotNull(module);
104
105         final var notif = module.findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
106
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();
113
114         assertSame(contBar, grpBar);
115     }
116
117     @Test
118     void testLeafListStatementReuse() {
119         final var module = assertEffectiveModel("/bugs/YT1208/leaflist.yang").getModuleStatement(QNameModule.of("foo"));
120
121         final var notif = module.findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
122
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();
129
130         assertSame(contBar, grpBar);
131     }
132
133     @Test
134     void testListStatementReuse() {
135         final var module = assertEffectiveModel("/bugs/YT1208/list.yang").getModuleStatement(QNameModule.of("foo"));
136
137         final var notif = module.findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
138
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();
145
146         assertSame(contBar, grpBar);
147     }
148
149     @Test
150     void testTypedefStatementReuse() {
151         final var module = assertEffectiveModel("/bugs/YT1208/typedef.yang").getModuleStatement(QNameModule.of("foo"));
152
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();
160
161         assertSame(contBar, grpBar);
162     }
163
164     @Test
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());
177     }
178 }