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
9 package org.opendaylight.yangtools.yang.model.util.type;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertNotNull;
14 import static org.junit.Assert.assertTrue;
15 import static org.mockito.Mockito.mock;
16 import com.google.common.base.Optional;
17 import java.util.ArrayList;
18 import org.junit.Test;
19 import org.opendaylight.yangtools.concepts.Builder;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
23 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
24 import org.opendaylight.yangtools.yang.model.api.Status;
25 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
26 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
28 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
29 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit;
30 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair;
31 import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
32 import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition;
33 import org.opendaylight.yangtools.yang.model.api.type.IntegerTypeDefinition;
34 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
35 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
36 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
37 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
38 import org.opendaylight.yangtools.yang.model.api.type.UnsignedIntegerTypeDefinition;
39 import org.opendaylight.yangtools.yang.model.util.BaseConstraints;
40 import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl;
41 import org.opendaylight.yangtools.yang.model.util.UnresolvedNumber;
43 public class TypeTest {
44 private static final QName Q_NAME = QName.create("test.namespace", "2016-01-01", "test-name");
45 private static final SchemaPath SCHEMA_PATH = SchemaPath.create(true, Q_NAME);
46 private static final RevisionAwareXPath REVISION_AWARE_XPATH = new RevisionAwareXPathImpl("/test", true);
47 private static final Bit BIT_A = BitBuilder.create(SCHEMA_PATH, 55L).setDescription("description")
48 .setReference("reference").build();
49 private static final Optional<String> ABSENT = Optional.absent();
52 public void binaryTypeTest() {
53 final BaseBinaryType baseBinaryType1 = BaseBinaryType.INSTANCE;
54 final BaseBinaryType baseBinaryType2 = (BaseBinaryType)BaseTypes.binaryType();
55 hashCodeEqualsToStringTest(baseBinaryType1, baseBinaryType2);
56 assertEquals(baseBinaryType1.getLengthConstraints(), baseBinaryType2.getLengthConstraints());
58 final DerivedBinaryType derivedBinaryType1 = (DerivedBinaryType)DerivedTypes.derivedTypeBuilder(baseBinaryType1,
60 final DerivedBinaryType derivedBinaryType2 = (DerivedBinaryType)DerivedTypes.derivedTypeBuilder(baseBinaryType2,
62 hashCodeEqualsToStringTest(derivedBinaryType1, derivedBinaryType2);
64 final RestrictedBinaryType restrictedBinaryType1 = (RestrictedBinaryType)RestrictedTypes.newBinaryBuilder
65 (baseBinaryType1, SCHEMA_PATH).buildType();
66 final RestrictedBinaryType restrictedBinaryType2 = (RestrictedBinaryType)RestrictedTypes.newBinaryBuilder
67 (baseBinaryType2, SCHEMA_PATH).buildType();
68 hashCodeEqualsToStringTest(restrictedBinaryType1, restrictedBinaryType2);
70 final LengthRestrictedTypeBuilder<BinaryTypeDefinition> lengthRestrictedTypeBuilder = RestrictedTypes
71 .newBinaryBuilder(baseBinaryType1, SCHEMA_PATH);
72 final BaseBinaryType baseBinaryType = (BaseBinaryType)lengthRestrictedTypeBuilder.build();
73 assertEquals(lengthRestrictedTypeBuilder.getLengthConstraints(baseBinaryType1),
74 baseBinaryType.getLengthConstraints());
75 assertEquals(baseBinaryType, baseBinaryType1);
76 concreteBuilderTest(baseBinaryType1, derivedBinaryType1);
80 public void booleanTypeTest() {
81 final BaseBooleanType baseBooleanType1 = BaseBooleanType.INSTANCE;
82 final BaseBooleanType baseBooleanType2 = (BaseBooleanType)BaseTypes.booleanType();
83 hashCodeEqualsToStringTest(baseBooleanType1, baseBooleanType2);
85 final DerivedBooleanType derivedBooleanType1 = (DerivedBooleanType)DerivedTypes.derivedTypeBuilder
86 (baseBooleanType1, SCHEMA_PATH).build();
87 final DerivedBooleanType derivedBooleanType2 = (DerivedBooleanType)DerivedTypes.derivedTypeBuilder
88 (baseBooleanType1, SCHEMA_PATH).build();
89 hashCodeEqualsToStringTest(derivedBooleanType1, derivedBooleanType2);
91 restrictedBuilderTest(RestrictedTypes.newBooleanBuilder(baseBooleanType1, SCHEMA_PATH), RestrictedTypes
92 .newBooleanBuilder(baseBooleanType2, SCHEMA_PATH));
93 concreteBuilderTest(baseBooleanType1, derivedBooleanType1);
97 public void identityrefTypeTest() {
98 final IdentityrefTypeBuilder identityrefTypeBuilder1 = BaseTypes.identityrefTypeBuilder(SCHEMA_PATH);
99 final IdentitySchemaNode identitySchemaNode = mock(IdentitySchemaNode.class);
100 identityrefTypeBuilder1.setIdentity(identitySchemaNode);
101 final IdentityrefTypeDefinition identityrefTypeDefinition1 = identityrefTypeBuilder1.build();
102 final IdentityrefTypeBuilder identityrefTypeBuilder2 = BaseTypes.identityrefTypeBuilder(SCHEMA_PATH);
103 identityrefTypeBuilder2.setIdentity(identitySchemaNode);
104 final IdentityrefTypeDefinition identityrefTypeDefinition2 = identityrefTypeBuilder2.build();
105 hashCodeEqualsToStringTest(identityrefTypeDefinition1, identityrefTypeDefinition2);
107 final DerivedIdentityrefType derivedIdentityrefType1 = (DerivedIdentityrefType)DerivedTypes.derivedTypeBuilder
108 (identityrefTypeDefinition1, SCHEMA_PATH).build();
109 final DerivedIdentityrefType derivedIdentityrefType2 = (DerivedIdentityrefType)DerivedTypes.derivedTypeBuilder
110 (identityrefTypeDefinition2, SCHEMA_PATH).build();
111 hashCodeEqualsToStringTest(derivedIdentityrefType1, derivedIdentityrefType2);
112 concreteBuilderTest(identityrefTypeDefinition1, derivedIdentityrefType1);
114 restrictedBuilderTest(RestrictedTypes.newIdentityrefBuilder(derivedIdentityrefType1, SCHEMA_PATH), RestrictedTypes
115 .newIdentityrefBuilder(derivedIdentityrefType2, SCHEMA_PATH));
119 public void decimalTypeTest() {
120 final BaseDecimalType baseDecimalType1 = (BaseDecimalType)BaseTypes.decimalTypeBuilder(SCHEMA_PATH)
121 .setFractionDigits(1)
123 final BaseDecimalType baseDecimalType2 = (BaseDecimalType)BaseTypes.decimalTypeBuilder(SCHEMA_PATH)
124 .setFractionDigits(1)
126 hashCodeEqualsToStringTest(baseDecimalType1, baseDecimalType2);
127 assertEquals(baseDecimalType1.getFractionDigits(), baseDecimalType2.getFractionDigits());
129 final DerivedDecimalType derivedDecimalType1 = (DerivedDecimalType)DerivedTypes
130 .derivedTypeBuilder(baseDecimalType1, SCHEMA_PATH).build();
131 final DerivedDecimalType derivedDecimalType2 = (DerivedDecimalType)DerivedTypes
132 .derivedTypeBuilder(baseDecimalType1, SCHEMA_PATH).build();
133 hashCodeEqualsToStringTest(derivedDecimalType1, derivedDecimalType2);
135 final RestrictedDecimalType restrictedDecimalType1 = (RestrictedDecimalType)
136 RestrictedTypes.newDecima64Builder(baseDecimalType1, SCHEMA_PATH).buildType();
137 final RestrictedDecimalType restrictedDecimalType2 = (RestrictedDecimalType)
138 RestrictedTypes.newDecima64Builder(baseDecimalType2, SCHEMA_PATH).buildType();
139 hashCodeEqualsToStringTest(restrictedDecimalType1, restrictedDecimalType2);
140 concreteBuilderTest(baseDecimalType1, derivedDecimalType1);
144 public void emptyTypeTest() {
145 final BaseEmptyType baseEmptyType1 = BaseEmptyType.INSTANCE;
146 final BaseEmptyType baseEmptyType2 = (BaseEmptyType)BaseTypes.emptyType();
147 hashCodeEqualsToStringTest(baseEmptyType1, baseEmptyType2);
149 final DerivedEmptyType derivedEmptyType1 = (DerivedEmptyType)DerivedTypes.derivedTypeBuilder
150 (baseEmptyType1, SCHEMA_PATH).build();
151 final DerivedEmptyType derivedEmptyType2 = (DerivedEmptyType)DerivedTypes.derivedTypeBuilder
152 (baseEmptyType2, SCHEMA_PATH).build();
153 hashCodeEqualsToStringTest(derivedEmptyType1, derivedEmptyType2);
155 restrictedBuilderTest(RestrictedTypes.newEmptyBuilder(baseEmptyType1, SCHEMA_PATH),
156 RestrictedTypes.newEmptyBuilder(baseEmptyType2, SCHEMA_PATH));
157 concreteBuilderTest(baseEmptyType1, derivedEmptyType1);
161 public void instanceIdentifierTypeTest() {
162 final BaseInstanceIdentifierType baseInstanceIdentifierType1 = BaseInstanceIdentifierType.INSTANCE;
163 final BaseInstanceIdentifierType baseInstanceIdentifierType2 = (BaseInstanceIdentifierType)BaseTypes
164 .instanceIdentifierType();
165 hashCodeEqualsToStringTest(baseInstanceIdentifierType1, baseInstanceIdentifierType2);
166 assertFalse(baseInstanceIdentifierType1.requireInstance());
168 final DerivedInstanceIdentifierType derivedInstanceIdentifierType1 = (DerivedInstanceIdentifierType)
169 DerivedTypes.derivedTypeBuilder(baseInstanceIdentifierType1, SCHEMA_PATH).build();
170 final DerivedInstanceIdentifierType derivedInstanceIdentifierType2 = (DerivedInstanceIdentifierType)
171 DerivedTypes.derivedTypeBuilder(baseInstanceIdentifierType2, SCHEMA_PATH).build();
172 hashCodeEqualsToStringTest(derivedInstanceIdentifierType1, derivedInstanceIdentifierType2);
174 final InstanceIdentifierTypeBuilder instanceIdentifierBuilder1 = RestrictedTypes
175 .newInstanceIdentifierBuilder(baseInstanceIdentifierType1, SCHEMA_PATH);
176 instanceIdentifierBuilder1.setRequireInstance(true);
177 final InstanceIdentifierTypeDefinition instanceIdentifierTypeDefinition1 = instanceIdentifierBuilder1.buildType();
178 final InstanceIdentifierTypeBuilder instanceIdentifierBuilder2 = RestrictedTypes
179 .newInstanceIdentifierBuilder(baseInstanceIdentifierType1, SCHEMA_PATH);
180 instanceIdentifierBuilder2.setRequireInstance(true);
181 final InstanceIdentifierTypeDefinition instanceIdentifierTypeDefinition2 = instanceIdentifierBuilder2.buildType();
182 hashCodeEqualsToStringTest(instanceIdentifierTypeDefinition2, instanceIdentifierTypeDefinition1);
183 concreteBuilderTest(baseInstanceIdentifierType1, derivedInstanceIdentifierType1);
187 public void integerTypeTest() {
188 final IntegerTypeDefinition integerTypeDefinition8 = BaseTypes.int8Type();
189 final IntegerTypeDefinition integerTypeDefinition16 = BaseTypes.int16Type();
190 final IntegerTypeDefinition integerTypeDefinition32 = BaseTypes.int32Type();
191 final IntegerTypeDefinition integerTypeDefinition64 = BaseTypes.int64Type();
192 assertTrue(BaseTypes.isInt8(integerTypeDefinition8));
193 assertTrue(BaseTypes.isInt16(integerTypeDefinition16));
194 assertTrue(BaseTypes.isInt32(integerTypeDefinition32));
195 assertTrue(BaseTypes.isInt64(integerTypeDefinition64));
196 testInstance(BaseInt8Type.INSTANCE, integerTypeDefinition8);
197 testInstance(BaseInt16Type.INSTANCE, integerTypeDefinition16);
198 testInstance(BaseInt32Type.INSTANCE, integerTypeDefinition32);
199 testInstance(BaseInt64Type.INSTANCE, integerTypeDefinition64);
201 final RestrictedIntegerType restrictedIntegerType1 = (RestrictedIntegerType)RestrictedTypes.newIntegerBuilder
202 (integerTypeDefinition8, SCHEMA_PATH).buildType();
203 final RestrictedIntegerType restrictedIntegerType2 = (RestrictedIntegerType)RestrictedTypes.newIntegerBuilder
204 (BaseInt8Type.INSTANCE, SCHEMA_PATH).buildType();
205 hashCodeEqualsToStringTest(restrictedIntegerType1, restrictedIntegerType2);
207 final UnsignedIntegerTypeDefinition integerTypeDefinitionu8 = BaseTypes.uint8Type();
208 final UnsignedIntegerTypeDefinition integerTypeDefinitionu16 = BaseTypes.uint16Type();
209 final UnsignedIntegerTypeDefinition integerTypeDefinitionu32 = BaseTypes.uint32Type();
210 final UnsignedIntegerTypeDefinition integerTypeDefinitionu64 = BaseTypes.uint64Type();
211 assertTrue(BaseTypes.isUint8(integerTypeDefinitionu8));
212 assertTrue(BaseTypes.isUint16(integerTypeDefinitionu16));
213 assertTrue(BaseTypes.isUint32(integerTypeDefinitionu32));
214 assertTrue(BaseTypes.isUint64(integerTypeDefinitionu64));
215 testInstance(BaseUint8Type.INSTANCE, integerTypeDefinitionu8);
216 testInstance(BaseUint16Type.INSTANCE, integerTypeDefinitionu16);
217 testInstance(BaseUint32Type.INSTANCE, integerTypeDefinitionu32);
218 testInstance(BaseUint64Type.INSTANCE, BaseTypes.baseTypeOf(integerTypeDefinitionu64));
220 final DerivedIntegerType derivedIntegerType1 = (DerivedIntegerType)DerivedTypes
221 .derivedTypeBuilder(integerTypeDefinition8, SCHEMA_PATH).build();
222 final DerivedIntegerType derivedIntegerType2 = (DerivedIntegerType)DerivedTypes
223 .derivedTypeBuilder(BaseInt8Type.INSTANCE, SCHEMA_PATH).build();
224 hashCodeEqualsToStringTest(derivedIntegerType1, derivedIntegerType2);
226 final DerivedUnsignedType derivedUnsignedType1 = (DerivedUnsignedType)DerivedTypes
227 .derivedTypeBuilder(integerTypeDefinitionu8, SCHEMA_PATH).build();
228 final DerivedUnsignedType derivedUnsignedType2 = (DerivedUnsignedType)DerivedTypes
229 .derivedTypeBuilder(BaseUint8Type.INSTANCE, SCHEMA_PATH).build();
230 hashCodeEqualsToStringTest(derivedUnsignedType1, derivedUnsignedType2);
232 final RestrictedUnsignedType restrictedUnsignedType1 = (RestrictedUnsignedType)RestrictedTypes
233 .newUnsignedBuilder(integerTypeDefinitionu8, SCHEMA_PATH).buildType();
234 final RestrictedUnsignedType restrictedUnsignedType2 = (RestrictedUnsignedType)RestrictedTypes
235 .newUnsignedBuilder(BaseUint8Type.INSTANCE, SCHEMA_PATH).buildType();
236 hashCodeEqualsToStringTest(restrictedUnsignedType1, restrictedUnsignedType2);
237 concreteBuilderTest(integerTypeDefinition8, derivedIntegerType1);
238 concreteBuilderTest(integerTypeDefinitionu8, derivedUnsignedType2);
240 final DerivedTypeBuilder<?> derivedTypeBuilder = DerivedTypes.derivedTypeBuilder(integerTypeDefinition8, SCHEMA_PATH);
241 derivedTypeBuilder.setDefaultValue(1);
242 derivedTypeBuilder.setDescription("test-description");
243 derivedTypeBuilder.setReference("test-reference");
244 derivedTypeBuilder.setUnits("Int");
245 derivedTypeBuilder.setStatus(Status.CURRENT);
246 assertEquals(derivedTypeBuilder.getStatus(), Status.CURRENT);
247 assertEquals(derivedTypeBuilder.getDescription(), "test-description");
248 assertEquals(derivedTypeBuilder.getReference(), "test-reference");
249 assertEquals(derivedTypeBuilder.getUnits(), "Int");
253 public void stringTypeTest() {
254 final BaseStringType baseStringType1 = BaseStringType.INSTANCE;
255 final BaseStringType baseStringType2 = (BaseStringType)BaseTypes.stringType();
256 hashCodeEqualsToStringTest(baseStringType1, baseStringType2);
257 assertEquals(baseStringType1.getLengthConstraints(), baseStringType2.getLengthConstraints());
258 assertEquals(baseStringType1.getPatternConstraints(), baseStringType2.getPatternConstraints());
260 final DerivedStringType derivedStringType1 = (DerivedStringType)
261 DerivedTypes.derivedTypeBuilder(baseStringType1, SCHEMA_PATH).build();
262 final DerivedStringType derivedStringType2 = (DerivedStringType)
263 DerivedTypes.derivedTypeBuilder(baseStringType2, SCHEMA_PATH).build();
264 hashCodeEqualsToStringTest(derivedStringType1, derivedStringType2);
266 final RestrictedStringType restrictedStringType1 = (RestrictedStringType)RestrictedTypes
267 .newStringBuilder(baseStringType1, SCHEMA_PATH).buildType();
268 final RestrictedStringType restrictedStringType2 = (RestrictedStringType)RestrictedTypes
269 .newStringBuilder(baseStringType2, SCHEMA_PATH).buildType();
270 hashCodeEqualsToStringTest(restrictedStringType1, restrictedStringType2);
271 concreteBuilderTest(baseStringType1, derivedStringType1);
273 final StringTypeBuilder stringTypeBuilder = new StringTypeBuilder(baseStringType1, SCHEMA_PATH);
274 final PatternConstraint patternConstraint = BaseConstraints.newPatternConstraint("pattern", ABSENT, ABSENT);
275 stringTypeBuilder.addPatternConstraint(patternConstraint);
276 final StringTypeDefinition stringTypeDefinition = stringTypeBuilder.buildType();
277 assertNotNull(stringTypeDefinition);
281 public void bitsTypeTest() {
282 final BitsTypeBuilder bitsTypeBuilder = BaseTypes.bitsTypeBuilder(SCHEMA_PATH);
283 bitsTypeBuilder.addBit(BIT_A);
284 final BitsTypeDefinition bitsTypeDefinition1 = bitsTypeBuilder.build();
285 final BitsTypeDefinition bitsTypeDefinition2 = bitsTypeBuilder.build();
286 hashCodeEqualsToStringTest(bitsTypeDefinition1, bitsTypeDefinition2);
287 assertEquals(bitsTypeDefinition1.getBits(), bitsTypeDefinition1.getBits());
289 final DerivedBitsType derivedBitsType1 = (DerivedBitsType)DerivedTypes
290 .derivedTypeBuilder(bitsTypeDefinition1, SCHEMA_PATH).build();
291 final DerivedBitsType derivedBitsType2 = (DerivedBitsType)DerivedTypes
292 .derivedTypeBuilder(bitsTypeDefinition2, SCHEMA_PATH).build();
293 hashCodeEqualsToStringTest(derivedBitsType1, derivedBitsType2);
295 restrictedBuilderTest(RestrictedTypes.newBitsBuilder(bitsTypeDefinition1, SCHEMA_PATH),
296 RestrictedTypes.newBitsBuilder(bitsTypeDefinition2, SCHEMA_PATH));
297 concreteBuilderTest(bitsTypeDefinition1, derivedBitsType1);
301 public void enumerationTypeTest() {
302 final BaseEnumerationType baseEnumerationType1 = (BaseEnumerationType)BaseTypes.enumerationTypeBuilder
303 (SCHEMA_PATH).build();
304 final BaseEnumerationType baseEnumerationType2 = (BaseEnumerationType)BaseTypes.enumerationTypeBuilder
305 (SCHEMA_PATH).build();
306 hashCodeEqualsToStringTest(baseEnumerationType1, baseEnumerationType2);
307 assertEquals(baseEnumerationType1.getValues(), baseEnumerationType2.getValues());
309 final DerivedEnumerationType derivedEnumerationType1 = (DerivedEnumerationType)DerivedTypes
310 .derivedTypeBuilder(baseEnumerationType1, SCHEMA_PATH).build();
311 final DerivedEnumerationType derivedEnumerationType2 = (DerivedEnumerationType)DerivedTypes
312 .derivedTypeBuilder(baseEnumerationType2, SCHEMA_PATH).build();
313 hashCodeEqualsToStringTest(derivedEnumerationType1, derivedEnumerationType2);
315 restrictedBuilderTest(RestrictedTypes.newEnumerationBuilder(baseEnumerationType1, SCHEMA_PATH),
316 RestrictedTypes.newEnumerationBuilder(baseEnumerationType2, SCHEMA_PATH));
317 concreteBuilderTest(baseEnumerationType1, derivedEnumerationType1);
321 public void leafrefTypeTest() {
322 final LeafrefTypeBuilder leafrefTypeBuilder1 = BaseTypes.leafrefTypeBuilder(SCHEMA_PATH);
323 final LeafrefTypeBuilder leafrefTypeBuilder2 = BaseTypes.leafrefTypeBuilder(SCHEMA_PATH);
324 leafrefTypeBuilder1.setPathStatement(REVISION_AWARE_XPATH);
325 leafrefTypeBuilder2.setPathStatement(REVISION_AWARE_XPATH);
326 final BaseLeafrefType baseLeafrefType1 = (BaseLeafrefType)leafrefTypeBuilder1.build();
327 final BaseLeafrefType baseLeafrefType2 = (BaseLeafrefType)leafrefTypeBuilder1.build();
328 hashCodeEqualsToStringTest(baseLeafrefType1, baseLeafrefType2);
329 assertEquals(baseLeafrefType1.getPathStatement(), REVISION_AWARE_XPATH);
331 final DerivedLeafrefType derivedLeafrefType1 = (DerivedLeafrefType)DerivedTypes
332 .derivedTypeBuilder(baseLeafrefType1, SCHEMA_PATH).build();
333 final DerivedLeafrefType derivedLeafrefType2 = (DerivedLeafrefType)DerivedTypes
334 .derivedTypeBuilder(baseLeafrefType2, SCHEMA_PATH).build();
335 hashCodeEqualsToStringTest(derivedLeafrefType1, derivedLeafrefType2);
337 restrictedBuilderTest(RestrictedTypes.newLeafrefBuilder(baseLeafrefType1, SCHEMA_PATH),
338 RestrictedTypes.newLeafrefBuilder(baseLeafrefType2, SCHEMA_PATH));
339 concreteBuilderTest(baseLeafrefType1, derivedLeafrefType1);
343 public void unionTypeTest() throws IllegalAccessException, InstantiationException {
344 final BaseDecimalType baseDecimalType1 = (BaseDecimalType)BaseTypes.decimalTypeBuilder(SCHEMA_PATH)
345 .setFractionDigits(1)
347 final BaseDecimalType baseDecimalType2 = (BaseDecimalType)BaseTypes.decimalTypeBuilder(SCHEMA_PATH)
348 .setFractionDigits(1)
350 final UnionTypeBuilder unionTypeBuilder1 = BaseTypes.unionTypeBuilder(SCHEMA_PATH);
351 final UnionTypeBuilder unionTypeBuilder2 = BaseTypes.unionTypeBuilder(SCHEMA_PATH);
352 unionTypeBuilder1.addType(baseDecimalType1);
353 unionTypeBuilder2.addType(baseDecimalType2);
354 final BaseUnionType baseUnionType1 = (BaseUnionType)unionTypeBuilder1.build();
355 final BaseUnionType baseUnionType2 = (BaseUnionType)unionTypeBuilder2.build();
356 hashCodeEqualsToStringTest(baseUnionType1, baseUnionType2);
357 assertEquals(baseUnionType1.getTypes(), baseUnionType2.getTypes());
359 final DerivedUnionType derivedUnionType1 = (DerivedUnionType)DerivedTypes
360 .derivedTypeBuilder(baseUnionType1, SCHEMA_PATH).build();
361 final DerivedUnionType derivedUnionType2 = (DerivedUnionType)DerivedTypes
362 .derivedTypeBuilder(baseUnionType2, SCHEMA_PATH).build();
363 hashCodeEqualsToStringTest(derivedUnionType1, derivedUnionType2);
365 restrictedBuilderTest(RestrictedTypes.newUnionBuilder(baseUnionType1, SCHEMA_PATH),
366 RestrictedTypes.newUnionBuilder(baseUnionType2, SCHEMA_PATH));
367 concreteBuilderTest(baseUnionType1, derivedUnionType1);
371 public void abstractTypeDefinitionQnameTest() {
372 final AbstractTypeDefinition<?> abstractTypeDefinition = (AbstractTypeDefinition<?>)BaseTypes.decimalTypeBuilder
373 (SCHEMA_PATH).setFractionDigits(1).buildType();
374 assertEquals(abstractTypeDefinition.getQName(), Q_NAME);
378 public void abstractDerivedTypeTest() {
379 final BaseBinaryType baseBinaryType1 = BaseBinaryType.INSTANCE;
380 final AbstractDerivedType<?> abstractDerivedType = (AbstractDerivedType<?>) DerivedTypes.derivedTypeBuilder(baseBinaryType1,
381 SCHEMA_PATH).build();
382 assertEquals(abstractDerivedType.getDescription(), null);
383 assertEquals(abstractDerivedType.getReference(), null);
384 assertEquals(abstractDerivedType.getStatus().toString(), "CURRENT");
385 assertFalse(DerivedTypes.isInt8(baseBinaryType1));
386 assertFalse(DerivedTypes.isUint8(baseBinaryType1));
387 assertFalse(DerivedTypes.isInt16(baseBinaryType1));
388 assertFalse(DerivedTypes.isUint16(baseBinaryType1));
389 assertFalse(DerivedTypes.isInt32(baseBinaryType1));
390 assertFalse(DerivedTypes.isUint32(baseBinaryType1));
391 assertFalse(DerivedTypes.isInt64(baseBinaryType1));
392 assertFalse(DerivedTypes.isUint64(baseBinaryType1));
396 public void concreteTypeBuilderBuildTest() {
397 final BaseEnumerationType baseEnumerationType1 = (BaseEnumerationType)BaseTypes.enumerationTypeBuilder
398 (SCHEMA_PATH).build();
399 final ConcreteTypeBuilder<?> concreteTypeBuilder = ConcreteTypes.concreteTypeBuilder(baseEnumerationType1, SCHEMA_PATH);
400 final TypeDefinition<?> typeDefinition = concreteTypeBuilder.build();
401 assertNotNull(typeDefinition);
405 public void constraintTypeBuilderTest() {
406 final BaseBinaryType baseBinaryType = (BaseBinaryType)BaseTypes.binaryType();
407 final LengthRestrictedTypeBuilder<?> lengthRestrictedTypeBuilder = RestrictedTypes
408 .newBinaryBuilder(baseBinaryType, SCHEMA_PATH);
409 final Long min = Long.valueOf(0);
410 final UnresolvedNumber max = UnresolvedNumber.max();
411 final LengthConstraint lengthConstraint = BaseConstraints.newLengthConstraint(min, max, ABSENT, ABSENT);
412 final ArrayList<LengthConstraint> lengthArrayList = new ArrayList<>(1);
413 assertEquals(lengthConstraint.getErrorAppTag(), "length-out-of-specified-bounds");
414 assertEquals(lengthConstraint.getErrorMessage(), "The argument is out of bounds <0, max>");
415 lengthArrayList.add(lengthConstraint);
416 lengthRestrictedTypeBuilder.setLengthAlternatives(lengthArrayList);
417 final TypeDefinition<?> typeDefinition = lengthRestrictedTypeBuilder.buildType();
418 assertNotNull(typeDefinition);
420 final IntegerTypeDefinition integerTypeDefinition8 = BaseTypes.int8Type();
421 final RangeRestrictedTypeBuilder<?> rangeRestrictedTypeBuilder = RestrictedTypes
422 .newIntegerBuilder(integerTypeDefinition8, SCHEMA_PATH);
423 final RangeConstraint rangeConstraint = BaseConstraints.newRangeConstraint(min, max, ABSENT, ABSENT);
424 final ArrayList<RangeConstraint> rangeArrayList = new ArrayList<>(1);
425 rangeArrayList.add(rangeConstraint);
426 rangeRestrictedTypeBuilder.setRangeAlternatives(rangeArrayList);
427 final TypeDefinition<?> typeDefinition1 = rangeRestrictedTypeBuilder.buildType();
428 assertNotNull(typeDefinition1);
432 public void exceptionTest() {
433 final Optional<String> absent = Optional.absent();
434 final UnresolvedNumber min = UnresolvedNumber.min();
435 final UnresolvedNumber max = UnresolvedNumber.max();
436 final LengthConstraint lengthConstraint = BaseConstraints.newLengthConstraint(min, max, absent, absent);
437 final RangeConstraint rangeConstraint= BaseConstraints.newRangeConstraint(min, max, absent, absent);
439 final EnumPair enumPair = EnumPairBuilder.create("enum1", 1).setDescription("description")
440 .setReference("reference").setUnknownSchemaNodes(mock(UnknownSchemaNode.class)).build();
442 final InvalidLengthConstraintException invalidLengthConstraintException = new InvalidLengthConstraintException(
443 lengthConstraint, "error msg", "other important messages");
444 assertEquals(invalidLengthConstraintException.getOffendingConstraint(), lengthConstraint);
446 final InvalidRangeConstraintException invalidRangeConstraintException = new InvalidRangeConstraintException(
447 rangeConstraint, "error msg", "other important messages");
448 assertEquals(invalidRangeConstraintException.getOffendingConstraint(), rangeConstraint);
450 final InvalidBitDefinitionException invalidBitDefinitionException = new InvalidBitDefinitionException(
451 BIT_A, "error msg", "other important messages");
452 assertEquals(invalidBitDefinitionException.getOffendingBit(), BIT_A);
454 final InvalidEnumDefinitionException invalidEnumDefinitionException= new InvalidEnumDefinitionException(
455 enumPair, "error msg", "other important messages");
456 assertEquals(invalidEnumDefinitionException.getOffendingEnum(), enumPair);
459 @Test(expected = NullPointerException.class)
460 public void identityrefTypeBuilderException() {
461 BaseTypes.identityrefTypeBuilder(SCHEMA_PATH).build();
464 @Test(expected = InvalidBitDefinitionException.class)
465 public void invalidBitDefinitionExceptionTest() {
466 final BitsTypeBuilder bitsTypeBuilder = BaseTypes.bitsTypeBuilder(SCHEMA_PATH);
467 final QName qName = QName.create("test.namespace.1", "2016-01-02", "test-name-1");
468 final SchemaPath schemaPath = SchemaPath.create(true, qName);
469 bitsTypeBuilder.addBit(BIT_A);
470 bitsTypeBuilder.addBit(BitBuilder.create(schemaPath, 55L).build());
471 bitsTypeBuilder.build();
474 @Test(expected = InvalidEnumDefinitionException.class)
475 public void invalidEnumDefinitionExceptionTest() {
476 final UnknownSchemaNode UNKNOWN_SCHEMA_NODE= mock(UnknownSchemaNode.class);
477 final EnumPair enumPair1 = EnumPairBuilder.create("enum1", 1).setDescription("description")
478 .setReference("reference").setUnknownSchemaNodes(UNKNOWN_SCHEMA_NODE).build();
479 final EnumPair enumPair2 = EnumPairBuilder.create("enum", 1).setDescription("description")
480 .setReference("reference").setUnknownSchemaNodes(UNKNOWN_SCHEMA_NODE).build();
481 final EnumerationTypeBuilder enumerationTypeBuilder = BaseTypes.enumerationTypeBuilder(SCHEMA_PATH);
482 enumerationTypeBuilder.addEnum(enumPair1);
483 enumerationTypeBuilder.addEnum(enumPair2);
484 enumerationTypeBuilder.build();
487 private static void hashCodeEqualsToStringTest(final TypeDefinition<?> type1, final TypeDefinition<?> type2) {
488 assertEquals(type1.hashCode(), type2.hashCode());
489 assertEquals(type1.toString(), type2.toString());
490 assertTrue(type1.equals(type2));
493 private static <T> void testInstance(final T type1, final T type2) {
494 assertEquals(type1, type2);
497 private static void restrictedBuilderTest(final Builder<?> typeBuilder1, final Builder<?> typeBuilder2) {
498 final TypeDefinition<?> typeDefinition1 = ((AbstractRestrictedTypeBuilder<?>) typeBuilder1).buildType();
499 final TypeDefinition<?> typeDefinition2 = ((AbstractRestrictedTypeBuilder<?>) typeBuilder2).buildType();
500 hashCodeEqualsToStringTest(typeDefinition1, typeDefinition2);
503 private static void concreteBuilderTest(final TypeDefinition<?> baseTypeDef, final TypeDefinition<?> derivedTypeDef) {
504 final ConcreteTypeBuilder<?> concreteTypeBuilder = ConcreteTypes.concreteTypeBuilder(baseTypeDef, SCHEMA_PATH);
505 final TypeDefinition<?> typeDefinition = concreteTypeBuilder.buildType();
506 assertEquals(typeDefinition.getBaseType(), derivedTypeDef.getBaseType());