d43f7b82c0ad51bd508546a02af800be6737f0ab
[yangtools.git] / yang / 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.assertNotNull;
11 import static org.junit.Assert.assertSame;
12
13 import java.net.URI;
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
27 public class YT1208Test {
28     @Test
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);
34
35         final NotificationEffectiveStatement notif = module
36             .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
37
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();
46
47         assertSame(contAug, grpAug);
48     }
49
50     @Test
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);
56
57         final NotificationEffectiveStatement notif = module
58             .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
59
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();
68
69         assertSame(contBar, grpBar);
70     }
71
72     @Test
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);
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() throws Exception {
94         final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1208/grouping.yang")
95             .getModuleStatements()
96             .get(QNameModule.create(URI.create("foo")));
97         assertNotNull(module);
98
99         final NotificationEffectiveStatement notif = module
100             .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
101
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();
110
111         assertSame(contBar, grpBar);
112     }
113
114     @Test
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);
120
121         final NotificationEffectiveStatement notif = module
122             .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
123
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();
130
131         assertSame(contBar, grpBar);
132     }
133
134     @Test
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);
140
141         final NotificationEffectiveStatement notif = module
142             .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
143
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();
150
151         assertSame(contBar, grpBar);
152     }
153
154     @Test
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);
160
161         final NotificationEffectiveStatement notif = module
162             .findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
163
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();
170
171         assertSame(contBar, grpBar);
172     }
173
174 }