2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2024 Ericsson
4 * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
21 package org.oran.smo.yangtools.parser.model.statements.yang.test;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertTrue;
27 import java.math.BigDecimal;
28 import java.util.Arrays;
29 import java.util.List;
31 import org.junit.Test;
33 import org.oran.smo.yangtools.parser.findings.ParserFindingType;
34 import org.oran.smo.yangtools.parser.model.statements.AbstractStatement.StatementArgumentType;
35 import org.oran.smo.yangtools.parser.model.statements.yang.CY;
36 import org.oran.smo.yangtools.parser.model.statements.yang.YCase;
37 import org.oran.smo.yangtools.parser.model.statements.yang.YChoice;
38 import org.oran.smo.yangtools.parser.model.statements.yang.YContainer;
39 import org.oran.smo.yangtools.parser.model.statements.yang.YLeaf;
40 import org.oran.smo.yangtools.parser.model.statements.yang.YLength;
41 import org.oran.smo.yangtools.parser.model.statements.yang.YList;
42 import org.oran.smo.yangtools.parser.model.statements.yang.YLength.BoundaryPair;
43 import org.oran.smo.yangtools.parser.testutils.YangTestCommon;
44 import org.oran.smo.yangtools.parser.model.statements.yang.YModule;
45 import org.oran.smo.yangtools.parser.model.statements.yang.YOrderedBy;
46 import org.oran.smo.yangtools.parser.model.statements.yang.YRange;
47 import org.oran.smo.yangtools.parser.model.statements.yang.YRpc;
49 public class GeneralSyntaxTest extends YangTestCommon {
52 public void testGeneralSyntaxRpc() {
54 severityCalculator.suppressFinding(ParserFindingType.P115_TYPEDEF_USED_ONCE_ONLY.toString());
55 severityCalculator.suppressFinding(ParserFindingType.P133_GROUPING_USED_ONCE_ONLY.toString());
56 severityCalculator.suppressFinding(ParserFindingType.P114_TYPEDEF_NOT_USED.toString());
58 parseRelativeImplementsYangModels(Arrays.asList("general-syntax-test/general-syntax-test-rpc.yang"));
62 final YModule yModule = getModule("general-syntax-test-rpc");
63 assertTrue(yModule != null);
65 // -------------- RPCs -------------------
67 final YRpc rpc1 = getChild(yModule, CY.RPC, "rpc1");
68 assertTrue(rpc1 != null);
70 final YRpc rpc2 = getChild(yModule, CY.RPC, "rpc2");
71 assertTrue(rpc2 != null);
72 assertTrue(rpc2.getInput() != null);
73 assertTrue(rpc2.getOutput() != null); // missing in YAM, auto-created by parser
74 assertTrue(rpc2.getInput().getContainers().get(0) != null);
75 assertTrue(rpc2.getInput().getContainers().get(0).getStatementIdentifier().equals("cont1"));
77 final YRpc rpc3 = getChild(yModule, CY.RPC, "rpc3");
78 assertTrue(rpc3 != null);
79 assertTrue(rpc3.getInput() != null); // missing in YAM, auto-created by parser
80 assertTrue(rpc3.getOutput() != null);
81 assertTrue(rpc3.getOutput().getContainers().get(0) != null);
82 assertTrue(rpc3.getOutput().getContainers().get(0).getStatementIdentifier().equals("cont2"));
84 final YRpc rpc4 = getChild(yModule, CY.RPC, "rpc4");
85 assertTrue(rpc4 != null);
86 assertTrue(rpc4.getStatus() != null);
87 assertTrue(rpc4.getStatus().isDeprecated());
88 assertTrue(rpc4.getIfFeatures().get(0) != null);
89 assertTrue(rpc4.getIfFeatures().get(0).getValue().equals("feature1"));
90 assertTrue(rpc4.getTypedefs().get(0) != null);
91 assertTrue(rpc4.getTypedefs().get(0).getTypedefName().equals("typedef1"));
92 assertTrue(rpc4.getGroupings().get(0) != null);
93 assertTrue(rpc4.getGroupings().get(0).getGroupingName().equals("grouping1"));
95 assertTrue(rpc4.getOutput() != null);
96 assertTrue(rpc4.getOutput().getLeafs().get(0) != null);
97 assertTrue(rpc4.getOutput().getLeafs().get(0).getType().getDataType().equals("string"));
98 assertTrue(rpc4.getOutput().getAnyxmls().get(0) != null);
99 assertTrue(rpc4.getOutput().getAnyxmls().get(0).getStatementIdentifier().equals("anyxml1"));
100 assertTrue(rpc4.getOutput().getAnydata().get(0) != null);
101 assertTrue(rpc4.getOutput().getAnydata().get(0).getStatementIdentifier().equals("anydata1"));
102 assertTrue(rpc4.getOutput().getLists().get(0) != null);
103 assertTrue(rpc4.getOutput().getLists().get(0).getStatementIdentifier().equals("list1"));
104 assertTrue(rpc4.getOutput().getLeafLists().get(0) != null);
105 assertTrue(rpc4.getOutput().getLeafLists().get(0).getStatementIdentifier().equals("leaflist3"));
106 assertTrue(rpc4.getOutput().getChoices().get(0) != null);
107 assertTrue(rpc4.getOutput().getChoices().get(0).getStatementIdentifier().equals("choice1"));
108 assertTrue(rpc4.getOutput().getMusts().get(0) != null);
109 assertTrue(rpc4.getOutput().getMusts().get(0).getXpathExpression().equals("../contX"));
110 assertTrue(rpc4.getOutput().getTypedefs().get(0) != null);
111 assertTrue(rpc4.getOutput().getTypedefs().get(0).getTypedefName().equals("typedef2"));
113 assertTrue(rpc4.getInput() != null);
114 assertTrue(rpc4.getInput().getContainers().get(0) != null);
115 assertTrue(rpc4.getInput().getContainers().get(0).getContainerName().equals("cont4"));
116 assertTrue(rpc4.getInput().getLeafs().get(0) != null);
117 assertTrue(rpc4.getInput().getLeafs().get(0).getLeafName().equals("grouping-leaf"));
118 assertTrue(rpc4.getInput().getAnyxmls().get(0) != null);
119 assertTrue(rpc4.getInput().getAnyxmls().get(0).getStatementIdentifier().equals("anyxml1"));
120 assertTrue(rpc4.getInput().getAnydata().get(0) != null);
121 assertTrue(rpc4.getInput().getAnydata().get(0).getStatementIdentifier().equals("anydata1"));
122 assertTrue(rpc4.getInput().getLists().get(0) != null);
123 assertTrue(rpc4.getInput().getLists().get(0).getStatementIdentifier().equals("list1"));
124 assertTrue(rpc4.getInput().getLeafLists().get(0) != null);
125 assertTrue(rpc4.getInput().getLeafLists().get(0).getStatementIdentifier().equals("leaflist3"));
126 assertTrue(rpc4.getInput().getChoices().get(0) != null);
127 assertTrue(rpc4.getInput().getChoices().get(0).getStatementIdentifier().equals("choice1"));
128 assertTrue(rpc4.getInput().getMusts().get(0) != null);
129 assertTrue(rpc4.getInput().getMusts().get(0).getXpathExpression().equals("../contX"));
130 assertTrue(rpc4.getInput().getTypedefs().get(0) != null);
131 assertTrue(rpc4.getInput().getTypedefs().get(0).getTypedefName().equals("typedef2"));
135 public void testGeneralSyntaxConstraints() {
137 severityCalculator.suppressFinding(ParserFindingType.P115_TYPEDEF_USED_ONCE_ONLY.toString());
138 severityCalculator.suppressFinding(ParserFindingType.P133_GROUPING_USED_ONCE_ONLY.toString());
140 parseRelativeImplementsYangModels(Arrays.asList("general-syntax-test/general-syntax-test-constraints.yang"));
142 final YModule module = getModule("general-syntax-test-constraints");
143 assertTrue(module != null);
145 // -------------- Length -------------------
148 final YContainer cont1 = getContainer(module, "cont1");
150 final YLeaf leaf1 = getLeaf(cont1, "leaf1");
151 final YLength length1 = leaf1.getType().getLength();
153 assertTrue(length1.getErrorAppTag() != null);
154 assertTrue(length1.getErrorAppTag().getValue().equals("some-app-tag"));
155 assertTrue(length1.getErrorMessage() != null);
156 assertTrue(length1.getErrorMessage().getValue().equals("wrong length"));
157 assertNoFindingsOnStatement(getLeaf(cont1, "leaf1").getType().getLength());
159 final List<BoundaryPair> boundaries1 = length1.getBoundaries();
160 assertTrue(boundaries1.size() == 1);
161 assertTrue(boundaries1.get(0).lower == 1L);
162 assertTrue(boundaries1.get(0).upper == 10L);
164 final List<BoundaryPair> boundaries2 = getLeaf(cont1, "leaf2").getType().getLength().getBoundaries();
165 assertTrue(boundaries2.size() == 1);
166 assertTrue(boundaries2.get(0).lower == 0L);
167 assertTrue(boundaries2.get(0).upper == Long.MAX_VALUE);
168 assertNoFindingsOnStatement(getLeaf(cont1, "leaf2").getType().getLength());
170 final List<BoundaryPair> boundaries3 = getLeaf(cont1, "leaf3").getType().getLength().getBoundaries();
171 assertTrue(boundaries3.size() == 3);
172 assertTrue(boundaries3.get(0).lower == 0L);
173 assertTrue(boundaries3.get(0).upper == 10L);
174 assertTrue(boundaries3.get(1).lower == 15L);
175 assertTrue(boundaries3.get(1).upper == 15L);
176 assertTrue(boundaries3.get(2).lower == 20L);
177 assertTrue(boundaries3.get(2).upper == Long.MAX_VALUE);
178 assertNoFindingsOnStatement(getLeaf(cont1, "leaf3").getType().getLength());
180 assertTrue(getLeaf(cont1, "leaf3").getType().getLength().isWithinLengthBoundaries(0));
181 assertTrue(getLeaf(cont1, "leaf3").getType().getLength().isWithinLengthBoundaries(10));
182 assertTrue(getLeaf(cont1, "leaf3").getType().getLength().isWithinLengthBoundaries(15));
183 assertTrue(getLeaf(cont1, "leaf3").getType().getLength().isWithinLengthBoundaries(20));
184 assertTrue(getLeaf(cont1, "leaf3").getType().getLength().isWithinLengthBoundaries(40404040404L));
186 assertFalse(getLeaf(cont1, "leaf3").getType().getLength().isWithinLengthBoundaries(-1));
187 assertFalse(getLeaf(cont1, "leaf3").getType().getLength().isWithinLengthBoundaries(11));
188 assertFalse(getLeaf(cont1, "leaf3").getType().getLength().isWithinLengthBoundaries(14));
189 assertFalse(getLeaf(cont1, "leaf3").getType().getLength().isWithinLengthBoundaries(16));
190 assertFalse(getLeaf(cont1, "leaf3").getType().getLength().isWithinLengthBoundaries(19));
192 final List<BoundaryPair> boundaries4 = getLeaf(cont1, "leaf4").getType().getLength().getBoundaries();
193 assertTrue(boundaries4.size() == 2);
194 assertTrue(boundaries4.get(0).lower == 0L);
195 assertTrue(boundaries4.get(0).upper == 0L);
196 assertTrue(boundaries4.get(1).lower == Long.MAX_VALUE);
197 assertTrue(boundaries4.get(1).upper == Long.MAX_VALUE);
198 assertNoFindingsOnStatement(getLeaf(cont1, "leaf4").getType().getLength());
200 final List<BoundaryPair> boundaries5 = getLeaf(cont1, "leaf5").getType().getLength().getBoundaries();
201 assertTrue(boundaries5.size() == 0);
202 assertStatementHasFindingOfType(getLeaf(cont1, "leaf5").getType().getLength(),
203 ParserFindingType.P053_INVALID_VALUE.toString());
205 final List<BoundaryPair> boundaries6 = getLeaf(cont1, "leaf6").getType().getLength().getBoundaries();
206 assertTrue(boundaries6.size() == 0);
207 assertStatementHasFindingOfType(getLeaf(cont1, "leaf6").getType().getLength(),
208 ParserFindingType.P053_INVALID_VALUE.toString());
210 final List<BoundaryPair> boundaries7 = getLeaf(cont1, "leaf7").getType().getLength().getBoundaries();
211 assertTrue(boundaries7.size() == 0);
212 assertStatementHasFindingOfType(getLeaf(cont1, "leaf7").getType().getLength(),
213 ParserFindingType.P053_INVALID_VALUE.toString());
215 final List<BoundaryPair> boundaries8 = getLeaf(cont1, "leaf8").getType().getLength().getBoundaries();
216 assertTrue(boundaries8.size() == 2);
217 assertTrue(boundaries8.get(0).lower == 10L);
218 assertTrue(boundaries8.get(0).upper == 20L);
219 assertTrue(boundaries8.get(1).lower == 21L);
220 assertTrue(boundaries8.get(1).upper == 30L);
221 assertNoFindingsOnStatement(getLeaf(cont1, "leaf8").getType().getLength());
223 final List<BoundaryPair> boundaries9 = getLeaf(cont1, "leaf9").getType().getLength().getBoundaries();
224 assertTrue(boundaries9.size() == 2);
225 assertTrue(boundaries9.get(0).lower == 10L);
226 assertTrue(boundaries9.get(0).upper == 20L);
227 assertTrue(boundaries9.get(1).lower == 20L);
228 assertTrue(boundaries9.get(1).upper == 30L);
229 assertStatementHasFindingOfType(getLeaf(cont1, "leaf9").getType().getLength(),
230 ParserFindingType.P053_INVALID_VALUE.toString());
232 final List<BoundaryPair> boundaries10 = getLeaf(cont1, "leaf10").getType().getLength().getBoundaries();
233 assertTrue(boundaries10.size() == 2);
234 assertTrue(boundaries10.get(0).lower == 19L);
235 assertTrue(boundaries10.get(0).upper == 30L);
236 assertTrue(boundaries10.get(1).lower == 10L);
237 assertTrue(boundaries10.get(1).upper == 20L);
238 assertStatementHasFindingOfType(getLeaf(cont1, "leaf10").getType().getLength(),
239 ParserFindingType.P053_INVALID_VALUE.toString());
241 final List<BoundaryPair> boundaries11 = getLeaf(cont1, "leaf11").getType().getLength().getBoundaries();
242 assertTrue(boundaries11.size() == 1);
243 assertTrue(boundaries11.get(0).lower == -1L);
244 assertTrue(boundaries11.get(0).upper == -3L);
245 assertStatementHasFindingOfType(getLeaf(cont1, "leaf11").getType().getLength(),
246 ParserFindingType.P053_INVALID_VALUE.toString());
248 final List<BoundaryPair> boundaries12 = getLeaf(cont1, "leaf12").getType().getLength().getBoundaries();
249 assertTrue(boundaries12.size() == 0);
250 assertStatementHasFindingOfType(getLeaf(cont1, "leaf12").getType().getLength(),
251 ParserFindingType.P053_INVALID_VALUE.toString());
253 final List<BoundaryPair> boundaries13 = getLeaf(cont1, "leaf13").getType().getLength().getBoundaries();
254 assertTrue(boundaries13.size() == 0);
255 assertStatementHasFindingOfType(getLeaf(cont1, "leaf13").getType().getLength(),
256 ParserFindingType.P053_INVALID_VALUE.toString());
259 // -------------- Range for integer -------------------
262 final YContainer cont2 = getContainer(module, "cont2");
263 assertTrue(cont2 != null);
265 final YLeaf leaf1 = getLeaf(cont2, "leaf1");
266 assertTrue(leaf1 != null);
267 final YRange range1 = leaf1.getType().getRange();
268 assertTrue(range1 != null);
270 assertTrue(range1.getErrorAppTag() != null);
271 assertTrue(range1.getErrorAppTag().getValue().equals("some-app-tag"));
272 assertTrue(range1.getErrorMessage() != null);
273 assertTrue(range1.getErrorMessage().getValue().equals("wrong length"));
274 assertNoFindingsOnStatement(getLeaf(cont2, "leaf1").getType().getRange());
276 final List<YRange.BoundaryPair> boundaries1 = range1.getBoundaries();
277 assertTrue(boundaries1.size() == 1);
278 assertTrue(boundaries1.get(0).lower.compareTo(BigDecimal.valueOf(1L)) == 0);
279 assertTrue(boundaries1.get(0).upper.compareTo(BigDecimal.valueOf(10L)) == 0);
280 assertNoFindingsOnStatement(getLeaf(cont2, "leaf1").getType().getRange());
282 assertTrue(getLeaf(cont2, "leaf1").getType().getRange().isWithinRangeBoundaries(BigDecimal.valueOf(5L)));
283 assertFalse(getLeaf(cont2, "leaf1").getType().getRange().isWithinRangeBoundaries(BigDecimal.valueOf(-20L)));
284 assertFalse(getLeaf(cont2, "leaf1").getType().getRange().isWithinRangeBoundaries(BigDecimal.valueOf(90L)));
286 final List<YRange.BoundaryPair> boundaries2 = getLeaf(cont2, "leaf2").getType().getRange().getBoundaries();
287 assertTrue(boundaries2.get(0).lower.compareTo(BigDecimal.valueOf(0L)) == 0);
288 assertTrue(boundaries2.get(0).upper.compareTo(BigDecimal.valueOf(255L)) == 0);
289 assertNoFindingsOnStatement(getLeaf(cont2, "leaf2").getType().getRange());
291 final List<YRange.BoundaryPair> boundaries3 = getLeaf(cont2, "leaf3").getType().getRange().getBoundaries();
292 assertTrue(boundaries3.get(0).lower.compareTo(BigDecimal.valueOf(0L)) == 0);
293 assertTrue(boundaries3.get(0).upper.compareTo(BigDecimal.valueOf(65535L)) == 0);
294 assertNoFindingsOnStatement(getLeaf(cont2, "leaf3").getType().getRange());
296 final List<YRange.BoundaryPair> boundaries4 = getLeaf(cont2, "leaf4").getType().getRange().getBoundaries();
297 assertTrue(boundaries4.get(0).lower.compareTo(BigDecimal.valueOf(0L)) == 0);
298 assertTrue(boundaries4.get(0).upper.compareTo(BigDecimal.valueOf(4294967295L)) == 0);
299 assertNoFindingsOnStatement(getLeaf(cont2, "leaf4").getType().getRange());
301 final List<YRange.BoundaryPair> boundaries5 = getLeaf(cont2, "leaf5").getType().getRange().getBoundaries();
302 assertTrue(boundaries5.get(0).lower.compareTo(BigDecimal.valueOf(0L)) == 0);
303 assertTrue(boundaries5.get(0).upper.compareTo(new BigDecimal("18446744073709551615")) == 0);
304 assertNoFindingsOnStatement(getLeaf(cont2, "leaf5").getType().getRange());
306 final List<YRange.BoundaryPair> boundaries6 = getLeaf(cont2, "leaf6").getType().getRange().getBoundaries();
307 assertTrue(boundaries6.get(0).lower.compareTo(BigDecimal.valueOf(-128L)) == 0);
308 assertTrue(boundaries6.get(0).upper.compareTo(BigDecimal.valueOf(127L)) == 0);
309 assertNoFindingsOnStatement(getLeaf(cont2, "leaf6").getType().getRange());
311 final List<YRange.BoundaryPair> boundaries7 = getLeaf(cont2, "leaf7").getType().getRange().getBoundaries();
312 assertTrue(boundaries7.get(0).lower.compareTo(BigDecimal.valueOf(-32768L)) == 0);
313 assertTrue(boundaries7.get(0).upper.compareTo(BigDecimal.valueOf(32767L)) == 0);
314 assertNoFindingsOnStatement(getLeaf(cont2, "leaf7").getType().getRange());
316 final List<YRange.BoundaryPair> boundaries8 = getLeaf(cont2, "leaf8").getType().getRange().getBoundaries();
317 assertTrue(boundaries8.get(0).lower.compareTo(BigDecimal.valueOf(-2147483648L)) == 0);
318 assertTrue(boundaries8.get(0).upper.compareTo(BigDecimal.valueOf(2147483647L)) == 0);
319 assertNoFindingsOnStatement(getLeaf(cont2, "leaf8").getType().getRange());
321 final List<YRange.BoundaryPair> boundaries9 = getLeaf(cont2, "leaf9").getType().getRange().getBoundaries();
322 assertTrue(boundaries9.get(0).lower.compareTo(BigDecimal.valueOf(-9223372036854775808L)) == 0);
323 assertTrue(boundaries9.get(0).upper.compareTo(BigDecimal.valueOf(9223372036854775807L)) == 0);
324 assertNoFindingsOnStatement(getLeaf(cont2, "leaf9").getType().getRange());
326 final List<YRange.BoundaryPair> boundaries10 = getLeaf(cont2, "leaf10").getType().getRange().getBoundaries();
327 assertTrue(boundaries10.size() == 1);
328 assertTrue(boundaries10.get(0).lower.compareTo(BigDecimal.valueOf(10L)) == 0);
329 assertTrue(boundaries10.get(0).upper.compareTo(BigDecimal.valueOf(20L)) == 0);
330 assertNoFindingsOnStatement(getLeaf(cont2, "leaf10").getType().getRange());
332 final List<YRange.BoundaryPair> boundaries11 = getLeaf(cont2, "leaf11").getType().getRange().getBoundaries();
333 assertTrue(boundaries11.size() == 2);
334 assertTrue(boundaries11.get(0).lower.compareTo(BigDecimal.valueOf(10L)) == 0);
335 assertTrue(boundaries11.get(0).upper.compareTo(BigDecimal.valueOf(20L)) == 0);
336 assertTrue(boundaries11.get(1).lower.compareTo(BigDecimal.valueOf(30L)) == 0);
337 assertTrue(boundaries11.get(1).upper.compareTo(BigDecimal.valueOf(40L)) == 0);
338 assertNoFindingsOnStatement(getLeaf(cont2, "leaf11").getType().getRange());
340 final List<YRange.BoundaryPair> boundaries12 = getLeaf(cont2, "leaf12").getType().getRange().getBoundaries();
341 assertTrue(boundaries12.size() == 3);
342 assertTrue(boundaries12.get(0).lower.compareTo(BigDecimal.valueOf(10L)) == 0);
343 assertTrue(boundaries12.get(0).upper.compareTo(BigDecimal.valueOf(20L)) == 0);
344 assertTrue(boundaries12.get(1).lower.compareTo(BigDecimal.valueOf(25L)) == 0);
345 assertTrue(boundaries12.get(1).upper.compareTo(BigDecimal.valueOf(25L)) == 0);
346 assertTrue(boundaries12.get(2).lower.compareTo(BigDecimal.valueOf(30L)) == 0);
347 assertTrue(boundaries12.get(2).upper.compareTo(BigDecimal.valueOf(40L)) == 0);
348 assertNoFindingsOnStatement(getLeaf(cont2, "leaf12").getType().getRange());
350 final List<YRange.BoundaryPair> boundaries13 = getLeaf(cont2, "leaf13").getType().getRange().getBoundaries();
351 assertTrue(boundaries13.size() == 2);
352 assertTrue(boundaries13.get(0).lower.compareTo(BigDecimal.valueOf(0L)) == 0);
353 assertTrue(boundaries13.get(0).upper.compareTo(BigDecimal.valueOf(0L)) == 0);
354 assertTrue(boundaries13.get(1).lower.compareTo(BigDecimal.valueOf(255L)) == 0);
355 assertTrue(boundaries13.get(1).upper.compareTo(BigDecimal.valueOf(255L)) == 0);
356 assertNoFindingsOnStatement(getLeaf(cont2, "leaf13").getType().getRange());
358 final List<YRange.BoundaryPair> boundaries14 = getLeaf(cont2, "leaf14").getType().getRange().getBoundaries();
359 assertTrue(boundaries14.size() == 0);
360 assertStatementHasFindingOfType(getLeaf(cont2, "leaf14").getType().getRange(),
361 ParserFindingType.P053_INVALID_VALUE.toString());
363 final List<YRange.BoundaryPair> boundaries15 = getLeaf(cont2, "leaf15").getType().getRange().getBoundaries();
364 assertTrue(boundaries15.size() == 0);
365 assertStatementHasFindingOfType(getLeaf(cont2, "leaf15").getType().getRange(),
366 ParserFindingType.P053_INVALID_VALUE.toString());
368 final List<YRange.BoundaryPair> boundaries16 = getLeaf(cont2, "leaf16").getType().getRange().getBoundaries();
369 assertTrue(boundaries16.size() == 0);
370 assertStatementHasFindingOfType(getLeaf(cont2, "leaf16").getType().getRange(),
371 ParserFindingType.P053_INVALID_VALUE.toString());
373 final List<YRange.BoundaryPair> boundaries17 = getLeaf(cont2, "leaf17").getType().getRange().getBoundaries();
374 assertTrue(boundaries17.size() == 0);
375 assertStatementHasFindingOfType(getLeaf(cont2, "leaf17").getType().getRange(),
376 ParserFindingType.P053_INVALID_VALUE.toString());
378 final List<YRange.BoundaryPair> boundaries18 = getLeaf(cont2, "leaf18").getType().getRange().getBoundaries();
379 assertTrue(boundaries18.size() == 0);
380 assertStatementHasFindingOfType(getLeaf(cont2, "leaf18").getType().getRange(),
381 ParserFindingType.P053_INVALID_VALUE.toString());
383 final List<YRange.BoundaryPair> boundaries19 = getLeaf(cont2, "leaf19").getType().getRange().getBoundaries();
384 assertTrue(boundaries19.size() == 2);
385 assertStatementHasFindingOfType(getLeaf(cont2, "leaf19").getType().getRange(),
386 ParserFindingType.P053_INVALID_VALUE.toString());
388 final List<YRange.BoundaryPair> boundaries20 = getLeaf(cont2, "leaf20").getType().getRange().getBoundaries();
389 assertTrue(boundaries20.size() == 2);
390 assertStatementHasFindingOfType(getLeaf(cont2, "leaf20").getType().getRange(),
391 ParserFindingType.P053_INVALID_VALUE.toString());
393 final List<YRange.BoundaryPair> boundaries21 = getLeaf(cont2, "leaf21").getType().getRange().getBoundaries();
394 assertTrue(boundaries21.size() == 2);
395 assertStatementHasFindingOfType(getLeaf(cont2, "leaf21").getType().getRange(),
396 ParserFindingType.P053_INVALID_VALUE.toString());
398 final List<YRange.BoundaryPair> boundaries22 = getLeaf(cont2, "leaf22").getType().getRange().getBoundaries();
399 assertTrue(boundaries22.size() == 2);
400 assertStatementHasFindingOfType(getLeaf(cont2, "leaf22").getType().getRange(),
401 ParserFindingType.P053_INVALID_VALUE.toString());
403 final List<YRange.BoundaryPair> boundaries23 = getLeaf(cont2, "leaf23").getType().getRange().getBoundaries();
404 assertTrue(boundaries23.size() == 2);
405 assertStatementHasFindingOfType(getLeaf(cont2, "leaf23").getType().getRange(),
406 ParserFindingType.P053_INVALID_VALUE.toString());
408 final List<YRange.BoundaryPair> boundaries24 = getLeaf(cont2, "leaf24").getType().getRange().getBoundaries();
409 assertTrue(boundaries24.size() == 1);
410 assertStatementHasFindingOfType(getLeaf(cont2, "leaf24").getType().getRange(),
411 ParserFindingType.P053_INVALID_VALUE.toString());
413 final List<YRange.BoundaryPair> boundaries25 = getLeaf(cont2, "leaf25").getType().getRange().getBoundaries();
414 assertTrue(boundaries25.size() == 0);
415 assertStatementHasFindingOfType(getLeaf(cont2, "leaf25").getType().getRange(),
416 ParserFindingType.P018_ILLEGAL_CHILD_STATEMENT.toString());
419 // -------------- Range for decimal64 -------------------
422 final YContainer cont3 = getContainer(module, "cont3");
423 assertTrue(cont3 != null);
425 final YLeaf leaf1 = getLeaf(cont3, "leaf1");
426 assertTrue(leaf1 != null);
427 final YRange range1 = leaf1.getType().getRange();
428 assertTrue(range1 != null);
430 final List<YRange.BoundaryPair> boundaries1 = range1.getBoundaries();
431 assertTrue(boundaries1.size() == 1);
432 assertTrue(boundaries1.get(0).lower.compareTo(new BigDecimal("-922337203685477580.8")) == 0);
433 assertTrue(boundaries1.get(0).upper.compareTo(new BigDecimal("922337203685477580.7")) == 0);
434 assertNoFindingsOnStatement(getLeaf(cont3, "leaf1").getType().getRange());
436 final List<YRange.BoundaryPair> boundaries2 = getLeaf(cont3, "leaf2").getType().getRange().getBoundaries();
437 assertTrue(boundaries2.get(0).lower.compareTo(new BigDecimal("-9.223372036854775808")) == 0);
438 assertTrue(boundaries2.get(0).upper.compareTo(new BigDecimal("9.223372036854775807")) == 0);
439 assertNoFindingsOnStatement(getLeaf(cont3, "leaf2").getType().getRange());
441 final List<YRange.BoundaryPair> boundaries3 = getLeaf(cont3, "leaf3").getType().getRange().getBoundaries();
442 assertTrue(boundaries3.size() == 0);
443 assertNoFindingsOnStatement(getLeaf(cont3, "leaf3").getType().getRange());
448 public void testGeneralVarious() {
450 severityCalculator.suppressFinding(ParserFindingType.P132_GROUPING_NOT_USED.toString());
451 severityCalculator.suppressFinding(ParserFindingType.P114_TYPEDEF_NOT_USED.toString());
452 severityCalculator.suppressFinding(ParserFindingType.P143_ENUM_WITHOUT_VALUE.toString());
454 parseRelativeImplementsYangModels(Arrays.asList("general-syntax-test/general-syntax-test-various.yang"));
456 final YModule module = getModule("general-syntax-test-various");
457 assertTrue(module != null);
459 // - - - - enums - - - - -
461 final YContainer cont1 = getContainer(module, "cont1");
463 final YLeaf leaf1 = getLeaf(cont1, "leaf1");
465 assertNoFindingsOnStatement(leaf1.getType().getEnums().get(0));
466 assertNoFindingsOnStatement(leaf1.getType().getEnums().get(1));
467 assertNoFindingsOnStatement(leaf1.getType().getEnums().get(2));
468 assertStatementHasFindingOfType(leaf1.getType().getEnums().get(3), ParserFindingType.P141_WHITESPACE_IN_ENUM
470 assertNoFindingsOnStatement(leaf1.getType().getEnums().get(4));
471 assertStatementHasFindingOfType(leaf1.getType().getEnums().get(5), ParserFindingType.P142_UNUSUAL_CHARACTERS_IN_ENUM
473 assertStatementHasFindingOfType(leaf1.getType().getEnums().get(6).getValue(),
474 ParserFindingType.P015_INVALID_SYNTAX_IN_DOCUMENT.toString());
475 assertTrue(leaf1.getType().getEnums().get(6).getValue().getEnumValue() == 0);
477 assertTrue(leaf1.getType().getEnums().get(0).getValue().getValue().equals("0"));
478 assertTrue(leaf1.getType().getEnums().get(1).getStatus().isDeprecated());
479 assertTrue(leaf1.getType().getEnums().get(2).getStatementIdentifier().equals("two"));
481 // - - - - status - - - - -
483 final YContainer cont2 = getContainer(module, "cont2");
485 assertNoFindingsOnStatement(getLeaf(cont2, "leaf11").getStatus());
486 assertTrue(getLeaf(cont2, "leaf11").getStatus().isCurrent());
487 assertNoFindingsOnStatement(getLeaf(cont2, "leaf12").getStatus());
488 assertTrue(getLeaf(cont2, "leaf12").getStatus().isDeprecated());
489 assertNoFindingsOnStatement(getLeaf(cont2, "leaf13").getStatus());
490 assertTrue(getLeaf(cont2, "leaf13").getStatus().isObsolete());
492 assertStatementHasFindingOfType(getLeaf(cont2, "leaf14").getStatus(),
493 ParserFindingType.P015_INVALID_SYNTAX_IN_DOCUMENT.toString());
494 assertFalse(getLeaf(cont2, "leaf14").getStatus().isCurrent());
495 assertFalse(getLeaf(cont2, "leaf14").getStatus().isDeprecated());
496 assertFalse(getLeaf(cont2, "leaf14").getStatus().isObsolete());
498 assertStatementHasFindingOfType(getLeaf(cont2, "leaf15").getStatus(),
499 ParserFindingType.P015_INVALID_SYNTAX_IN_DOCUMENT.toString());
500 assertFalse(getLeaf(cont2, "leaf15").getStatus().isCurrent());
501 assertFalse(getLeaf(cont2, "leaf15").getStatus().isDeprecated());
502 assertFalse(getLeaf(cont2, "leaf15").getStatus().isObsolete());
504 // - - - - - container - - - - -
506 final YContainer cont3 = getContainer(module, "cont3");
507 assertSubTreeNoFindings(cont3);
509 assertTrue(cont3.definesDataNode());
510 assertTrue(cont3.definesSchemaNode());
512 assertTrue(cont3.getGroupings().size() == 1);
513 assertTrue(cont3.getTypedefs().size() == 1);
514 assertTrue(cont3.getLeafs().size() == 2);
515 assertTrue(cont3.getChoices().size() == 1);
516 assertTrue(cont3.getLists().size() == 1);
517 assertTrue(cont3.getNotifications().size() == 1);
518 assertTrue(cont3.getLeafLists().size() == 1);
519 assertTrue(cont3.getAnydata().size() == 2);
520 assertTrue(cont3.getAnyxmls().size() == 3);
522 // - - - - - choice and case - - - - -
524 final YChoice choice1 = getChoice(module, "choice1");
525 assertSubTreeNoFindings(choice1);
527 assertTrue(choice1.getCases().size() == 8);
528 assertTrue(choice1.getChoices().size() == 0);
529 assertTrue(choice1.getConfig().getValue().equals("true"));
530 assertTrue(choice1.getDefault().getValue().equals("case2"));
531 assertTrue(choice1.getIfFeatures().size() == 0);
532 assertTrue(choice1.getMandatory() == null);
533 assertTrue(choice1.getStatus().isDeprecated());
534 assertTrue(choice1.getWhens().size() == 1);
536 // will always return empty lists as shorthand notation is resolved.
537 assertTrue(choice1.getAnydata().size() == 0);
538 assertTrue(choice1.getAnyxmls().size() == 0);
539 assertTrue(choice1.getContainers().size() == 0);
540 assertTrue(choice1.getLists().size() == 0);
541 assertTrue(choice1.getLeafs().size() == 0);
542 assertTrue(choice1.getLeafLists().size() == 0);
544 final YCase case2 = getCase(choice1, "case2");
546 assertTrue(case2.getAnydata().size() == 1);
547 assertTrue(case2.getAnyxmls().size() == 2);
548 assertTrue(case2.getChoices().size() == 0);
549 assertTrue(case2.getContainers().size() == 0);
550 assertTrue(case2.getLeafs().size() == 1);
551 assertTrue(case2.getLeafLists().size() == 1);
552 assertTrue(case2.getLists().size() == 0);
553 assertTrue(case2.getStatus().isObsolete());
554 assertTrue(case2.getUses().size() == 0);
555 assertTrue(case2.getWhens().size() == 1);
557 // - - - - - list - - - - -
559 final YList list4 = getList(module, "list4");
560 assertSubTreeNoFindings(list4);
562 assertTrue(list4.definesDataNode());
563 assertTrue(list4.definesSchemaNode());
564 assertTrue(list4.getConfig().getValue().equals("true"));
565 assertTrue(list4.getOrderedBy().isOrderedBySystem());
566 assertTrue(list4.getStatus().isCurrent());
568 assertTrue(list4.getUses().size() == 0);
569 assertTrue(list4.getContainers().size() == 0);
570 assertTrue(list4.getIfFeatures().size() == 0);
571 assertTrue(list4.getGroupings().size() == 1);
572 assertTrue(list4.getTypedefs().size() == 1);
573 assertTrue(list4.getActions().size() == 3);
574 assertTrue(list4.getLeafs().size() == 2);
575 assertTrue(list4.getChoices().size() == 1);
576 assertTrue(list4.getLists().size() == 1);
577 assertTrue(list4.getNotifications().size() == 1);
578 assertTrue(list4.getLeafLists().size() == 1);
579 assertTrue(list4.getAnydata().size() == 2);
580 assertTrue(list4.getAnyxmls().size() == 3);
581 assertTrue(list4.getMusts().size() == 0);
582 assertTrue(list4.getWhens().size() == 0);
584 // - - - - - leaf-list - - - - -
586 final YContainer cont5 = getContainer(module, "cont5");
588 final YOrderedBy yOrderedBy = getLeafList(cont5, "leaflist51").getOrderedBy();
589 assertEquals(StatementArgumentType.VALUE, yOrderedBy.getArgumentType());
590 assertEquals(CY.STMT_ORDERED_BY, yOrderedBy.getStatementModuleAndName());
592 assertTrue(getLeafList(cont5, "leaflist51").getOrderedBy().isOrderedByUser());
593 assertFalse(getLeafList(cont5, "leaflist51").getOrderedBy().isOrderedBySystem());
594 assertSubTreeNoFindings(getLeafList(cont5, "leaflist51"));
596 assertFalse(getLeafList(cont5, "leaflist52").getOrderedBy().isOrderedByUser());
597 assertTrue(getLeafList(cont5, "leaflist52").getOrderedBy().isOrderedBySystem());
598 assertSubTreeNoFindings(getLeafList(cont5, "leaflist52"));
600 assertFalse(getLeafList(cont5, "leaflist53").getOrderedBy().isOrderedByUser());
601 assertFalse(getLeafList(cont5, "leaflist53").getOrderedBy().isOrderedBySystem());
602 assertStatementHasFindingOfType(getLeafList(cont5, "leaflist53").getOrderedBy(),
603 ParserFindingType.P015_INVALID_SYNTAX_IN_DOCUMENT.toString());
605 assertFalse(getLeafList(cont5, "leaflist54").getOrderedBy().isOrderedByUser());
606 assertFalse(getLeafList(cont5, "leaflist54").getOrderedBy().isOrderedBySystem());
607 assertStatementHasFindingOfType(getLeafList(cont5, "leaflist54").getOrderedBy(),
608 ParserFindingType.P015_INVALID_SYNTAX_IN_DOCUMENT.toString());