2 * Copyright (c) 2016 Cisco Systems, Inc. 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.assertFalse;
12 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
13 import static org.junit.jupiter.api.Assertions.assertNotEquals;
14 import static org.junit.jupiter.api.Assertions.assertNotNull;
15 import static org.junit.jupiter.api.Assertions.assertNull;
17 import java.util.Optional;
18 import org.junit.jupiter.api.AfterAll;
19 import org.junit.jupiter.api.BeforeAll;
20 import org.junit.jupiter.api.Test;
21 import org.opendaylight.yangtools.yang.common.QName;
22 import org.opendaylight.yangtools.yang.common.Uint32;
23 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.Module;
25 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
26 import org.opendaylight.yangtools.yang.model.api.Status;
27 import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
28 import org.opendaylight.yangtools.yang.model.api.stmt.TypeDefinitionAware;
29 import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
30 import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
31 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
32 import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition;
33 import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
34 import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition;
35 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
36 import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
37 import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition;
38 import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
39 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
40 import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
42 class EffectiveStatementTypeTest extends AbstractYangTest {
43 private static SchemaContext effectiveSchemaContext;
44 private static Module types;
46 private LeafSchemaNode currentLeaf;
50 effectiveSchemaContext = assertEffectiveModel("/type-tests/types.yang");
51 types = effectiveSchemaContext.findModules("types").iterator().next();
56 static void teardown() {
57 effectiveSchemaContext = null;
63 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
64 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-binary")));
65 assertNotNull(currentLeaf.getType());
67 final var binaryEff = assertInstanceOf(BinaryTypeDefinition.class,
68 assertInstanceOf(TypeEffectiveStatement.class, currentLeaf.asEffectiveStatement()
69 .effectiveSubstatements().iterator().next()).getTypeDefinition());
71 assertNull(binaryEff.getBaseType());
72 assertEquals(Optional.empty(), binaryEff.getUnits());
73 assertEquals(Optional.empty(), binaryEff.getDefaultValue());
74 assertEquals("binary", binaryEff.getQName().getLocalName());
75 assertEquals(Optional.empty(), binaryEff.getLengthConstraint());
76 assertEquals(Status.CURRENT, binaryEff.getStatus());
77 assertNotNull(binaryEff.getUnknownSchemaNodes());
78 assertEquals(Optional.empty(), binaryEff.getDescription());
79 assertEquals(Optional.empty(), binaryEff.getReference());
84 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
85 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-bits")));
86 assertNotNull(currentLeaf.getType());
88 final var bitsEffIter = assertInstanceOf(BitsTypeDefinition.class, currentLeaf.getType()).getBits().iterator();
89 final var bitEff = bitsEffIter.next();
90 final var bitEffSecond = bitsEffIter.next();
92 final var bitsEff = assertInstanceOf(BitsTypeDefinition.class, assertInstanceOf(TypeDefinitionAware.class,
93 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next()).getTypeDefinition());
95 assertNull(bitsEff.getBaseType());
96 assertNotNull(bitsEff.getQName());
97 assertEquals("bits", bitsEff.getQName().getLocalName());
98 assertNotNull(bitsEff.getUnknownSchemaNodes());
99 assertEquals(Optional.empty(), bitsEff.getDescription());
100 assertEquals(Optional.empty(), bitsEff.getReference());
101 assertEquals(Status.CURRENT, bitsEff.getStatus());
102 assertEquals(Optional.empty(), bitsEff.getUnits());
103 assertNotNull(bitsEff.toString());
104 assertNotNull(bitsEff.hashCode());
105 assertNotEquals(null, bitsEff);
106 assertNotEquals("test", bitsEff);
107 assertEquals(bitsEff, bitsEff);
108 assertEquals(3, bitsEff.getBits().size());
109 assertEquals(Optional.empty(), bitsEff.getDefaultValue());
111 assertNotNull(bitEff.getUnknownSchemaNodes());
112 assertEquals(Optional.of("test bit"), bitEff.getDescription());
113 assertEquals(Optional.of("test bit ref"), bitEff.getReference());
114 assertEquals(Status.CURRENT, bitEff.getStatus());
115 assertNotNull(bitEff.hashCode());
116 assertNotEquals(null, bitEff);
117 assertNotEquals("test", bitEff);
118 assertNotEquals(bitEff, bitEffSecond);
119 assertNotNull(bitEff.toString());
120 assertEquals("one", bitEff.getName());
121 assertEquals(Uint32.ZERO, bitEff.getPosition());
126 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
127 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-boolean")));
128 assertNotNull(currentLeaf.getType());
129 final var booleanEff = assertInstanceOf(BooleanTypeDefinition.class,
130 assertInstanceOf(TypeEffectiveStatement.class,
131 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next()).getTypeDefinition());
133 assertNull(booleanEff.getBaseType());
134 assertEquals(Optional.empty(), booleanEff.getUnits());
135 assertEquals(Optional.empty(), booleanEff.getDefaultValue());
136 assertEquals("boolean", booleanEff.getQName().getLocalName());
137 assertNotNull(booleanEff.getUnknownSchemaNodes());
138 assertEquals(Optional.empty(), booleanEff.getDescription());
139 assertEquals(Optional.empty(), booleanEff.getReference());
140 assertEquals(Status.CURRENT, booleanEff.getStatus());
141 assertNotNull(booleanEff.toString());
145 void testDecimal64() {
146 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
147 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-decimal64")));
148 final var decimal64Eff = assertInstanceOf(DecimalTypeDefinition.class,
149 assertInstanceOf(TypeDefinitionAware.class,
150 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next()).getTypeDefinition());
152 assertNull(decimal64Eff.getBaseType());
153 assertEquals(Optional.empty(), decimal64Eff.getUnits());
154 assertEquals(Optional.empty(), decimal64Eff.getDefaultValue());
155 assertEquals("decimal64", decimal64Eff.getQName().getLocalName());
156 assertNotNull(decimal64Eff.getUnknownSchemaNodes());
158 // FIXME: The yang model api is wrong: description/reference/status are not allowed under 'type', how come we
160 // allowed under 'type', how come we parse it?
161 assertEquals(Optional.empty(), decimal64Eff.getDescription());
162 assertEquals(Optional.empty(), decimal64Eff.getReference());
163 assertEquals(Status.CURRENT, decimal64Eff.getStatus());
165 assertEquals(3, decimal64Eff.getRangeConstraint().orElseThrow().getAllowedRanges().asRanges().size());
166 assertNotNull(decimal64Eff.toString());
167 assertNotNull(decimal64Eff.hashCode());
168 assertEquals(2, decimal64Eff.getFractionDigits());
169 assertNotEquals(null, decimal64Eff);
170 assertNotEquals("test", decimal64Eff);
171 assertEquals(decimal64Eff, decimal64Eff);
176 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
177 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-empty")));
178 final var emptyEff = assertInstanceOf(EmptyTypeDefinition.class,
179 assertInstanceOf(TypeEffectiveStatement.class,
180 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next()).getTypeDefinition());
182 assertEquals(Optional.empty(), emptyEff.getUnits());
183 assertEquals(Optional.empty(), emptyEff.getDefaultValue());
184 assertNull(emptyEff.getBaseType());
185 assertEquals("empty", emptyEff.getQName().getLocalName());
186 assertNotNull(emptyEff.getUnknownSchemaNodes());
187 assertEquals(Optional.empty(), emptyEff.getDescription());
188 assertEquals(Optional.empty(), emptyEff.getReference());
189 assertEquals("CURRENT", emptyEff.getStatus().toString());
190 assertNotNull(emptyEff.toString());
195 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
196 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-enum")));
197 final var enumEffIter = assertInstanceOf(EnumTypeDefinition.class, currentLeaf.getType()).getValues();
198 final var enumEff = enumEffIter.iterator().next();
200 final var enumSpecEff = (EnumTypeDefinition) ((TypeDefinitionAware)
201 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
202 .getTypeDefinition();
204 assertEquals("enumeration", enumSpecEff.getQName().getLocalName());
205 assertEquals(Optional.empty(), enumSpecEff.getDefaultValue());
206 assertEquals(3, enumSpecEff.getValues().size());
207 assertNull(enumSpecEff.getBaseType());
208 assertNotNull(enumSpecEff.getUnknownSchemaNodes());
209 assertEquals(Status.CURRENT, enumSpecEff.getStatus());
210 assertEquals(Optional.empty(), enumSpecEff.getDescription());
211 assertEquals(Optional.empty(), enumSpecEff.getReference());
212 assertEquals(Optional.empty(), enumSpecEff.getUnits());
213 assertNotNull(enumSpecEff.toString());
214 assertNotNull(enumSpecEff.hashCode());
215 assertNotEquals(null, enumSpecEff);
216 assertNotEquals("test", enumSpecEff);
217 assertEquals(enumSpecEff, enumSpecEff);
219 assertEquals("zero", enumEff.getName());
220 assertNotNull(enumEff.getUnknownSchemaNodes());
221 assertEquals(Optional.of("test enum"), enumEff.getDescription());
222 assertEquals(Optional.of("test enum ref"), enumEff.getReference());
223 assertEquals(Status.CURRENT, enumEff.getStatus());
224 assertEquals(0, enumEff.getValue());
228 void testIdentityRef() {
229 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
230 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-identityref")));
231 assertNotNull(currentLeaf.getType());
232 final var identityRefEff = assertInstanceOf(IdentityrefTypeDefinition.class,
233 assertInstanceOf(TypeDefinitionAware.class,
234 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next())
235 .getTypeDefinition());
237 assertEquals(Optional.empty(), identityRefEff.getDefaultValue());
238 assertEquals("identityref", identityRefEff.getQName().getLocalName());
239 assertNull(identityRefEff.getBaseType());
240 assertNotNull(identityRefEff.getUnknownSchemaNodes());
241 assertEquals(Status.CURRENT, identityRefEff.getStatus());
242 assertEquals("test-identity", identityRefEff.getIdentities().iterator().next().getQName().getLocalName());
243 assertEquals(Optional.empty(), identityRefEff.getDescription());
244 assertEquals(Optional.empty(), identityRefEff.getReference());
245 assertNotNull(identityRefEff.toString());
247 // FIXME: the model is wrong, but we accept units in 'type' statement
248 assertEquals(Optional.empty(), identityRefEff.getUnits());
252 void testInstanceIdentifier() {
253 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
254 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-instance-identifier")));
255 assertNotNull(currentLeaf.getType());
256 final var instanceIdentEff = assertInstanceOf(InstanceIdentifierTypeDefinition.class,
257 assertInstanceOf(TypeEffectiveStatement.class,
258 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next())
259 .getTypeDefinition());
260 assertNotNull(instanceIdentEff.toString());
262 assertFalse(instanceIdentEff.requireInstance());
263 assertEquals("instance-identifier", instanceIdentEff.getQName().getLocalName());
264 assertNull(instanceIdentEff.getBaseType());
265 assertEquals(Optional.empty(), instanceIdentEff.getDefaultValue());
266 assertNotNull(instanceIdentEff.getUnknownSchemaNodes());
267 assertEquals(Optional.empty(), instanceIdentEff.getDescription());
268 assertEquals(Optional.empty(), instanceIdentEff.getReference());
269 assertEquals(Optional.empty(), instanceIdentEff.getUnits());
270 assertEquals(Status.CURRENT, instanceIdentEff.getStatus());
271 assertNotNull(instanceIdentEff.hashCode());
272 assertNotEquals(null, instanceIdentEff);
273 assertNotEquals("test", instanceIdentEff);
274 assertEquals(instanceIdentEff, instanceIdentEff);
279 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
280 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-leafref")));
281 assertNotNull(currentLeaf.getType());
283 final var leafrefEff = assertInstanceOf(LeafrefTypeDefinition.class,
284 assertInstanceOf(TypeDefinitionAware.class,
285 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next())
286 .getTypeDefinition());
288 assertEquals("/container-test/leaf-test", leafrefEff.getPathStatement().getOriginalString());
289 assertNull(leafrefEff.getBaseType());
290 assertEquals(Optional.empty(), leafrefEff.getUnits());
291 assertEquals(Optional.empty(), leafrefEff.getDefaultValue());
292 assertNotNull(leafrefEff.toString());
293 assertEquals("leafref", leafrefEff.getQName().getLocalName());
294 assertEquals(Status.CURRENT, leafrefEff.getStatus());
295 assertNotNull(leafrefEff.getUnknownSchemaNodes());
296 assertEquals(Optional.empty(), leafrefEff.getDescription());
297 assertEquals(Optional.empty(), leafrefEff.getReference());
298 assertNotNull(leafrefEff.hashCode());
299 assertNotEquals(null, leafrefEff);
300 assertNotEquals("test", leafrefEff);
301 assertEquals(leafrefEff, leafrefEff);
305 void testLeafrefWithDeref() {
306 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
307 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-leafref-deref")));
308 assertNotNull(currentLeaf.getType());
310 final var leafrefEff = assertInstanceOf(LeafrefTypeDefinition.class,
311 assertInstanceOf(TypeDefinitionAware.class,
312 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next())
313 .getTypeDefinition());
315 assertEquals("deref(../container-test)/leaf-test",
316 leafrefEff.getPathStatement().getOriginalString());
317 assertNull(leafrefEff.getBaseType());
318 assertEquals(Optional.empty(), leafrefEff.getUnits());
319 assertEquals(Optional.empty(), leafrefEff.getDefaultValue());
320 assertNotNull(leafrefEff.toString());
321 assertEquals("leafref", leafrefEff.getQName().getLocalName());
322 assertEquals(Status.CURRENT, leafrefEff.getStatus());
323 assertNotNull(leafrefEff.getUnknownSchemaNodes());
324 assertEquals(Optional.empty(), leafrefEff.getDescription());
325 assertEquals(Optional.empty(), leafrefEff.getReference());
326 assertNotNull(leafrefEff.hashCode());
327 assertNotEquals(null, leafrefEff);
328 assertNotEquals("test", leafrefEff);
329 assertEquals(leafrefEff, leafrefEff);
334 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
335 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-int8")));
336 final var int8Eff = assertInstanceOf(TypeEffectiveStatement.class,
337 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next());
338 assertNotNull(int8Eff.toString());
340 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
341 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-int16")));
342 final var int16Eff = assertInstanceOf(TypeEffectiveStatement.class,
343 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next());
344 assertNotNull(int16Eff.toString());
346 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
347 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-int32")));
348 assertNotNull(currentLeaf.getType());
349 final var int32Eff = assertInstanceOf(TypeEffectiveStatement.class,
350 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next());
351 assertNotNull(int32Eff.toString());
353 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
354 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-int64")));
355 assertNotNull(currentLeaf.getType());
356 final var int64Eff = assertInstanceOf(TypeEffectiveStatement.class,
357 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next());
358 assertNotNull(int64Eff.toString());
360 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
361 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-uint8")));
362 assertNotNull(currentLeaf.getType());
363 final var uint8Eff = assertInstanceOf(TypeEffectiveStatement.class,
364 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next());
365 assertNotNull(uint8Eff.toString());
367 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
368 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-uint16")));
369 assertNotNull(currentLeaf.getType());
370 final var uint16Eff = assertInstanceOf(TypeEffectiveStatement.class,
371 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next());
372 assertNotNull(uint16Eff.toString());
374 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
375 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-uint32")));
376 assertNotNull(currentLeaf.getType());
377 final var uint32Eff = assertInstanceOf(TypeEffectiveStatement.class,
378 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next());
379 assertNotNull(uint32Eff.toString());
381 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
382 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-uint64")));
383 assertNotNull(currentLeaf.getType());
384 final var uint64Eff = assertInstanceOf(TypeEffectiveStatement.class,
385 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next());
386 assertNotNull(uint64Eff.toString());
391 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
392 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-union")));
393 assertNotNull(currentLeaf.getType());
394 final var unionEff = assertInstanceOf(UnionTypeDefinition.class,
395 assertInstanceOf(TypeDefinitionAware.class,
396 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next())
397 .getTypeDefinition());
399 assertEquals(2, unionEff.getTypes().size());
400 assertEquals("union", unionEff.getQName().getLocalName());
401 assertEquals("CURRENT", unionEff.getStatus().toString());
402 assertNotNull(unionEff.getUnknownSchemaNodes());
403 assertNull(unionEff.getBaseType());
404 assertEquals(Optional.empty(), unionEff.getUnits());
405 assertEquals(Optional.empty(), unionEff.getDefaultValue());
406 assertEquals(Optional.empty(), unionEff.getDescription());
407 assertEquals(Optional.empty(), unionEff.getReference());
408 assertNotNull(unionEff.toString());
409 assertNotNull(unionEff.hashCode());
410 assertNotEquals(null, unionEff);
411 assertNotEquals("test", unionEff);
412 assertEquals(unionEff, unionEff);
416 void testLengthConstraint() {
417 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
418 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-length-pattern")));
420 final var leafType = assertInstanceOf(StringTypeDefinition.class, currentLeaf.getType());
421 final var lengthConstraint = leafType.getLengthConstraint().orElseThrow();
423 final var span = lengthConstraint.getAllowedRanges().span();
424 assertEquals(1, span.lowerEndpoint().intValue());
425 assertEquals(255, span.upperEndpoint().intValue());
426 assertEquals(Optional.empty(), lengthConstraint.getReference());
427 assertEquals(Optional.empty(), lengthConstraint.getDescription());
428 assertEquals(Optional.empty(), lengthConstraint.getErrorMessage());
429 assertEquals(Optional.empty(), lengthConstraint.getErrorAppTag());
430 assertNotNull(lengthConstraint.toString());
431 assertNotNull(lengthConstraint.hashCode());
432 assertNotEquals(null, lengthConstraint);
433 assertNotEquals("test", lengthConstraint);
435 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
436 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-length-pattern-second")));
437 assertNotNull(currentLeaf.getType());
438 final var lengthConstraintSecond = ((StringTypeDefinition) currentLeaf.getType())
439 .getLengthConstraint().orElseThrow();
440 assertNotEquals(lengthConstraint, lengthConstraintSecond);
444 void testPatternConstraint() {
445 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
446 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-length-pattern")));
447 assertNotNull(currentLeaf.getType());
448 final var patternConstraint = assertInstanceOf(StringTypeDefinition.class,
449 currentLeaf.getType()).getPatternConstraints().get(0);
450 // FIXME: 'third' vs get(0)?!
451 final var patternConstraintThird = assertInstanceOf(StringTypeDefinition.class, currentLeaf.getType())
452 .getPatternConstraints().get(0);
453 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
454 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-length-pattern-second")));
455 assertNotNull(currentLeaf.getType());
456 final var patternConstraintSecond = assertInstanceOf(StringTypeDefinition.class, currentLeaf.getType())
457 .getPatternConstraints().get(0);
459 assertEquals("^(?:[0-9a-fA-F]*)$", patternConstraint.getJavaPatternString());
460 assertEquals(Optional.empty(), patternConstraint.getReference());
461 assertEquals(Optional.empty(), patternConstraint.getDescription());
462 assertEquals(Optional.empty(), patternConstraint.getErrorMessage());
463 assertEquals(Optional.empty(), patternConstraint.getErrorAppTag());
464 assertNotNull(patternConstraint.toString());
465 assertNotNull(patternConstraint.hashCode());
466 assertNotEquals(null, patternConstraint);
467 assertNotEquals("test", patternConstraint);
468 assertNotEquals(patternConstraint, patternConstraintSecond);
469 assertEquals(patternConstraint, patternConstraintThird);
474 currentLeaf = assertInstanceOf(LeafSchemaNode.class,
475 types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-string")));
476 assertNotNull(currentLeaf.getType());
477 final var stringEff = assertInstanceOf(StringTypeDefinition.class,
478 assertInstanceOf(TypeEffectiveStatement.class,
479 currentLeaf.asEffectiveStatement().effectiveSubstatements().iterator().next())
480 .getTypeDefinition());
482 assertEquals("string", stringEff.getQName().getLocalName());
483 assertEquals(Status.CURRENT, stringEff.getStatus());
484 assertEquals(Optional.empty(), stringEff.getUnits());
485 assertEquals(Optional.empty(), stringEff.getDefaultValue());
486 assertNotNull(stringEff.getUnknownSchemaNodes());
487 assertNull(stringEff.getBaseType());
488 assertEquals(Optional.empty(), stringEff.getDescription());
489 assertEquals(Optional.empty(), stringEff.getReference());
490 assertNotNull(stringEff.toString());
491 assertNotNull(stringEff.hashCode());
492 assertNotEquals(null, stringEff);
493 assertNotEquals("test", stringEff);
494 assertEquals(stringEff, stringEff);
495 assertEquals(Optional.empty(), stringEff.getLengthConstraint());
496 assertNotNull(stringEff.getPatternConstraints());