/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * * $Rev$ $Date$ */ package test.sdo21.tests.api; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.List; import java.util.ListIterator; import java.util.SortedSet; import java.util.TreeSet; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.fail; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertNotNull; import test.sdo21.framework.CTSTestCase; import test.sdo21.framework.TestHelper; import commonj.sdo.DataObject; import commonj.sdo.Property; import commonj.sdo.Type; import commonj.sdo.helper.DataFactory; import commonj.sdo.helper.HelperContext; import commonj.sdo.helper.TypeHelper; import commonj.sdo.helper.XMLDocument; import commonj.sdo.helper.XMLHelper; import commonj.sdo.helper.XSDHelper; /** * Tests methods of DataGraph except for change summary which is tested elsewhere. */ public class DynamicTypesFromSchemaTestCase extends CTSTestCase { private final String DYNAMIC_ROOT_TYPE_0 = "TestType0"; private final String DYNAMIC_ROOT_TYPE_1 = "TestType1"; private final String DYNAMIC_ROOT_TYPE_2 = "TestType2"; private final String DYNAMIC_TYPES_SCHEMA = "/dynamicTypesFromSchema.xsd"; private final String DYNAMIC_TYPES_URI = "http://www.example.com/dynamicTypesFromSchema"; private HelperContext hc; private final String TEST_XML_DOC_0 = "/dynamicTypesFromSchema0.xml"; private final String TEST_XML_DOC_1 = "/dynamicTypesFromSchema1.xml"; private final String TEST_XML_DOC_2 = "/dynamicTypesFromSchema2.xml"; private List typeList; @Before public void setUp() throws Exception { TestHelper testHelper = getTestHelper(); hc = testHelper.createHelperContext(); // Populate the meta data for the types defined in schema URL url = getClass().getResource(DYNAMIC_TYPES_SCHEMA); InputStream inputStream = url.openStream(); XSDHelper xsdHelper = hc.getXSDHelper(); typeList = xsdHelper.define(inputStream, url.toString()); inputStream.close(); } /** * test of Schema complex types */ @Test public void testDynamicTypeList() throws IOException { if (typeList == null) { fail("typeList unexpectedly null"); } ListIterator li = typeList.listIterator(); SortedSet typeNameSet = new TreeSet(); while (li.hasNext()) { Object obj = li.next(); if (obj instanceof Type) { typeNameSet.add(((Type)obj).getName()); } else { fail("a type list entry was not a type: " + obj.toString()); } } assertTrue(typeNameSet.contains("Address")); assertTrue(typeNameSet.contains("Component")); assertTrue(typeNameSet.contains("TestType0")); assertTrue(typeNameSet.contains("TestType1")); assertTrue(typeNameSet.contains("TestType2")); assertTrue(typeNameSet.contains("evenNumberOfOddOrEvenDigits")); assertTrue(typeNameSet.contains("evenNumberOfOddOrEvenDigitsObject")); assertTrue(typeNameSet.contains("month")); assertTrue(typeNameSet.contains("monthList")); assertTrue(typeNameSet.contains("monthObject")); assertTrue(typeNameSet.contains("oddOrEvenDigits")); assertTrue(typeNameSet.contains("oddOrEvenDigitsObject")); assertTrue(typeNameSet.contains("smallBigDecimal")); assertTrue(typeNameSet.contains("smallBigInteger")); assertTrue(typeNameSet.contains("smallInt")); assertTrue(typeNameSet.contains("smallIntObject")); assertTrue(typeNameSet.contains("smallOddNumber")); assertTrue(typeNameSet.contains("smallOddNumberObject")); assertTrue(typeNameSet.contains("status")); assertTrue(typeNameSet.contains("statusOrMonthList")); } /** * test #0 of Schema primitive datatypes */ @Test public void testDynamicTypesGroup0() throws IOException { if (hc == null) { fail("the HelperContext unexpectedly null"); } TypeHelper th = hc.getTypeHelper(); Type rootType0 = th.getType(DYNAMIC_TYPES_URI, DYNAMIC_ROOT_TYPE_0); assertNotNull(rootType0); DataFactory df = hc.getDataFactory(); DataObject rootObject = df.create(rootType0); assertNotNull(rootObject); XMLHelper xh = hc.getXMLHelper(); XMLDocument doc = xh.load(getClass().getResourceAsStream(TEST_XML_DOC_0)); DataObject rootObject0 = doc.getRootObject(); assertNotNull(rootObject0); List propList = rootObject0.getInstanceProperties(); SortedSet propNameSet = new TreeSet(); ListIterator li1 = propList.listIterator(); while (li1.hasNext()) { Object obj = li1.next(); if (obj instanceof Property) { propNameSet.add(((Property)obj).getName()); } else { fail("getInstanceProperties list contained: " + obj.toString()); } } assertTrue("Property name set does not contain 'anyURI'.", propNameSet.contains("anyURI")); assertTrue("Property name set does not contain 'base64Binary'.", propNameSet.contains("base64Binary")); assertTrue("Property name set does not contain 'boolean'.", propNameSet.contains("boolean")); assertTrue("Property name set does not contain 'date'.", propNameSet.contains("date")); assertTrue("Property name set does not contain 'dateTime'.", propNameSet.contains("dateTime")); assertTrue("Property name set does not contain 'decimal'.", propNameSet.contains("decimal")); assertTrue("Property name set does not contain 'double'.", propNameSet.contains("double")); assertTrue("Property name set does not contain 'duration'.", propNameSet.contains("duration")); assertTrue("Property name set does not contain 'float'.", propNameSet.contains("float")); assertTrue("Property name set does not contain 'gDay'.", propNameSet.contains("gDay")); assertTrue("Property name set does not contain 'gMonth'.", propNameSet.contains("gMonth")); assertTrue("Property name set does not contain 'gMonthDay'.", propNameSet.contains("gMonthDay")); assertTrue("Property name set does not contain 'gYear'.", propNameSet.contains("gYear")); assertTrue("Property name set does not contain 'gYearMonth'.", propNameSet.contains("gYearMonth")); assertTrue("Property name set does not contain 'hexBinary'.", propNameSet.contains("hexBinary")); assertTrue("Property name set does not contain 'string'.", propNameSet.contains("string")); assertTrue("Property name set does not contain 'time'.", propNameSet.contains("time")); } /** * test #1 of Schema derived datatypes */ @Test public void testDynamicTypesGroup1() throws IOException { if (hc == null) { fail("the HelperContext unexpectedly null"); } TypeHelper th = hc.getTypeHelper(); Type rootType = th.getType(DYNAMIC_TYPES_URI, DYNAMIC_ROOT_TYPE_1); assertNotNull(rootType); DataFactory df = hc.getDataFactory(); DataObject rootObject = df.create(rootType); assertNotNull(rootObject); XMLHelper xh = hc.getXMLHelper(); XMLDocument doc = xh.load(getClass().getResourceAsStream(TEST_XML_DOC_1)); DataObject rootObject1 = doc.getRootObject(); assertNotNull(rootObject1); List propList = rootObject1.getInstanceProperties(); SortedSet propNameSet = new TreeSet(); ListIterator li1 = propList.listIterator(); while (li1.hasNext()) { Object obj = li1.next(); if (obj instanceof Property) { propNameSet.add(((Property)obj).getName()); } else { fail("getInstanceProperties list contained: " + obj.toString()); } } assertTrue("Property name set does not contain 'ID'.", propNameSet.contains("ID")); assertTrue("Property name set does not contain 'IDREF'.", propNameSet.contains("IDREF")); assertTrue("Property name set does not contain 'IDREFS'.", propNameSet.contains("IDREFS")); assertTrue("Property name set does not contain 'NCName'.", propNameSet.contains("NCName")); assertTrue("Property name set does not contain 'NMTOKEN'.", propNameSet.contains("NMTOKEN")); assertTrue("Property name set does not contain 'NMTOKENS'.", propNameSet.contains("NMTOKENS")); assertTrue("Property name set does not contain 'Name'.", propNameSet.contains("Name")); assertTrue("Property name set does not contain 'byte'.", propNameSet.contains("byte")); assertTrue("Property name set does not contain 'int'.", propNameSet.contains("int")); assertTrue("Property name set does not contain 'integer'.", propNameSet.contains("integer")); assertTrue("Property name set does not contain 'language'.", propNameSet.contains("language")); assertTrue("Property name set does not contain 'long'.", propNameSet.contains("long")); assertTrue("Property name set does not contain 'negativeInteger'.", propNameSet.contains("negativeInteger")); assertTrue("Property name set does not contain 'nonNegativeInteger'.", propNameSet.contains("nonNegativeInteger")); assertTrue("Property name set does not contain 'nonPositiveInteger'.", propNameSet.contains("nonPositiveInteger")); assertTrue("Property name set does not contain 'normalizedString'.", propNameSet.contains("normalizedString")); assertTrue("Property name set does not contain 'positiveInteger'.", propNameSet.contains("positiveInteger")); assertTrue("Property name set does not contain 'short'.", propNameSet.contains("short")); assertTrue("Property name set does not contain 'token'.", propNameSet.contains("token")); assertTrue("Property name set does not contain 'unsignedByte'.", propNameSet.contains("unsignedByte")); assertTrue("Property name set does not contain 'unsignedInt'.", propNameSet.contains("unsignedInt")); assertTrue("Property name set does not contain 'unsignedLong'.", propNameSet.contains("unsignedLong")); assertTrue("Property name set does not contain 'unsignedShort'.", propNameSet.contains("unsignedShort")); } /** * test #2 of more Schema derived datatypes */ @Test public void testDynamicTypesGroup2() throws IOException { if (hc == null) { fail("the HelperContext unexpectedly null"); } TypeHelper th = hc.getTypeHelper(); Type rootType = th.getType(DYNAMIC_TYPES_URI, DYNAMIC_ROOT_TYPE_2); assertNotNull(rootType); DataFactory df = hc.getDataFactory(); DataObject rootObject = df.create(rootType); assertNotNull(rootObject); XMLHelper xh = hc.getXMLHelper(); XMLDocument doc = xh.load(getClass().getResourceAsStream(TEST_XML_DOC_2)); DataObject rootObject2 = doc.getRootObject(); assertNotNull(rootObject2); List propList = rootObject2.getInstanceProperties(); SortedSet propNameSet = new TreeSet(); ListIterator li1 = propList.listIterator(); while (li1.hasNext()) { Object obj = li1.next(); if (obj instanceof Property) { propNameSet.add(((Property)obj).getName()); } else { fail("getInstanceProperties list contained: " + obj.toString()); } } assertTrue("Property name set does not contain 'addresses'.", propNameSet.contains("addresses")); assertTrue("Property name set does not contain 'cluster'.", propNameSet.contains("cluster")); assertTrue("Property name set does not contain 'clusters'.", propNameSet.contains("clusters")); assertTrue("Property name set does not contain 'components'.", propNameSet.contains("components")); assertTrue("Property name set does not contain 'headerValue'.", propNameSet.contains("headerValue")); assertTrue("Property name set does not contain 'item'.", propNameSet.contains("item")); assertTrue("Property name set does not contain 'items'.", propNameSet.contains("items")); assertTrue("Property name set does not contain 'nCName'.", propNameSet.contains("nCName")); assertTrue("Property name set does not contain 'otherTag'.", propNameSet.contains("otherTag")); assertTrue("Property name set does not contain 'overallStatus'.", propNameSet.contains("overallStatus")); assertTrue("Property name set does not contain 'smallBigDecimal'.", propNameSet.contains("smallBigDecimal")); assertTrue("Property name set does not contain 'smallBigInteger'.", propNameSet.contains("smallBigInteger")); assertTrue("Property name set does not contain 'smallInt'.", propNameSet.contains("smallInt")); assertTrue("Property name set does not contain 'smallOddNumber'.", propNameSet.contains("smallOddNumber")); assertTrue("Property name set does not contain 'statusOrMonthList'.", propNameSet.contains("statusOrMonthList")); assertTrue("Property name set does not contain 'wierdNumber'.", propNameSet.contains("wierdNumber")); } }