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.common.Uint32;
26 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.Module;
28 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
29 import org.opendaylight.yangtools.yang.model.api.Status;
30 import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
31 import org.opendaylight.yangtools.yang.model.api.stmt.TypeDefinitionAware;
32 import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
33 import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
34 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
35 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit;
36 import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition;
37 import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
38 import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition;
39 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
40 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair;
41 import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
42 import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition;
43 import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
44 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
45 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
46 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
47 import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
48 import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors;
49 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
51 public class EffectiveStatementTypeTest {
52 private static SchemaContext effectiveSchemaContext;
53 private static Module types;
55 private LeafSchemaNode currentLeaf;
58 public static void setup() throws ReactorException {
59 effectiveSchemaContext = RFC7950Reactors.defaultReactor().newBuild()
60 .addSource(sourceForResource("/type-tests/types.yang"))
62 types = effectiveSchemaContext.findModules("types").iterator().next();
67 public static void teardown() {
68 effectiveSchemaContext = null;
73 public void testBinary() {
74 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-binary"));
75 assertNotNull(currentLeaf.getType());
77 final BinaryTypeDefinition binaryEff = (BinaryTypeDefinition)
78 ((TypeEffectiveStatement<?>) ((LeafEffectiveStatement) currentLeaf)
79 .effectiveSubstatements().iterator().next()).getTypeDefinition();
81 assertNull(binaryEff.getBaseType());
82 assertEquals(Optional.empty(), binaryEff.getUnits());
83 assertEquals(Optional.empty(), binaryEff.getDefaultValue());
84 assertEquals("binary", binaryEff.getQName().getLocalName());
85 assertFalse(binaryEff.getLengthConstraint().isPresent());
86 assertEquals(Status.CURRENT, binaryEff.getStatus());
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 assertNotNull(bitsEff.getUnknownSchemaNodes());
109 assertFalse(bitsEff.getDescription().isPresent());
110 assertFalse(bitsEff.getReference().isPresent());
111 assertEquals(Status.CURRENT, bitsEff.getStatus());
112 assertEquals(Optional.empty(), bitsEff.getUnits());
113 assertNotNull(bitsEff.toString());
114 assertNotNull(bitsEff.hashCode());
115 assertFalse(bitsEff.equals(null));
116 assertFalse(bitsEff.equals("test"));
117 assertTrue(bitsEff.equals(bitsEff));
118 assertEquals(3, bitsEff.getBits().size());
119 assertEquals(Optional.empty(), bitsEff.getDefaultValue());
121 assertNotNull(bitEff.getUnknownSchemaNodes());
122 assertEquals(Optional.of("test bit"), bitEff.getDescription());
123 assertEquals(Optional.of("test bit ref"), bitEff.getReference());
124 assertEquals(Status.CURRENT, bitEff.getStatus());
125 assertNotNull(bitEff.hashCode());
126 assertFalse(bitEff.equals(null));
127 assertFalse(bitEff.equals("test"));
128 assertFalse(bitEff.equals(bitEffSecond));
129 assertNotNull(bitEff.toString());
130 assertEquals("one", bitEff.getName());
131 assertEquals(Uint32.ZERO, bitEff.getPosition());
135 public void testBoolean() {
136 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-boolean"));
137 assertNotNull(currentLeaf.getType());
138 final BooleanTypeDefinition booleanEff = (BooleanTypeDefinition) ((TypeEffectiveStatement<?>)
139 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
140 .getTypeDefinition();
142 assertNull(booleanEff.getBaseType());
143 assertEquals(Optional.empty(), booleanEff.getUnits());
144 assertEquals(Optional.empty(), booleanEff.getDefaultValue());
145 assertEquals("boolean", booleanEff.getQName().getLocalName());
146 assertNotNull(booleanEff.getUnknownSchemaNodes());
147 assertFalse(booleanEff.getDescription().isPresent());
148 assertFalse(booleanEff.getReference().isPresent());
149 assertEquals(Status.CURRENT, booleanEff.getStatus());
150 assertNotNull(booleanEff.toString());
154 public void testDecimal64() {
155 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-decimal64"));
156 assertNotNull(currentLeaf.getType());
157 final DecimalTypeDefinition decimal64Eff = (DecimalTypeDefinition) ((TypeDefinitionAware)
158 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
159 .getTypeDefinition();
161 assertNull(decimal64Eff.getBaseType());
162 assertEquals(Optional.empty(), decimal64Eff.getUnits());
163 assertEquals(Optional.empty(), decimal64Eff.getDefaultValue());
164 assertEquals("decimal64", decimal64Eff.getQName().getLocalName());
165 assertNotNull(decimal64Eff.getUnknownSchemaNodes());
167 // FIXME: The yang model api is wrong: description/reference/status are not allowed under 'type', how come we
169 // allowed under 'type', how come we parse it?
170 assertFalse(decimal64Eff.getDescription().isPresent());
171 assertFalse(decimal64Eff.getReference().isPresent());
172 assertEquals(Status.CURRENT, decimal64Eff.getStatus());
174 assertEquals(3, decimal64Eff.getRangeConstraint().get().getAllowedRanges().asRanges().size());
175 assertNotNull(decimal64Eff.toString());
176 assertNotNull(decimal64Eff.hashCode());
177 assertEquals(2, decimal64Eff.getFractionDigits());
178 assertFalse(decimal64Eff.equals(null));
179 assertFalse(decimal64Eff.equals("test"));
180 assertTrue(decimal64Eff.equals(decimal64Eff));
184 public void testEmpty() {
185 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-empty"));
186 assertNotNull(currentLeaf.getType());
187 final EmptyTypeDefinition emptyEff = (EmptyTypeDefinition) ((TypeEffectiveStatement<?>)
188 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
189 .getTypeDefinition();
191 assertEquals(Optional.empty(), emptyEff.getUnits());
192 assertEquals(Optional.empty(), emptyEff.getDefaultValue());
193 assertNull(emptyEff.getBaseType());
194 assertEquals("empty", emptyEff.getQName().getLocalName());
195 assertNotNull(emptyEff.getUnknownSchemaNodes());
196 assertEquals(Optional.empty(), emptyEff.getDescription());
197 assertEquals(Optional.empty(), emptyEff.getReference());
198 assertEquals("CURRENT", emptyEff.getStatus().toString());
199 assertNotNull(emptyEff.toString());
203 public void testEnum() {
204 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-enum"));
205 assertNotNull(currentLeaf.getType());
206 final List<EnumTypeDefinition.EnumPair> enumEffIter = ((EnumTypeDefinition) currentLeaf.getType()).getValues();
207 final EnumPair enumEff = enumEffIter.iterator().next();
209 final EnumTypeDefinition enumSpecEff = (EnumTypeDefinition) ((TypeDefinitionAware)
210 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
211 .getTypeDefinition();
213 assertEquals("enumeration", enumSpecEff.getQName().getLocalName());
214 assertEquals(Optional.empty(), enumSpecEff.getDefaultValue());
215 assertEquals(3, enumSpecEff.getValues().size());
216 assertNull(enumSpecEff.getBaseType());
217 assertNotNull(enumSpecEff.getUnknownSchemaNodes());
218 assertEquals(Status.CURRENT, enumSpecEff.getStatus());
219 assertFalse(enumSpecEff.getDescription().isPresent());
220 assertFalse(enumSpecEff.getReference().isPresent());
221 assertEquals(Optional.empty(), enumSpecEff.getUnits());
222 assertNotNull(enumSpecEff.toString());
223 assertNotNull(enumSpecEff.hashCode());
224 assertFalse(enumSpecEff.equals(null));
225 assertFalse(enumSpecEff.equals("test"));
226 assertTrue(enumSpecEff.equals(enumSpecEff));
228 assertEquals("zero", enumEff.getName());
229 assertNotNull(enumEff.getUnknownSchemaNodes());
230 assertEquals(Optional.of("test enum"), enumEff.getDescription());
231 assertEquals(Optional.of("test enum ref"), enumEff.getReference());
232 assertEquals(Status.CURRENT, enumEff.getStatus());
233 assertEquals(0, enumEff.getValue());
237 public void testIdentityRef() {
238 currentLeaf = (LeafSchemaNode) types
239 .getDataChildByName(QName.create(types.getQNameModule(), "leaf-identityref"));
240 assertNotNull(currentLeaf.getType());
241 final IdentityrefTypeDefinition identityRefEff = (IdentityrefTypeDefinition) ((TypeDefinitionAware)
242 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
243 .getTypeDefinition();
245 assertEquals(Optional.empty(), identityRefEff.getDefaultValue());
246 assertEquals("identityref", identityRefEff.getQName().getLocalName());
247 assertNull(identityRefEff.getBaseType());
248 assertNotNull(identityRefEff.getUnknownSchemaNodes());
249 assertEquals(Status.CURRENT, identityRefEff.getStatus());
250 assertEquals("test-identity", identityRefEff.getIdentities().iterator().next().getQName().getLocalName());
251 assertFalse(identityRefEff.getDescription().isPresent());
252 assertFalse(identityRefEff.getReference().isPresent());
253 assertNotNull(identityRefEff.toString());
255 // FIXME: the model is wrong, but we accept units in 'type' statement
256 assertEquals(Optional.empty(), identityRefEff.getUnits());
260 public void testInstanceIdentifier() {
261 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(),
262 "leaf-instance-identifier"));
263 assertNotNull(currentLeaf.getType());
264 final InstanceIdentifierTypeDefinition instanceIdentEff = (InstanceIdentifierTypeDefinition)
265 ((TypeEffectiveStatement<?>) ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements()
266 .iterator().next()).getTypeDefinition();
267 assertNotNull(instanceIdentEff.toString());
269 assertFalse(instanceIdentEff.requireInstance());
270 assertEquals("instance-identifier", instanceIdentEff.getQName().getLocalName());
271 assertNull(instanceIdentEff.getBaseType());
272 assertEquals(Optional.empty(), instanceIdentEff.getDefaultValue());
273 assertNotNull(instanceIdentEff.getUnknownSchemaNodes());
274 assertFalse(instanceIdentEff.getDescription().isPresent());
275 assertFalse(instanceIdentEff.getReference().isPresent());
276 assertEquals(Optional.empty(), instanceIdentEff.getUnits());
277 assertEquals(Status.CURRENT, instanceIdentEff.getStatus());
278 assertNotNull(instanceIdentEff.hashCode());
279 assertFalse(instanceIdentEff.equals(null));
280 assertFalse(instanceIdentEff.equals("test"));
281 assertTrue(instanceIdentEff.equals(instanceIdentEff));
285 public void testLeafref() {
286 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-leafref"));
287 assertNotNull(currentLeaf.getType());
289 final LeafrefTypeDefinition leafrefEff = (LeafrefTypeDefinition) ((TypeDefinitionAware)
290 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
291 .getTypeDefinition();
293 assertEquals("/container-test/leaf-test", leafrefEff.getPathStatement().getOriginalString());
294 assertNull(leafrefEff.getBaseType());
295 assertEquals(Optional.empty(), leafrefEff.getUnits());
296 assertEquals(Optional.empty(), leafrefEff.getDefaultValue());
297 assertNotNull(leafrefEff.toString());
298 assertEquals("leafref", leafrefEff.getQName().getLocalName());
299 assertEquals(Status.CURRENT, leafrefEff.getStatus());
300 assertNotNull(leafrefEff.getUnknownSchemaNodes());
301 assertFalse(leafrefEff.getDescription().isPresent());
302 assertFalse(leafrefEff.getReference().isPresent());
303 assertNotNull(leafrefEff.hashCode());
304 assertFalse(leafrefEff.equals(null));
305 assertFalse(leafrefEff.equals("test"));
306 assertTrue(leafrefEff.equals(leafrefEff));
310 public void testLeafrefWithDeref() {
311 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName
312 .create(types.getQNameModule(), "leaf-leafref-deref"));
313 assertNotNull(currentLeaf.getType());
315 final LeafrefTypeDefinition leafrefEff = (LeafrefTypeDefinition) ((TypeDefinitionAware)
316 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
317 .getTypeDefinition();
319 assertEquals("deref(../container-test)/leaf-test",
320 leafrefEff.getPathStatement().getOriginalString());
321 assertNull(leafrefEff.getBaseType());
322 assertEquals(Optional.empty(), leafrefEff.getUnits());
323 assertEquals(Optional.empty(), leafrefEff.getDefaultValue());
324 assertNotNull(leafrefEff.toString());
325 assertEquals("leafref", leafrefEff.getQName().getLocalName());
326 assertEquals(Status.CURRENT, leafrefEff.getStatus());
327 assertNotNull(leafrefEff.getUnknownSchemaNodes());
328 assertFalse(leafrefEff.getDescription().isPresent());
329 assertFalse(leafrefEff.getReference().isPresent());
330 assertNotNull(leafrefEff.hashCode());
331 assertFalse(leafrefEff.equals(null));
332 assertFalse(leafrefEff.equals("test"));
333 assertTrue(leafrefEff.equals(leafrefEff));
337 public void testIntAll() {
338 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-int8"));
339 assertNotNull(currentLeaf.getType());
340 final TypeEffectiveStatement<?> int8Eff = (TypeEffectiveStatement<?>)
341 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next();
342 assertNotNull(int8Eff.toString());
344 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-int16"));
345 assertNotNull(currentLeaf.getType());
346 final TypeEffectiveStatement<?> int16Eff = (TypeEffectiveStatement<?>)
347 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next();
348 assertNotNull(int16Eff.toString());
350 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-int32"));
351 assertNotNull(currentLeaf.getType());
352 final TypeEffectiveStatement<?> int32Eff = (TypeEffectiveStatement<?>)
353 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next();
354 assertNotNull(int32Eff.toString());
356 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-int64"));
357 assertNotNull(currentLeaf.getType());
358 final TypeEffectiveStatement<?> int64Eff = (TypeEffectiveStatement<?>)
359 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next();
360 assertNotNull(int64Eff.toString());
362 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-uint8"));
363 assertNotNull(currentLeaf.getType());
364 final TypeEffectiveStatement<?> uint8Eff = (TypeEffectiveStatement<?>)
365 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next();
366 assertNotNull(uint8Eff.toString());
368 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-uint16"));
369 assertNotNull(currentLeaf.getType());
370 final TypeEffectiveStatement<?> uint16Eff = (TypeEffectiveStatement<?>)
371 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next();
372 assertNotNull(uint16Eff.toString());
374 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-uint32"));
375 assertNotNull(currentLeaf.getType());
376 final TypeEffectiveStatement<?> uint32Eff = (TypeEffectiveStatement<?>)
377 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next();
378 assertNotNull(uint32Eff.toString());
380 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-uint64"));
381 assertNotNull(currentLeaf.getType());
382 final TypeEffectiveStatement<?> uint64Eff = (TypeEffectiveStatement<?>)
383 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next();
384 assertNotNull(uint64Eff.toString());
388 public void testUnion() {
389 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-union"));
390 assertNotNull(currentLeaf.getType());
391 final UnionTypeDefinition unionEff = (UnionTypeDefinition) ((TypeDefinitionAware)
392 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
393 .getTypeDefinition();
395 assertEquals(2, unionEff.getTypes().size());
396 assertEquals("union", unionEff.getQName().getLocalName());
397 assertEquals("CURRENT", unionEff.getStatus().toString());
398 assertNotNull(unionEff.getUnknownSchemaNodes());
399 assertNull(unionEff.getBaseType());
400 assertEquals(Optional.empty(), unionEff.getUnits());
401 assertEquals(Optional.empty(), unionEff.getDefaultValue());
402 assertFalse(unionEff.getDescription().isPresent());
403 assertFalse(unionEff.getReference().isPresent());
404 assertNotNull(unionEff.toString());
405 assertNotNull(unionEff.hashCode());
406 assertFalse(unionEff.equals(null));
407 assertFalse(unionEff.equals("test"));
408 assertTrue(unionEff.equals(unionEff));
412 public void testLengthConstraint() {
413 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(),
414 "leaf-length-pattern"));
416 final StringTypeDefinition leafType = (StringTypeDefinition) currentLeaf.getType();
417 assertNotNull(leafType);
418 final LengthConstraint lengthConstraint = leafType.getLengthConstraint().get();
420 final Range<Integer> span = lengthConstraint.getAllowedRanges().span();
421 assertEquals(1, span.lowerEndpoint().intValue());
422 assertEquals(255, span.upperEndpoint().intValue());
423 assertFalse(lengthConstraint.getReference().isPresent());
424 assertFalse(lengthConstraint.getDescription().isPresent());
425 assertFalse(lengthConstraint.getErrorMessage().isPresent());
426 assertFalse(lengthConstraint.getErrorAppTag().isPresent());
427 assertNotNull(lengthConstraint.toString());
428 assertNotNull(lengthConstraint.hashCode());
429 assertFalse(lengthConstraint.equals(null));
430 assertFalse(lengthConstraint.equals("test"));
432 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(),
433 "leaf-length-pattern-second"));
434 assertNotNull(currentLeaf.getType());
435 final LengthConstraint lengthConstraintSecond = ((StringTypeDefinition) currentLeaf.getType())
436 .getLengthConstraint().get();
437 assertFalse(lengthConstraint.equals(lengthConstraintSecond));
441 public void testPatternConstraint() {
442 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(),
443 "leaf-length-pattern"));
444 assertNotNull(currentLeaf.getType());
445 final PatternConstraint patternConstraint = ((StringTypeDefinition) currentLeaf.getType())
446 .getPatternConstraints().get(0);
447 final PatternConstraint patternConstraintThird = ((StringTypeDefinition) currentLeaf.getType())
448 .getPatternConstraints().get(0);
449 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(),
450 "leaf-length-pattern-second"));
451 assertNotNull(currentLeaf.getType());
452 final PatternConstraint patternConstraintSecond = ((StringTypeDefinition) currentLeaf.getType())
453 .getPatternConstraints().get(0);
455 assertEquals("^(?:[0-9a-fA-F]*)$", patternConstraint.getJavaPatternString());
456 assertFalse(patternConstraint.getReference().isPresent());
457 assertFalse(patternConstraint.getDescription().isPresent());
458 assertEquals(Optional.empty(), patternConstraint.getErrorMessage());
459 assertEquals(Optional.empty(), patternConstraint.getErrorAppTag());
460 assertNotNull(patternConstraint.toString());
461 assertNotNull(patternConstraint.hashCode());
462 assertFalse(patternConstraint.equals(null));
463 assertFalse(patternConstraint.equals("test"));
464 assertFalse(patternConstraint.equals(patternConstraintSecond));
465 assertTrue(patternConstraint.equals(patternConstraintThird));
469 public void testString() {
470 currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-string"));
471 assertNotNull(currentLeaf.getType());
472 final StringTypeDefinition stringEff = (StringTypeDefinition) ((TypeEffectiveStatement<?>)
473 ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next())
474 .getTypeDefinition();
476 assertEquals("string", stringEff.getQName().getLocalName());
477 assertEquals(Status.CURRENT, stringEff.getStatus());
478 assertEquals(Optional.empty(), stringEff.getUnits());
479 assertEquals(Optional.empty(), stringEff.getDefaultValue());
480 assertNotNull(stringEff.getUnknownSchemaNodes());
481 assertNull(stringEff.getBaseType());
482 assertFalse(stringEff.getDescription().isPresent());
483 assertFalse(stringEff.getReference().isPresent());
484 assertNotNull(stringEff.toString());
485 assertNotNull(stringEff.hashCode());
486 assertFalse(stringEff.equals(null));
487 assertFalse(stringEff.equals("test"));
488 assertTrue(stringEff.equals(stringEff));
489 assertFalse(stringEff.getLengthConstraint().isPresent());
490 assertNotNull(stringEff.getPatternConstraints());