diff options
Diffstat (limited to 'sdo-java/trunk-cts/sdo2.1/src/main/java/test/sdo21/tests/general/XSDHelperTest.java')
-rw-r--r-- | sdo-java/trunk-cts/sdo2.1/src/main/java/test/sdo21/tests/general/XSDHelperTest.java | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/sdo-java/trunk-cts/sdo2.1/src/main/java/test/sdo21/tests/general/XSDHelperTest.java b/sdo-java/trunk-cts/sdo2.1/src/main/java/test/sdo21/tests/general/XSDHelperTest.java new file mode 100644 index 0000000000..1705f00e8a --- /dev/null +++ b/sdo-java/trunk-cts/sdo2.1/src/main/java/test/sdo21/tests/general/XSDHelperTest.java @@ -0,0 +1,239 @@ +/** + * 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.general; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.IOException; +import java.io.Reader; +import java.net.URL; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; +import java.util.Vector; + +//import org.junit.Before; +import javax.xml.namespace.QName; +import javax.xml.transform.stream.StreamSource; + +import org.apache.ws.commons.schema.XmlSchema; +import org.apache.ws.commons.schema.XmlSchemaCollection; +import org.apache.ws.commons.schema.XmlSchemaComplexType; +import org.apache.ws.commons.schema.XmlSchemaObject; +import org.apache.ws.commons.schema.XmlSchemaObjectTable; +import org.apache.ws.commons.schema.XmlSchemaType; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.Ignore; + +import test.sdo21.CTSSuite; +import test.sdo21.framework.CTSTestCase; + +import commonj.sdo.DataObject; +import commonj.sdo.Type; +import commonj.sdo.helper.HelperContext; +import commonj.sdo.helper.TypeHelper; +import commonj.sdo.helper.XSDHelper; + +/** + * Tests XSD serialization/deserialization.<p/> + * This tests requires extension by import or creation of further tests. + * It currently only tests one flavour of {@link XSDHelper#define(java.io.InputStream, String)} and {@link XSDHelper#generate(List)}) + * + * @see <a href="http://osoa.org/download/attachments/36/Java-SDO-Spec-v2.1.0-FINAL.pdf?version=1#page=52">2.1 spec section 3.13</a> + * @see <a href="http://osoa.org/download/attachments/36/Java-SDO-Spec-v2.1.0-FINAL.pdf?version=1#page=56">2.1 spec section 4</a> + * + */ +public class XSDHelperTest extends CTSTestCase { + private static final String TEST_MODEL = "/simple.xsd"; + private XmlSchemaCollection col = new XmlSchemaCollection(); + private static URL modelURL; + + /** + * Obtains test model resource. Runs once before any of the test methods. + */ + @BeforeClass + public static void obtainResource() { + modelURL = XSDHelperTest.class.getResource(TEST_MODEL); + } + + @Before public void setUp() throws Exception + { + super.setUp(); + } + + @After + public void tearDown() throws Exception { + super.tearDown(); + } + + /** + * Verifies the performance of XSDHelper.define() when a SchemaLocation is provided. + * @see <a href="http://osoa.org/download/attachments/36/Java-SDO-Spec-v2.1.0-FINAL.pdf?version=1#page=52">2.1 spec section 3.13</a> + * @see commonj.sdo.XSDHelper#define(InputStream, String) + */ + @Test + public void testDefineWithLocation() { + try { + + XSDHelper xsdHelper = getScope().getXSDHelper(); + List types = xsdHelper.define(modelURL.openStream(), modelURL.toString()); + checkTypes(modelURL, getScope().getTypeHelper(), types); + } catch (Exception e) { + fail("Exception calling xsdHelper.define" + e.toString()); + } + } + + + /** + * Utility method to ensure that the set of types in the list includes all those explicity + * defined in the schema<p> + * Checking xsd type definition post condition ---<br/> + * <i>for all t in schemaTypes there exists a t' in types such that QName(t) == QName(t')</i> + * @param modelUrl location of the schema related to the set of types + * @param typeHelper associated with the scope for the types in the list + * @param types + */ + private void checkTypes(URL modelUrl, TypeHelper typeHelper, List types) { + try { + XmlSchema schema = col.read(new StreamSource(modelUrl.openStream()), null); + XmlSchemaObjectTable schemaTypes = schema.getSchemaTypes(); + + Iterator<XmlSchemaType> it = schemaTypes.getValues(); + XmlSchemaType schemaType; + while (it.hasNext()){ + schemaType = it.next(); + QName qname = schemaType.getQName(); + Type sdoType = typeHelper.getType(qname.getNamespaceURI(), qname.getLocalPart()); + assertNotNull("Type not known to SDO environment: "+ qname, sdoType); + assertTrue("Sdo type not created from this invocation of type definition", types.contains(sdoType)); + } + } catch (IOException e) { + + fail("Exception parsing schema" + e); + } + } + + /** + * Verifies the performance of XSDHelper.define() when a SchemaLocation is not provided. + * @see <a href="http://osoa.org/download/attachments/36/Java-SDO-Spec-v2.1.0-FINAL.pdf?version=1#page=52">2.1 spec section 3.13</a> + * @see commonj.sdo.XSDHelper#define(InputStream, String) + */ + @Test + public void testDefineWithNoLocation() { + try { + XSDHelper xsdHelper = getScope().getXSDHelper(); + List types = xsdHelper.define(XSDHelperTest.class.getResourceAsStream(TEST_MODEL), null); + checkTypes(modelURL, getScope().getTypeHelper(), types); + //assertEquals("XSDHelper.define() did not create the expected number of Types", 2, types.size()); + + } catch (Exception e) { + e.printStackTrace(); + fail("Exception caught" + e.toString()); + } + } + + /** + * Verifies that duplicate Types are not redefined. + * @see <a href="http://osoa.org/download/attachments/36/Java-SDO-Spec-v2.1.0-FINAL.pdf?version=1#page=52">2.1 spec section 3.13</a> + * @see commonj.sdo.XSDHelper#define(InputStream, String) + */ + @Test + public void testDuplicateDefineWithLocation() { + try { + XSDHelper xsdHelper = getScope().getXSDHelper(); + List types = xsdHelper.define(modelURL.openStream(), modelURL.toString()); + assertTrue("XSDHelper.define() did not create the expected number of Types", types.size() > 0); + // redefine type + List duplicateTypes = xsdHelper.define(modelURL.openStream(), modelURL.toString()); + assertEquals("XSDHelper.define() did not create the expected number of Types", 0, duplicateTypes.size()); + + } catch (Exception e) { + e.printStackTrace(); + fail("Exception caught" + e.toString()); + } + } + + /** + * Verifies the performance of XSDHelper.generate for dynamic SDOs with no XSD model.<p/> + * Could improve this by postconditions on generated schema. + * @see commonj.sdo.XSDHelper#generate(InputStream, String) + * @see <a href="http://osoa.org/download/attachments/36/Java-SDO-Spec-v2.1.0-FINAL.pdf?version=1#page=53">2.1 spec section 3.13.2</a> + * @see <a href="http://osoa.org/download/attachments/36/Java-SDO-Spec-v2.1.0-FINAL.pdf?version=1#page=56">2.1 spec section 4</a> + */ + @Test + public void testXSDGeneration_DynamicSDOType() { + try { + boolean exceptionCaught = false; + + // test for dynamic SDOs that have no XSD model. Here the testcase + // succeeds only if the + // xsd is generated by XSDHelper in which case xsd must not be null + XSDHelper xsdHelper = getScope().getXSDHelper(); + DataObject quoteType = getScope().getDataFactory().create("commonj.sdo", "Type"); + quoteType.set("uri", "http://www.example.com/dynamic"); + quoteType.set("name", "DynamicQuote"); + + TypeHelper th = getScope().getTypeHelper(); + DataObject aProperty = quoteType.createDataObject("property"); + aProperty.set("name", "symbol"); + aProperty.set("type", th.getType("commonj.sdo", "String")); + + aProperty = quoteType.createDataObject("property"); + aProperty.set("name", "price"); + aProperty.set("type", th.getType("commonj.sdo", "Decimal")); + + aProperty = quoteType.createDataObject("property"); + aProperty.set("name", "volume"); + aProperty.set("type", th.getType("commonj.sdo", "Double")); + + th.define(quoteType); + + Type dynamicQuoteType = th.getType("http://www.example.com/dynamic", "DynamicQuote"); + + Vector types = new Vector(); + types.add(dynamicQuoteType); + String xsd = null; + + try { + xsd = xsdHelper.generate(types); + assertNotNull("XSDHelper.generate() did not complete as expected for dynamic SDOs with no XSD model. Exception was thrown", + xsd); + } catch (IllegalArgumentException e) { + fail("XSDHelper.generate() did not complete as expected for dynamic SDOs with no XSD model. Exception was thrown : " + e + .toString()); + } catch (Exception e) { + fail("Exception caught when generating a schema"); + } + + } catch (Exception e) { + e.printStackTrace(); + fail("Exception caught" + e.toString()); + } + } + +} |