getResourceAsString("res/address-type.xml"),
ImmutableStructureTypeImpl.class);
final Set rootFields = rootType.getFields();
assertEquals(1, rootFields.size());
final FieldDefinition addressDef =
(FieldDefinition) rootFields.iterator().next();
final ImmutableStructureType addressType =
(ImmutableStructureType) addressDef.getType();
final Set addressFields = addressType.getFields();
assertEquals(2, addressFields.size());
final FieldDefinition postalDef =
getFieldDefinition("postal", addressFields);
final FieldDefinition emailDef =
getFieldDefinition("email", addressFields);
final ImmutableStringType emailType =
(ImmutableStringType) emailDef.getType();
assertNull(emailType.getEnumeratedConstraint());
final ImmutableStructureType postalType =
(ImmutableStructureType) postalDef.getType();
final Set postalFields = postalType.getFields();
assertEquals(4, postalFields.size());
final FieldDefinition cityDef = getFieldDefinition("city", postalFields);
final FieldDefinition streetNameDef =
getFieldDefinition("street-name", postalFields);
final FieldDefinition streetTypeDef =
getFieldDefinition("street-type", postalFields);
final FieldDefinition houseNumberDef =
getFieldDefinition("house-number", postalFields);
final ImmutableStringType cityType =
(ImmutableStringType) cityDef.getType();
assertNull(cityType.getEnumeratedConstraint());
final ImmutableStringType streetNameType =
(ImmutableStringType) streetNameDef.getType();
assertNull(streetNameType.getEnumeratedConstraint());
final ImmutableStringType streetTypeType =
(ImmutableStringType) streetTypeDef.getType();
final ImmutableEnumeratedConstraint enumeratedConstraint =
streetTypeType.getEnumeratedConstraint();
final Iterator constraintIter =
enumeratedConstraint.getEnumeratedValues().iterator();
final ImmutableStringValue road =
(ImmutableStringValue) constraintIter.next();
assertEquals("Road", road.getValueAsString());
final ImmutableStringValue street =
(ImmutableStringValue) constraintIter.next();
assertEquals("Street", street.getValueAsString());
final ImmutableStringValue avenue =
(ImmutableStringValue) constraintIter.next();
assertEquals("Avenue", avenue.getValueAsString());
final ImmutableNumberType houseNumberType =
(ImmutableNumberType) houseNumberDef.getType();
final ImmutableNumberSubTypeConstraint subTypeConstraint =
houseNumberType.getNumberSubTypeConstraint();
assertEquals(Integer.class, subTypeConstraint.getNumberSubType());
final ImmutableMinimumValueConstraint minimumValueConstraint =
houseNumberType.getMinimumValueConstraint();