/* * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.yangtools.yang.model.util.type; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import com.google.common.base.Optional; import java.util.ArrayList; import org.junit.Test; import org.opendaylight.yangtools.concepts.Builder; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.Status; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair; import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.IntegerTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint; import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint; import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint; import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.UnsignedIntegerTypeDefinition; import org.opendaylight.yangtools.yang.model.util.BaseConstraints; import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl; import org.opendaylight.yangtools.yang.model.util.UnresolvedNumber; public class TypeTest { private static final QName Q_NAME = QName.create("test.namespace", "2016-01-01", "test-name"); private static final SchemaPath SCHEMA_PATH = SchemaPath.create(true, Q_NAME); private static final RevisionAwareXPath REVISION_AWARE_XPATH = new RevisionAwareXPathImpl("/test", true); private static final Bit BIT_A = BitBuilder.create(SCHEMA_PATH, 55L).setDescription("description") .setReference("reference").build(); private static final Optional<String> ABSENT = Optional.absent(); @Test public void binaryTypeTest() { final BaseBinaryType baseBinaryType1 = BaseBinaryType.INSTANCE; final BaseBinaryType baseBinaryType2 = (BaseBinaryType)BaseTypes.binaryType(); hashCodeEqualsToStringTest(baseBinaryType1, baseBinaryType2); assertEquals(baseBinaryType1.getLengthConstraints(), baseBinaryType2.getLengthConstraints()); final DerivedBinaryType derivedBinaryType1 = (DerivedBinaryType)DerivedTypes.derivedTypeBuilder(baseBinaryType1, SCHEMA_PATH).build(); final DerivedBinaryType derivedBinaryType2 = (DerivedBinaryType)DerivedTypes.derivedTypeBuilder(baseBinaryType2, SCHEMA_PATH).build(); hashCodeEqualsToStringTest(derivedBinaryType1, derivedBinaryType2); final RestrictedBinaryType restrictedBinaryType1 = (RestrictedBinaryType)RestrictedTypes.newBinaryBuilder (baseBinaryType1, SCHEMA_PATH).buildType(); final RestrictedBinaryType restrictedBinaryType2 = (RestrictedBinaryType)RestrictedTypes.newBinaryBuilder (baseBinaryType2, SCHEMA_PATH).buildType(); hashCodeEqualsToStringTest(restrictedBinaryType1, restrictedBinaryType2); final LengthRestrictedTypeBuilder<BinaryTypeDefinition> lengthRestrictedTypeBuilder = RestrictedTypes .newBinaryBuilder(baseBinaryType1, SCHEMA_PATH); final BaseBinaryType baseBinaryType = (BaseBinaryType)lengthRestrictedTypeBuilder.build(); assertEquals(lengthRestrictedTypeBuilder.getLengthConstraints(baseBinaryType1), baseBinaryType.getLengthConstraints()); assertEquals(baseBinaryType, baseBinaryType1); concreteBuilderTest(baseBinaryType1, derivedBinaryType1); } @Test public void booleanTypeTest() { final BaseBooleanType baseBooleanType1 = BaseBooleanType.INSTANCE; final BaseBooleanType baseBooleanType2 = (BaseBooleanType)BaseTypes.booleanType(); hashCodeEqualsToStringTest(baseBooleanType1, baseBooleanType2); final DerivedBooleanType derivedBooleanType1 = (DerivedBooleanType)DerivedTypes.derivedTypeBuilder (baseBooleanType1, SCHEMA_PATH).build(); final DerivedBooleanType derivedBooleanType2 = (DerivedBooleanType)DerivedTypes.derivedTypeBuilder (baseBooleanType1, SCHEMA_PATH).build(); hashCodeEqualsToStringTest(derivedBooleanType1, derivedBooleanType2); restrictedBuilderTest(RestrictedTypes.newBooleanBuilder(baseBooleanType1, SCHEMA_PATH), RestrictedTypes .newBooleanBuilder(baseBooleanType2, SCHEMA_PATH)); concreteBuilderTest(baseBooleanType1, derivedBooleanType1); } @Test public void identityrefTypeTest() { final IdentityrefTypeBuilder identityrefTypeBuilder1 = BaseTypes.identityrefTypeBuilder(SCHEMA_PATH); final IdentitySchemaNode identitySchemaNode = mock(IdentitySchemaNode.class); identityrefTypeBuilder1.addIdentity(identitySchemaNode); final IdentityrefTypeDefinition identityrefTypeDefinition1 = identityrefTypeBuilder1.build(); final IdentityrefTypeBuilder identityrefTypeBuilder2 = BaseTypes.identityrefTypeBuilder(SCHEMA_PATH); identityrefTypeBuilder2.addIdentity(identitySchemaNode); final IdentityrefTypeDefinition identityrefTypeDefinition2 = identityrefTypeBuilder2.build(); hashCodeEqualsToStringTest(identityrefTypeDefinition1, identityrefTypeDefinition2); final DerivedIdentityrefType derivedIdentityrefType1 = (DerivedIdentityrefType)DerivedTypes.derivedTypeBuilder (identityrefTypeDefinition1, SCHEMA_PATH).build(); final DerivedIdentityrefType derivedIdentityrefType2 = (DerivedIdentityrefType)DerivedTypes.derivedTypeBuilder (identityrefTypeDefinition2, SCHEMA_PATH).build(); hashCodeEqualsToStringTest(derivedIdentityrefType1, derivedIdentityrefType2); concreteBuilderTest(identityrefTypeDefinition1, derivedIdentityrefType1); restrictedBuilderTest(RestrictedTypes.newIdentityrefBuilder(derivedIdentityrefType1, SCHEMA_PATH), RestrictedTypes .newIdentityrefBuilder(derivedIdentityrefType2, SCHEMA_PATH)); } @Test public void decimalTypeTest() { final BaseDecimalType baseDecimalType1 = (BaseDecimalType)BaseTypes.decimalTypeBuilder(SCHEMA_PATH) .setFractionDigits(1) .buildType(); final BaseDecimalType baseDecimalType2 = (BaseDecimalType)BaseTypes.decimalTypeBuilder(SCHEMA_PATH) .setFractionDigits(1) .buildType(); hashCodeEqualsToStringTest(baseDecimalType1, baseDecimalType2); assertEquals(baseDecimalType1.getFractionDigits(), baseDecimalType2.getFractionDigits()); final DerivedDecimalType derivedDecimalType1 = (DerivedDecimalType)DerivedTypes .derivedTypeBuilder(baseDecimalType1, SCHEMA_PATH).build(); final DerivedDecimalType derivedDecimalType2 = (DerivedDecimalType)DerivedTypes .derivedTypeBuilder(baseDecimalType1, SCHEMA_PATH).build(); hashCodeEqualsToStringTest(derivedDecimalType1, derivedDecimalType2); final RestrictedDecimalType restrictedDecimalType1 = (RestrictedDecimalType) RestrictedTypes.newDecima64Builder(baseDecimalType1, SCHEMA_PATH).buildType(); final RestrictedDecimalType restrictedDecimalType2 = (RestrictedDecimalType) RestrictedTypes.newDecima64Builder(baseDecimalType2, SCHEMA_PATH).buildType(); hashCodeEqualsToStringTest(restrictedDecimalType1, restrictedDecimalType2); concreteBuilderTest(baseDecimalType1, derivedDecimalType1); } @Test public void emptyTypeTest() { final BaseEmptyType baseEmptyType1 = BaseEmptyType.INSTANCE; final BaseEmptyType baseEmptyType2 = (BaseEmptyType)BaseTypes.emptyType(); hashCodeEqualsToStringTest(baseEmptyType1, baseEmptyType2); final DerivedEmptyType derivedEmptyType1 = (DerivedEmptyType)DerivedTypes.derivedTypeBuilder (baseEmptyType1, SCHEMA_PATH).build(); final DerivedEmptyType derivedEmptyType2 = (DerivedEmptyType)DerivedTypes.derivedTypeBuilder (baseEmptyType2, SCHEMA_PATH).build(); hashCodeEqualsToStringTest(derivedEmptyType1, derivedEmptyType2); restrictedBuilderTest(RestrictedTypes.newEmptyBuilder(baseEmptyType1, SCHEMA_PATH), RestrictedTypes.newEmptyBuilder(baseEmptyType2, SCHEMA_PATH)); concreteBuilderTest(baseEmptyType1, derivedEmptyType1); } @Test public void instanceIdentifierTypeTest() { final BaseInstanceIdentifierType baseInstanceIdentifierType1 = BaseInstanceIdentifierType.INSTANCE; final BaseInstanceIdentifierType baseInstanceIdentifierType2 = (BaseInstanceIdentifierType)BaseTypes .instanceIdentifierType(); hashCodeEqualsToStringTest(baseInstanceIdentifierType1, baseInstanceIdentifierType2); assertFalse(baseInstanceIdentifierType1.requireInstance()); final DerivedInstanceIdentifierType derivedInstanceIdentifierType1 = (DerivedInstanceIdentifierType) DerivedTypes.derivedTypeBuilder(baseInstanceIdentifierType1, SCHEMA_PATH).build(); final DerivedInstanceIdentifierType derivedInstanceIdentifierType2 = (DerivedInstanceIdentifierType) DerivedTypes.derivedTypeBuilder(baseInstanceIdentifierType2, SCHEMA_PATH).build(); hashCodeEqualsToStringTest(derivedInstanceIdentifierType1, derivedInstanceIdentifierType2); final InstanceIdentifierTypeBuilder instanceIdentifierBuilder1 = RestrictedTypes .newInstanceIdentifierBuilder(baseInstanceIdentifierType1, SCHEMA_PATH); instanceIdentifierBuilder1.setRequireInstance(true); final InstanceIdentifierTypeDefinition instanceIdentifierTypeDefinition1 = instanceIdentifierBuilder1.buildType(); final InstanceIdentifierTypeBuilder instanceIdentifierBuilder2 = RestrictedTypes .newInstanceIdentifierBuilder(baseInstanceIdentifierType1, SCHEMA_PATH); instanceIdentifierBuilder2.setRequireInstance(true); final InstanceIdentifierTypeDefinition instanceIdentifierTypeDefinition2 = instanceIdentifierBuilder2.buildType(); hashCodeEqualsToStringTest(instanceIdentifierTypeDefinition2, instanceIdentifierTypeDefinition1); concreteBuilderTest(baseInstanceIdentifierType1, derivedInstanceIdentifierType1); } @Test public void integerTypeTest() { final IntegerTypeDefinition integerTypeDefinition8 = BaseTypes.int8Type(); final IntegerTypeDefinition integerTypeDefinition16 = BaseTypes.int16Type(); final IntegerTypeDefinition integerTypeDefinition32 = BaseTypes.int32Type(); final IntegerTypeDefinition integerTypeDefinition64 = BaseTypes.int64Type(); assertTrue(BaseTypes.isInt8(integerTypeDefinition8)); assertTrue(BaseTypes.isInt16(integerTypeDefinition16)); assertTrue(BaseTypes.isInt32(integerTypeDefinition32)); assertTrue(BaseTypes.isInt64(integerTypeDefinition64)); testInstance(BaseInt8Type.INSTANCE, integerTypeDefinition8); testInstance(BaseInt16Type.INSTANCE, integerTypeDefinition16); testInstance(BaseInt32Type.INSTANCE, integerTypeDefinition32); testInstance(BaseInt64Type.INSTANCE, integerTypeDefinition64); final RestrictedIntegerType restrictedIntegerType1 = (RestrictedIntegerType)RestrictedTypes.newIntegerBuilder (integerTypeDefinition8, SCHEMA_PATH).buildType(); final RestrictedIntegerType restrictedIntegerType2 = (RestrictedIntegerType)RestrictedTypes.newIntegerBuilder (BaseInt8Type.INSTANCE, SCHEMA_PATH).buildType(); hashCodeEqualsToStringTest(restrictedIntegerType1, restrictedIntegerType2); final UnsignedIntegerTypeDefinition integerTypeDefinitionu8 = BaseTypes.uint8Type(); final UnsignedIntegerTypeDefinition integerTypeDefinitionu16 = BaseTypes.uint16Type(); final UnsignedIntegerTypeDefinition integerTypeDefinitionu32 = BaseTypes.uint32Type(); final UnsignedIntegerTypeDefinition integerTypeDefinitionu64 = BaseTypes.uint64Type(); assertTrue(BaseTypes.isUint8(integerTypeDefinitionu8)); assertTrue(BaseTypes.isUint16(integerTypeDefinitionu16)); assertTrue(BaseTypes.isUint32(integerTypeDefinitionu32)); assertTrue(BaseTypes.isUint64(integerTypeDefinitionu64)); testInstance(BaseUint8Type.INSTANCE, integerTypeDefinitionu8); testInstance(BaseUint16Type.INSTANCE, integerTypeDefinitionu16); testInstance(BaseUint32Type.INSTANCE, integerTypeDefinitionu32); testInstance(BaseUint64Type.INSTANCE, BaseTypes.baseTypeOf(integerTypeDefinitionu64)); final DerivedIntegerType derivedIntegerType1 = (DerivedIntegerType)DerivedTypes .derivedTypeBuilder(integerTypeDefinition8, SCHEMA_PATH).build(); final DerivedIntegerType derivedIntegerType2 = (DerivedIntegerType)DerivedTypes .derivedTypeBuilder(BaseInt8Type.INSTANCE, SCHEMA_PATH).build(); hashCodeEqualsToStringTest(derivedIntegerType1, derivedIntegerType2); final DerivedUnsignedType derivedUnsignedType1 = (DerivedUnsignedType)DerivedTypes .derivedTypeBuilder(integerTypeDefinitionu8, SCHEMA_PATH).build(); final DerivedUnsignedType derivedUnsignedType2 = (DerivedUnsignedType)DerivedTypes .derivedTypeBuilder(BaseUint8Type.INSTANCE, SCHEMA_PATH).build(); hashCodeEqualsToStringTest(derivedUnsignedType1, derivedUnsignedType2); final RestrictedUnsignedType restrictedUnsignedType1 = (RestrictedUnsignedType)RestrictedTypes .newUnsignedBuilder(integerTypeDefinitionu8, SCHEMA_PATH).buildType(); final RestrictedUnsignedType restrictedUnsignedType2 = (RestrictedUnsignedType)RestrictedTypes .newUnsignedBuilder(BaseUint8Type.INSTANCE, SCHEMA_PATH).buildType(); hashCodeEqualsToStringTest(restrictedUnsignedType1, restrictedUnsignedType2); concreteBuilderTest(integerTypeDefinition8, derivedIntegerType1); concreteBuilderTest(integerTypeDefinitionu8, derivedUnsignedType2); final DerivedTypeBuilder<?> derivedTypeBuilder = DerivedTypes.derivedTypeBuilder(integerTypeDefinition8, SCHEMA_PATH); derivedTypeBuilder.setDefaultValue(1); derivedTypeBuilder.setDescription("test-description"); derivedTypeBuilder.setReference("test-reference"); derivedTypeBuilder.setUnits("Int"); derivedTypeBuilder.setStatus(Status.CURRENT); assertEquals(derivedTypeBuilder.getStatus(), Status.CURRENT); assertEquals(derivedTypeBuilder.getDescription(), "test-description"); assertEquals(derivedTypeBuilder.getReference(), "test-reference"); assertEquals(derivedTypeBuilder.getUnits(), "Int"); } @Test public void stringTypeTest() { final BaseStringType baseStringType1 = BaseStringType.INSTANCE; final BaseStringType baseStringType2 = (BaseStringType)BaseTypes.stringType(); hashCodeEqualsToStringTest(baseStringType1, baseStringType2); assertEquals(baseStringType1.getLengthConstraints(), baseStringType2.getLengthConstraints()); assertEquals(baseStringType1.getPatternConstraints(), baseStringType2.getPatternConstraints()); final DerivedStringType derivedStringType1 = (DerivedStringType) DerivedTypes.derivedTypeBuilder(baseStringType1, SCHEMA_PATH).build(); final DerivedStringType derivedStringType2 = (DerivedStringType) DerivedTypes.derivedTypeBuilder(baseStringType2, SCHEMA_PATH).build(); hashCodeEqualsToStringTest(derivedStringType1, derivedStringType2); final RestrictedStringType restrictedStringType1 = (RestrictedStringType)RestrictedTypes .newStringBuilder(baseStringType1, SCHEMA_PATH).buildType(); final RestrictedStringType restrictedStringType2 = (RestrictedStringType)RestrictedTypes .newStringBuilder(baseStringType2, SCHEMA_PATH).buildType(); hashCodeEqualsToStringTest(restrictedStringType1, restrictedStringType2); concreteBuilderTest(baseStringType1, derivedStringType1); final StringTypeBuilder stringTypeBuilder = new StringTypeBuilder(baseStringType1, SCHEMA_PATH); final PatternConstraint patternConstraint = BaseConstraints.newPatternConstraint("pattern", ABSENT, ABSENT); stringTypeBuilder.addPatternConstraint(patternConstraint); final StringTypeDefinition stringTypeDefinition = stringTypeBuilder.buildType(); assertNotNull(stringTypeDefinition); } @Test public void bitsTypeTest() { final BitsTypeBuilder bitsTypeBuilder = BaseTypes.bitsTypeBuilder(SCHEMA_PATH); bitsTypeBuilder.addBit(BIT_A); final BitsTypeDefinition bitsTypeDefinition1 = bitsTypeBuilder.build(); final BitsTypeDefinition bitsTypeDefinition2 = bitsTypeBuilder.build(); hashCodeEqualsToStringTest(bitsTypeDefinition1, bitsTypeDefinition2); assertEquals(bitsTypeDefinition1.getBits(), bitsTypeDefinition1.getBits()); final DerivedBitsType derivedBitsType1 = (DerivedBitsType)DerivedTypes .derivedTypeBuilder(bitsTypeDefinition1, SCHEMA_PATH).build(); final DerivedBitsType derivedBitsType2 = (DerivedBitsType)DerivedTypes .derivedTypeBuilder(bitsTypeDefinition2, SCHEMA_PATH).build(); hashCodeEqualsToStringTest(derivedBitsType1, derivedBitsType2); restrictedBuilderTest(RestrictedTypes.newBitsBuilder(bitsTypeDefinition1, SCHEMA_PATH), RestrictedTypes.newBitsBuilder(bitsTypeDefinition2, SCHEMA_PATH)); concreteBuilderTest(bitsTypeDefinition1, derivedBitsType1); } @Test public void enumerationTypeTest() { final BaseEnumerationType baseEnumerationType1 = (BaseEnumerationType)BaseTypes.enumerationTypeBuilder (SCHEMA_PATH).build(); final BaseEnumerationType baseEnumerationType2 = (BaseEnumerationType)BaseTypes.enumerationTypeBuilder (SCHEMA_PATH).build(); hashCodeEqualsToStringTest(baseEnumerationType1, baseEnumerationType2); assertEquals(baseEnumerationType1.getValues(), baseEnumerationType2.getValues()); final DerivedEnumerationType derivedEnumerationType1 = (DerivedEnumerationType)DerivedTypes .derivedTypeBuilder(baseEnumerationType1, SCHEMA_PATH).build(); final DerivedEnumerationType derivedEnumerationType2 = (DerivedEnumerationType)DerivedTypes .derivedTypeBuilder(baseEnumerationType2, SCHEMA_PATH).build(); hashCodeEqualsToStringTest(derivedEnumerationType1, derivedEnumerationType2); restrictedBuilderTest(RestrictedTypes.newEnumerationBuilder(baseEnumerationType1, SCHEMA_PATH), RestrictedTypes.newEnumerationBuilder(baseEnumerationType2, SCHEMA_PATH)); concreteBuilderTest(baseEnumerationType1, derivedEnumerationType1); } @Test public void leafrefTypeTest() { final LeafrefTypeBuilder leafrefTypeBuilder1 = BaseTypes.leafrefTypeBuilder(SCHEMA_PATH); final LeafrefTypeBuilder leafrefTypeBuilder2 = BaseTypes.leafrefTypeBuilder(SCHEMA_PATH); leafrefTypeBuilder1.setPathStatement(REVISION_AWARE_XPATH); leafrefTypeBuilder2.setPathStatement(REVISION_AWARE_XPATH); final BaseLeafrefType baseLeafrefType1 = (BaseLeafrefType)leafrefTypeBuilder1.build(); final BaseLeafrefType baseLeafrefType2 = (BaseLeafrefType)leafrefTypeBuilder1.build(); hashCodeEqualsToStringTest(baseLeafrefType1, baseLeafrefType2); assertEquals(baseLeafrefType1.getPathStatement(), REVISION_AWARE_XPATH); final DerivedLeafrefType derivedLeafrefType1 = (DerivedLeafrefType)DerivedTypes .derivedTypeBuilder(baseLeafrefType1, SCHEMA_PATH).build(); final DerivedLeafrefType derivedLeafrefType2 = (DerivedLeafrefType)DerivedTypes .derivedTypeBuilder(baseLeafrefType2, SCHEMA_PATH).build(); hashCodeEqualsToStringTest(derivedLeafrefType1, derivedLeafrefType2); restrictedBuilderTest(RestrictedTypes.newLeafrefBuilder(baseLeafrefType1, SCHEMA_PATH), RestrictedTypes.newLeafrefBuilder(baseLeafrefType2, SCHEMA_PATH)); concreteBuilderTest(baseLeafrefType1, derivedLeafrefType1); } @Test public void unionTypeTest() throws IllegalAccessException, InstantiationException { final BaseDecimalType baseDecimalType1 = (BaseDecimalType)BaseTypes.decimalTypeBuilder(SCHEMA_PATH) .setFractionDigits(1) .buildType(); final BaseDecimalType baseDecimalType2 = (BaseDecimalType)BaseTypes.decimalTypeBuilder(SCHEMA_PATH) .setFractionDigits(1) .buildType(); final UnionTypeBuilder unionTypeBuilder1 = BaseTypes.unionTypeBuilder(SCHEMA_PATH); final UnionTypeBuilder unionTypeBuilder2 = BaseTypes.unionTypeBuilder(SCHEMA_PATH); unionTypeBuilder1.addType(baseDecimalType1); unionTypeBuilder2.addType(baseDecimalType2); final BaseUnionType baseUnionType1 = (BaseUnionType)unionTypeBuilder1.build(); final BaseUnionType baseUnionType2 = (BaseUnionType)unionTypeBuilder2.build(); hashCodeEqualsToStringTest(baseUnionType1, baseUnionType2); assertEquals(baseUnionType1.getTypes(), baseUnionType2.getTypes()); final DerivedUnionType derivedUnionType1 = (DerivedUnionType)DerivedTypes .derivedTypeBuilder(baseUnionType1, SCHEMA_PATH).build(); final DerivedUnionType derivedUnionType2 = (DerivedUnionType)DerivedTypes .derivedTypeBuilder(baseUnionType2, SCHEMA_PATH).build(); hashCodeEqualsToStringTest(derivedUnionType1, derivedUnionType2); restrictedBuilderTest(RestrictedTypes.newUnionBuilder(baseUnionType1, SCHEMA_PATH), RestrictedTypes.newUnionBuilder(baseUnionType2, SCHEMA_PATH)); concreteBuilderTest(baseUnionType1, derivedUnionType1); } @Test public void abstractTypeDefinitionQnameTest() { final AbstractTypeDefinition<?> abstractTypeDefinition = (AbstractTypeDefinition<?>)BaseTypes.decimalTypeBuilder (SCHEMA_PATH).setFractionDigits(1).buildType(); assertEquals(abstractTypeDefinition.getQName(), Q_NAME); } @Test public void abstractDerivedTypeTest() { final BaseBinaryType baseBinaryType1 = BaseBinaryType.INSTANCE; final AbstractDerivedType<?> abstractDerivedType = (AbstractDerivedType<?>) DerivedTypes.derivedTypeBuilder(baseBinaryType1, SCHEMA_PATH).build(); assertEquals(abstractDerivedType.getDescription(), null); assertEquals(abstractDerivedType.getReference(), null); assertEquals(abstractDerivedType.getStatus().toString(), "CURRENT"); assertFalse(DerivedTypes.isInt8(baseBinaryType1)); assertFalse(DerivedTypes.isUint8(baseBinaryType1)); assertFalse(DerivedTypes.isInt16(baseBinaryType1)); assertFalse(DerivedTypes.isUint16(baseBinaryType1)); assertFalse(DerivedTypes.isInt32(baseBinaryType1)); assertFalse(DerivedTypes.isUint32(baseBinaryType1)); assertFalse(DerivedTypes.isInt64(baseBinaryType1)); assertFalse(DerivedTypes.isUint64(baseBinaryType1)); } @Test public void concreteTypeBuilderBuildTest() { final BaseEnumerationType baseEnumerationType1 = (BaseEnumerationType)BaseTypes.enumerationTypeBuilder (SCHEMA_PATH).build(); final ConcreteTypeBuilder<?> concreteTypeBuilder = ConcreteTypes.concreteTypeBuilder(baseEnumerationType1, SCHEMA_PATH); final TypeDefinition<?> typeDefinition = concreteTypeBuilder.build(); assertNotNull(typeDefinition); } @Test public void constraintTypeBuilderTest() { final BaseBinaryType baseBinaryType = (BaseBinaryType)BaseTypes.binaryType(); final LengthRestrictedTypeBuilder<?> lengthRestrictedTypeBuilder = RestrictedTypes .newBinaryBuilder(baseBinaryType, SCHEMA_PATH); final Long min = Long.valueOf(0); final UnresolvedNumber max = UnresolvedNumber.max(); final LengthConstraint lengthConstraint = BaseConstraints.newLengthConstraint(min, max, ABSENT, ABSENT); final ArrayList<LengthConstraint> lengthArrayList = new ArrayList<>(1); assertEquals(lengthConstraint.getErrorAppTag(), "length-out-of-specified-bounds"); assertEquals(lengthConstraint.getErrorMessage(), "The argument is out of bounds <0, max>"); lengthArrayList.add(lengthConstraint); lengthRestrictedTypeBuilder.setLengthAlternatives(lengthArrayList); final TypeDefinition<?> typeDefinition = lengthRestrictedTypeBuilder.buildType(); assertNotNull(typeDefinition); final IntegerTypeDefinition integerTypeDefinition8 = BaseTypes.int8Type(); final RangeRestrictedTypeBuilder<?> rangeRestrictedTypeBuilder = RestrictedTypes .newIntegerBuilder(integerTypeDefinition8, SCHEMA_PATH); final RangeConstraint rangeConstraint = BaseConstraints.newRangeConstraint(min, max, ABSENT, ABSENT); final ArrayList<RangeConstraint> rangeArrayList = new ArrayList<>(1); rangeArrayList.add(rangeConstraint); rangeRestrictedTypeBuilder.setRangeAlternatives(rangeArrayList); final TypeDefinition<?> typeDefinition1 = rangeRestrictedTypeBuilder.buildType(); assertNotNull(typeDefinition1); } @Test public void exceptionTest() { final Optional<String> absent = Optional.absent(); final UnresolvedNumber min = UnresolvedNumber.min(); final UnresolvedNumber max = UnresolvedNumber.max(); final LengthConstraint lengthConstraint = BaseConstraints.newLengthConstraint(min, max, absent, absent); final RangeConstraint rangeConstraint= BaseConstraints.newRangeConstraint(min, max, absent, absent); final EnumPair enumPair = EnumPairBuilder.create("enum1", 1).setDescription("description") .setReference("reference").setUnknownSchemaNodes(mock(UnknownSchemaNode.class)).build(); final InvalidLengthConstraintException invalidLengthConstraintException = new InvalidLengthConstraintException( lengthConstraint, "error msg", "other important messages"); assertEquals(invalidLengthConstraintException.getOffendingConstraint(), lengthConstraint); final InvalidRangeConstraintException invalidRangeConstraintException = new InvalidRangeConstraintException( rangeConstraint, "error msg", "other important messages"); assertEquals(invalidRangeConstraintException.getOffendingConstraint(), rangeConstraint); final InvalidBitDefinitionException invalidBitDefinitionException = new InvalidBitDefinitionException( BIT_A, "error msg", "other important messages"); assertEquals(invalidBitDefinitionException.getOffendingBit(), BIT_A); final InvalidEnumDefinitionException invalidEnumDefinitionException= new InvalidEnumDefinitionException( enumPair, "error msg", "other important messages"); assertEquals(invalidEnumDefinitionException.getOffendingEnum(), enumPair); } @Test(expected = NullPointerException.class) public void identityrefTypeBuilderException() { BaseTypes.identityrefTypeBuilder(SCHEMA_PATH).build(); } @Test(expected = InvalidBitDefinitionException.class) public void invalidBitDefinitionExceptionTest() { final BitsTypeBuilder bitsTypeBuilder = BaseTypes.bitsTypeBuilder(SCHEMA_PATH); final QName qName = QName.create("test.namespace.1", "2016-01-02", "test-name-1"); final SchemaPath schemaPath = SchemaPath.create(true, qName); bitsTypeBuilder.addBit(BIT_A); bitsTypeBuilder.addBit(BitBuilder.create(schemaPath, 55L).build()); bitsTypeBuilder.build(); } @Test(expected = InvalidEnumDefinitionException.class) public void invalidEnumDefinitionExceptionTest() { final UnknownSchemaNode UNKNOWN_SCHEMA_NODE= mock(UnknownSchemaNode.class); final EnumPair enumPair1 = EnumPairBuilder.create("enum1", 1).setDescription("description") .setReference("reference").setUnknownSchemaNodes(UNKNOWN_SCHEMA_NODE).build(); final EnumPair enumPair2 = EnumPairBuilder.create("enum", 1).setDescription("description") .setReference("reference").setUnknownSchemaNodes(UNKNOWN_SCHEMA_NODE).build(); final EnumerationTypeBuilder enumerationTypeBuilder = BaseTypes.enumerationTypeBuilder(SCHEMA_PATH); enumerationTypeBuilder.addEnum(enumPair1); enumerationTypeBuilder.addEnum(enumPair2); enumerationTypeBuilder.build(); } private static void hashCodeEqualsToStringTest(final TypeDefinition<?> type1, final TypeDefinition<?> type2) { assertEquals(type1.hashCode(), type2.hashCode()); assertEquals(type1.toString(), type2.toString()); assertTrue(type1.equals(type2)); } private static <T> void testInstance(final T type1, final T type2) { assertEquals(type1, type2); } private static void restrictedBuilderTest(final Builder<?> typeBuilder1, final Builder<?> typeBuilder2) { final TypeDefinition<?> typeDefinition1 = ((AbstractRestrictedTypeBuilder<?>) typeBuilder1).buildType(); final TypeDefinition<?> typeDefinition2 = ((AbstractRestrictedTypeBuilder<?>) typeBuilder2).buildType(); hashCodeEqualsToStringTest(typeDefinition1, typeDefinition2); } private static void concreteBuilderTest(final TypeDefinition<?> baseTypeDef, final TypeDefinition<?> derivedTypeDef) { final ConcreteTypeBuilder<?> concreteTypeBuilder = ConcreteTypes.concreteTypeBuilder(baseTypeDef, SCHEMA_PATH); final TypeDefinition<?> typeDefinition = concreteTypeBuilder.buildType(); assertEquals(typeDefinition.getBaseType(), derivedTypeDef.getBaseType()); } }