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.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertNull;
14 import static org.junit.Assert.assertTrue;
15 import static org.opendaylight.yangtools.yang.stmt.StmtTestUtils.sourceForResource;
17 import com.google.common.collect.Range;
18 import java.util.Iterator;
19 import java.util.List;
20 import java.util.Optional;
21 import org.junit.AfterClass;
22 import org.junit.BeforeClass;
23 import org.junit.Test;
24 import org.opendaylight.yangtools.yang.common.QName;
25 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.Module;
27 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
28 import org.opendaylight.yangtools.yang.model.api.Status;
29 import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
30 import org.opendaylight.yangtools.yang.model.api.stmt.TypeDefinitionAware;
31 import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
32 import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
33 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
34 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit;
35 import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition;
36 import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
37 import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition;
38 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
39 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair;
40 import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
41 import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition;
42 import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
43 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
44 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
45 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
46 import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
47 import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors;
48 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
50 public class EffectiveStatementTypeTest {
51 private static SchemaContext effectiveSchemaContext;
52 private static Module types;
54 private LeafSchemaNode currentLeaf;
57 public static void setup() throws ReactorException {
58 effectiveSchemaContext = RFC7950Reactors.defaultReactor().newBuild()
59 .addSource(sourceForResource("/type-tests/types.yang"))
61 types = effectiveSchemaContext.findModules("types").iterator().next();
66 public static void teardown() {
67 effectiveSchemaContext = null;
72 public void testBinary() {
73 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-binary"));
74 assertNotNull(currentLeaf.getType());
76 final BinaryTypeDefinition binaryEff = (BinaryTypeDefinition)
77 ((TypeEffectiveStatement<?>) ((LeafEffectiveStatement) currentLeaf)
78 .effectiveSubstatements().iterator().next()).getTypeDefinition();
80 assertNull(binaryEff.getBaseType());
81 assertEquals(Optional.empty(), binaryEff.getUnits());
82 assertEquals(Optional.empty(), binaryEff.getDefaultValue());
83 assertEquals("binary", binaryEff.getQName().getLocalName());
84 assertFalse(binaryEff.getLengthConstraint().isPresent());
85 assertEquals(Status.CURRENT, binaryEff.getStatus());
86 assertEquals("binary", binaryEff.getPath().getPathFromRoot().iterator().next().getLocalName());
87 assertNotNull(binaryEff.getUnknownSchemaNodes());
88 assertFalse(binaryEff.getDescription().isPresent());
89 assertFalse(binaryEff.getReference().isPresent());
93 public void testBits() {
94 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-bits"));
95 assertNotNull(currentLeaf.getType());
97 final Iterator<? extends Bit> bitsEffIter = ((BitsTypeDefinition) currentLeaf.getType()).getBits().iterator();
98 final Bit bitEff = bitsEffIter.next();
99 final Bit bitEffSecond = bitsEffIter.next();
101 final BitsTypeDefinition bitsEff = (BitsTypeDefinition) ((TypeDefinitionAware)
102 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
103 .getTypeDefinition();
105 assertNull(bitsEff.getBaseType());
106 assertNotNull(bitsEff.getQName());
107 assertEquals("bits", bitsEff.getQName().getLocalName());
108 assertEquals("bits", bitsEff.getPath().getLastComponent().getLocalName());
109 assertNotNull(bitsEff.getUnknownSchemaNodes());
110 assertFalse(bitsEff.getDescription().isPresent());
111 assertFalse(bitsEff.getReference().isPresent());
112 assertEquals(Status.CURRENT, bitsEff.getStatus());
113 assertEquals(Optional.empty(), bitsEff.getUnits());
114 assertNotNull(bitsEff.toString());
115 assertNotNull(bitsEff.hashCode());
116 assertFalse(bitsEff.equals(null));
117 assertFalse(bitsEff.equals("test"));
118 assertTrue(bitsEff.equals(bitsEff));
119 assertEquals(3, bitsEff.getBits().size());
120 assertEquals(Optional.empty(), bitsEff.getDefaultValue());
122 assertNotNull(bitEff.getPath());
123 assertNotNull(bitEff.getUnknownSchemaNodes());
124 assertEquals(Optional.of("test bit"), bitEff.getDescription());
125 assertEquals(Optional.of("test bit ref"), bitEff.getReference());
126 assertEquals(Status.CURRENT, bitEff.getStatus());
127 assertNotNull(bitEff.hashCode());
128 assertFalse(bitEff.equals(null));
129 assertFalse(bitEff.equals("test"));
130 assertFalse(bitEff.equals(bitEffSecond));
131 assertNotNull(bitEff.toString());
132 assertEquals("one", bitEff.getName());
133 assertNotNull(bitEff.getQName());
134 assertEquals(0, bitEff.getPosition());
138 public void testBoolean() {
139 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-boolean"));
140 assertNotNull(currentLeaf.getType());
141 final BooleanTypeDefinition booleanEff = (BooleanTypeDefinition) ((TypeEffectiveStatement<?>)
142 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
143 .getTypeDefinition();
145 assertNull(booleanEff.getBaseType());
146 assertEquals(Optional.empty(), booleanEff.getUnits());
147 assertEquals(Optional.empty(), booleanEff.getDefaultValue());
148 assertEquals("boolean", booleanEff.getQName().getLocalName());
149 assertNull(booleanEff.getPath().getParent().getParent());
150 assertNotNull(booleanEff.getUnknownSchemaNodes());
151 assertFalse(booleanEff.getDescription().isPresent());
152 assertFalse(booleanEff.getReference().isPresent());
153 assertEquals(Status.CURRENT, booleanEff.getStatus());
154 assertNotNull(booleanEff.toString());
158 public void testDecimal64() {
159 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-decimal64"));
160 assertNotNull(currentLeaf.getType());
161 final DecimalTypeDefinition decimal64Eff = (DecimalTypeDefinition) ((TypeDefinitionAware)
162 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
163 .getTypeDefinition();
165 assertNull(decimal64Eff.getBaseType());
166 assertEquals(Optional.empty(), decimal64Eff.getUnits());
167 assertEquals(Optional.empty(), decimal64Eff.getDefaultValue());
168 assertEquals("decimal64", decimal64Eff.getQName().getLocalName());
169 assertNotNull(decimal64Eff.getUnknownSchemaNodes());
171 // FIXME: The yang model api is wrong: description/reference/status are not allowed under 'type', how come we
173 // allowed under 'type', how come we parse it?
174 assertFalse(decimal64Eff.getDescription().isPresent());
175 assertFalse(decimal64Eff.getReference().isPresent());
176 assertEquals(Status.CURRENT, decimal64Eff.getStatus());
178 assertEquals(3, decimal64Eff.getRangeConstraint().get().getAllowedRanges().asRanges().size());
179 assertNotNull(decimal64Eff.toString());
180 assertNotNull(decimal64Eff.hashCode());
181 assertEquals(2, decimal64Eff.getFractionDigits());
182 assertFalse(decimal64Eff.equals(null));
183 assertFalse(decimal64Eff.equals("test"));
184 assertTrue(decimal64Eff.equals(decimal64Eff));
185 assertEquals("decimal64", decimal64Eff.getPath().getLastComponent().getLocalName());
189 public void testEmpty() {
190 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-empty"));
191 assertNotNull(currentLeaf.getType());
192 final EmptyTypeDefinition emptyEff = (EmptyTypeDefinition) ((TypeEffectiveStatement<?>)
193 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
194 .getTypeDefinition();
196 assertEquals(Optional.empty(), emptyEff.getUnits());
197 assertEquals(Optional.empty(), emptyEff.getDefaultValue());
198 assertNull(emptyEff.getBaseType());
199 assertEquals("empty", emptyEff.getQName().getLocalName());
200 assertNull(emptyEff.getPath().getParent().getParent());
201 assertNotNull(emptyEff.getUnknownSchemaNodes());
202 assertFalse(emptyEff.getDescription().isPresent());
203 assertFalse(emptyEff.getReference().isPresent());
204 assertEquals("CURRENT", emptyEff.getStatus().toString());
205 assertNotNull(emptyEff.toString());
209 public void testEnum() {
210 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-enum"));
211 assertNotNull(currentLeaf.getType());
212 final List<EnumTypeDefinition.EnumPair> enumEffIter = ((EnumTypeDefinition) currentLeaf.getType()).getValues();
213 final EnumPair enumEff = enumEffIter.iterator().next();
215 final EnumTypeDefinition enumSpecEff = (EnumTypeDefinition) ((TypeDefinitionAware)
216 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
217 .getTypeDefinition();
219 assertEquals("enumeration", enumSpecEff.getQName().getLocalName());
220 assertEquals("enumeration", enumSpecEff.getPath().getLastComponent().getLocalName());
221 assertEquals(Optional.empty(), enumSpecEff.getDefaultValue());
222 assertEquals(3, enumSpecEff.getValues().size());
223 assertNull(enumSpecEff.getBaseType());
224 assertNotNull(enumSpecEff.getUnknownSchemaNodes());
225 assertEquals(Status.CURRENT, enumSpecEff.getStatus());
226 assertFalse(enumSpecEff.getDescription().isPresent());
227 assertFalse(enumSpecEff.getReference().isPresent());
228 assertEquals(Optional.empty(), enumSpecEff.getUnits());
229 assertNotNull(enumSpecEff.toString());
230 assertNotNull(enumSpecEff.hashCode());
231 assertFalse(enumSpecEff.equals(null));
232 assertFalse(enumSpecEff.equals("test"));
233 assertTrue(enumSpecEff.equals(enumSpecEff));
235 assertEquals("zero", enumEff.getName());
236 assertNotNull(enumEff.getUnknownSchemaNodes());
237 assertEquals(Optional.of("test enum"), enumEff.getDescription());
238 assertEquals(Optional.of("test enum ref"), enumEff.getReference());
239 assertEquals(Status.CURRENT, enumEff.getStatus());
240 assertEquals(0, enumEff.getValue());
244 public void testIdentityRef() {
245 currentLeaf = (LeafSchemaNode) types
246 .getDataChildByName(QName.create(types.getQNameModule(), "leaf-identityref"));
247 assertNotNull(currentLeaf.getType());
248 final IdentityrefTypeDefinition identityRefEff = (IdentityrefTypeDefinition) ((TypeDefinitionAware)
249 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
250 .getTypeDefinition();
252 assertEquals(Optional.empty(), identityRefEff.getDefaultValue());
253 assertEquals("identityref", identityRefEff.getQName().getLocalName());
254 assertEquals("identityref", identityRefEff.getPath().getLastComponent().getLocalName());
255 assertNull(identityRefEff.getBaseType());
256 assertNotNull(identityRefEff.getUnknownSchemaNodes());
257 assertEquals(Status.CURRENT, identityRefEff.getStatus());
258 assertEquals("test-identity", identityRefEff.getIdentities().iterator().next().getQName().getLocalName());
259 assertFalse(identityRefEff.getDescription().isPresent());
260 assertFalse(identityRefEff.getReference().isPresent());
261 assertNotNull(identityRefEff.toString());
263 // FIXME: the model is wrong, but we accept units in 'type' statement
264 assertEquals(Optional.empty(), identityRefEff.getUnits());
268 public void testInstanceIdentifier() {
269 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(),
270 "leaf-instance-identifier"));
271 assertNotNull(currentLeaf.getType());
272 final InstanceIdentifierTypeDefinition instanceIdentEff = (InstanceIdentifierTypeDefinition)
273 ((TypeEffectiveStatement<?>) ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements()
274 .iterator().next()).getTypeDefinition();
275 assertNotNull(instanceIdentEff.toString());
277 assertFalse(instanceIdentEff.requireInstance());
278 assertEquals("instance-identifier", instanceIdentEff.getQName().getLocalName());
279 assertEquals("instance-identifier", instanceIdentEff.getPath().getLastComponent().getLocalName());
280 assertNull(instanceIdentEff.getBaseType());
281 assertEquals(Optional.empty(), instanceIdentEff.getDefaultValue());
282 assertNotNull(instanceIdentEff.getUnknownSchemaNodes());
283 assertFalse(instanceIdentEff.getDescription().isPresent());
284 assertFalse(instanceIdentEff.getReference().isPresent());
285 assertEquals(Optional.empty(), instanceIdentEff.getUnits());
286 assertEquals(Status.CURRENT, instanceIdentEff.getStatus());
287 assertNotNull(instanceIdentEff.hashCode());
288 assertFalse(instanceIdentEff.equals(null));
289 assertFalse(instanceIdentEff.equals("test"));
290 assertTrue(instanceIdentEff.equals(instanceIdentEff));
294 public void testLeafref() {
295 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-leafref"));
296 assertNotNull(currentLeaf.getType());
298 final LeafrefTypeDefinition leafrefEff = (LeafrefTypeDefinition) ((TypeDefinitionAware)
299 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
300 .getTypeDefinition();
302 assertEquals("/container-test/leaf-test", leafrefEff.getPathStatement().getOriginalString());
303 assertNull(leafrefEff.getBaseType());
304 assertEquals(Optional.empty(), leafrefEff.getUnits());
305 assertEquals(Optional.empty(), leafrefEff.getDefaultValue());
306 assertNotNull(leafrefEff.toString());
307 assertEquals("leafref", leafrefEff.getQName().getLocalName());
308 assertEquals(Status.CURRENT, leafrefEff.getStatus());
309 assertNotNull(leafrefEff.getUnknownSchemaNodes());
310 assertEquals("leafref", leafrefEff.getPath().getLastComponent().getLocalName());
311 assertFalse(leafrefEff.getDescription().isPresent());
312 assertFalse(leafrefEff.getReference().isPresent());
313 assertNotNull(leafrefEff.hashCode());
314 assertFalse(leafrefEff.equals(null));
315 assertFalse(leafrefEff.equals("test"));
316 assertTrue(leafrefEff.equals(leafrefEff));
320 public void testLeafrefWithDeref() {
321 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName
322 .create(types.getQNameModule(), "leaf-leafref-deref"));
323 assertNotNull(currentLeaf.getType());
325 final LeafrefTypeDefinition leafrefEff = (LeafrefTypeDefinition) ((TypeDefinitionAware)
326 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
327 .getTypeDefinition();
329 assertEquals("deref(../container-test)/leaf-test",
330 leafrefEff.getPathStatement().getOriginalString());
331 assertNull(leafrefEff.getBaseType());
332 assertEquals(Optional.empty(), leafrefEff.getUnits());
333 assertEquals(Optional.empty(), leafrefEff.getDefaultValue());
334 assertNotNull(leafrefEff.toString());
335 assertEquals("leafref", leafrefEff.getQName().getLocalName());
336 assertEquals(Status.CURRENT, leafrefEff.getStatus());
337 assertNotNull(leafrefEff.getUnknownSchemaNodes());
338 assertEquals("leafref", leafrefEff.getPath().getLastComponent().getLocalName());
339 assertFalse(leafrefEff.getDescription().isPresent());
340 assertFalse(leafrefEff.getReference().isPresent());
341 assertNotNull(leafrefEff.hashCode());
342 assertFalse(leafrefEff.equals(null));
343 assertFalse(leafrefEff.equals("test"));
344 assertTrue(leafrefEff.equals(leafrefEff));
348 public void testIntAll() {
349 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-int8"));
350 assertNotNull(currentLeaf.getType());
351 final TypeEffectiveStatement<?> int8Eff = (TypeEffectiveStatement<?>)
352 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next();
353 assertNotNull(int8Eff.toString());
355 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-int16"));
356 assertNotNull(currentLeaf.getType());
357 final TypeEffectiveStatement<?> int16Eff = (TypeEffectiveStatement<?>)
358 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next();
359 assertNotNull(int16Eff.toString());
361 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-int32"));
362 assertNotNull(currentLeaf.getType());
363 final TypeEffectiveStatement<?> int32Eff = (TypeEffectiveStatement<?>)
364 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next();
365 assertNotNull(int32Eff.toString());
367 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-int64"));
368 assertNotNull(currentLeaf.getType());
369 final TypeEffectiveStatement<?> int64Eff = (TypeEffectiveStatement<?>)
370 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next();
371 assertNotNull(int64Eff.toString());
373 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-uint8"));
374 assertNotNull(currentLeaf.getType());
375 final TypeEffectiveStatement<?> uint8Eff = (TypeEffectiveStatement<?>)
376 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next();
377 assertNotNull(uint8Eff.toString());
379 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-uint16"));
380 assertNotNull(currentLeaf.getType());
381 final TypeEffectiveStatement<?> uint16Eff = (TypeEffectiveStatement<?>)
382 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next();
383 assertNotNull(uint16Eff.toString());
385 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-uint32"));
386 assertNotNull(currentLeaf.getType());
387 final TypeEffectiveStatement<?> uint32Eff = (TypeEffectiveStatement<?>)
388 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next();
389 assertNotNull(uint32Eff.toString());
391 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-uint64"));
392 assertNotNull(currentLeaf.getType());
393 final TypeEffectiveStatement<?> uint64Eff = (TypeEffectiveStatement<?>)
394 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next();
395 assertNotNull(uint64Eff.toString());
399 public void testUnion() {
400 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-union"));
401 assertNotNull(currentLeaf.getType());
402 final UnionTypeDefinition unionEff = (UnionTypeDefinition) ((TypeDefinitionAware)
403 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
404 .getTypeDefinition();
406 assertEquals(2, unionEff.getTypes().size());
407 assertEquals("union", unionEff.getQName().getLocalName());
408 assertEquals("CURRENT", unionEff.getStatus().toString());
409 assertNotNull(unionEff.getUnknownSchemaNodes());
410 assertNull(unionEff.getBaseType());
411 assertEquals(Optional.empty(), unionEff.getUnits());
412 assertEquals(Optional.empty(), unionEff.getDefaultValue());
413 assertFalse(unionEff.getDescription().isPresent());
414 assertFalse(unionEff.getReference().isPresent());
415 assertNotNull(unionEff.toString());
416 assertNotNull(unionEff.hashCode());
417 assertFalse(unionEff.equals(null));
418 assertFalse(unionEff.equals("test"));
419 assertTrue(unionEff.equals(unionEff));
420 assertEquals("union", unionEff.getPath().getLastComponent().getLocalName());
424 public void testLengthConstraint() {
425 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(),
426 "leaf-length-pattern"));
428 final StringTypeDefinition leafType = (StringTypeDefinition) currentLeaf.getType();
429 assertNotNull(leafType);
430 final LengthConstraint lengthConstraint = leafType.getLengthConstraint().get();
432 final Range<Integer> span = lengthConstraint.getAllowedRanges().span();
433 assertEquals(1, span.lowerEndpoint().intValue());
434 assertEquals(255, span.upperEndpoint().intValue());
435 assertFalse(lengthConstraint.getReference().isPresent());
436 assertFalse(lengthConstraint.getDescription().isPresent());
437 assertFalse(lengthConstraint.getErrorMessage().isPresent());
438 assertFalse(lengthConstraint.getErrorAppTag().isPresent());
439 assertNotNull(lengthConstraint.toString());
440 assertNotNull(lengthConstraint.hashCode());
441 assertFalse(lengthConstraint.equals(null));
442 assertFalse(lengthConstraint.equals("test"));
444 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(),
445 "leaf-length-pattern-second"));
446 assertNotNull(currentLeaf.getType());
447 final LengthConstraint lengthConstraintSecond = ((StringTypeDefinition) currentLeaf.getType())
448 .getLengthConstraint().get();
449 assertFalse(lengthConstraint.equals(lengthConstraintSecond));
453 public void testPatternConstraint() {
454 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(),
455 "leaf-length-pattern"));
456 assertNotNull(currentLeaf.getType());
457 final PatternConstraint patternConstraint = ((StringTypeDefinition) currentLeaf.getType())
458 .getPatternConstraints().get(0);
459 final PatternConstraint patternConstraintThird = ((StringTypeDefinition) currentLeaf.getType())
460 .getPatternConstraints().get(0);
461 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(),
462 "leaf-length-pattern-second"));
463 assertNotNull(currentLeaf.getType());
464 final PatternConstraint patternConstraintSecond = ((StringTypeDefinition) currentLeaf.getType())
465 .getPatternConstraints().get(0);
467 assertEquals("^(?:[0-9a-fA-F]*)$", patternConstraint.getJavaPatternString());
468 assertFalse(patternConstraint.getReference().isPresent());
469 assertFalse(patternConstraint.getDescription().isPresent());
470 assertEquals(Optional.empty(), patternConstraint.getErrorMessage());
471 assertEquals(Optional.of("invalid-regular-expression"), patternConstraint.getErrorAppTag());
472 assertNotNull(patternConstraint.toString());
473 assertNotNull(patternConstraint.hashCode());
474 assertFalse(patternConstraint.equals(null));
475 assertFalse(patternConstraint.equals("test"));
476 assertFalse(patternConstraint.equals(patternConstraintSecond));
477 assertTrue(patternConstraint.equals(patternConstraintThird));
481 public void testString() {
482 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-string"));
483 assertNotNull(currentLeaf.getType());
484 final StringTypeDefinition stringEff = (StringTypeDefinition) ((TypeEffectiveStatement<?>)
485 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
486 .getTypeDefinition();
488 assertEquals("string", stringEff.getQName().getLocalName());
489 assertEquals(Status.CURRENT, stringEff.getStatus());
490 assertEquals(Optional.empty(), stringEff.getUnits());
491 assertEquals(Optional.empty(), stringEff.getDefaultValue());
492 assertNotNull(stringEff.getUnknownSchemaNodes());
493 assertNull(stringEff.getBaseType());
494 assertFalse(stringEff.getDescription().isPresent());
495 assertFalse(stringEff.getReference().isPresent());
496 assertNotNull(stringEff.toString());
497 assertNotNull(stringEff.hashCode());
498 assertFalse(stringEff.equals(null));
499 assertFalse(stringEff.equals("test"));
500 assertTrue(stringEff.equals(stringEff));
501 assertEquals("string", stringEff.getPath().getLastComponent().getLocalName());
502 assertFalse(stringEff.getLengthConstraint().isPresent());
503 assertNotNull(stringEff.getPatternConstraints());