diff options
Diffstat (limited to 'sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany')
56 files changed, 11462 insertions, 0 deletions
diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/AllTests.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/AllTests.java new file mode 100644 index 0000000000..7d91456137 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/AllTests.java @@ -0,0 +1,41 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo; +import junit.framework.Test; +import junit.framework.TestSuite; + +public class AllTests { + + public static Test suite() { + + TestSuite suite = new TestSuite(); + + suite.addTest(org.apache.tuscany.sdo.codegen.AllTests.suite()); + suite.addTest(org.apache.tuscany.sdo.test.AllTests.suite()); + + return suite; + } + + + public static void main(String[] args) { + junit.textui.TestRunner.run(suite()); + } +} + diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/AllTests.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/AllTests.java new file mode 100644 index 0000000000..d67b53fb7c --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/AllTests.java @@ -0,0 +1,47 @@ +/** + * + * 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. + */ + +package org.apache.tuscany.sdo.codegen; +import junit.framework.Test; +import junit.framework.TestSuite; + +public class AllTests { + + + public static TestSuite suite() { + + TestSuite suite = new TestSuite(); + + suite.addTestSuite(BytecodeInterfaceGeneratorTestCase.class); + suite.addTestSuite(JavaInterfaceGeneratorTestCase.class); + + + return suite; + } + + + /** + * Runs the test suite using the textual runner. + */ + public static void main(String[] args) { + junit.textui.TestRunner.run(suite()); + } +} + diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/Bar1.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/Bar1.java new file mode 100644 index 0000000000..4a51310cd0 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/Bar1.java @@ -0,0 +1,26 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.codegen; + +/** + * @version $Rev$ $Date$ + */ +public interface Bar1 { +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/Bar2.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/Bar2.java new file mode 100644 index 0000000000..e9151b9d46 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/Bar2.java @@ -0,0 +1,26 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.codegen; + +/** + * @version $Rev$ $Date$ + */ +public interface Bar2 { +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/BytecodeInterfaceGeneratorTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/BytecodeInterfaceGeneratorTestCase.java new file mode 100644 index 0000000000..218a725226 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/BytecodeInterfaceGeneratorTestCase.java @@ -0,0 +1,167 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.codegen; + +import java.lang.reflect.Method; +import java.util.List; + +import junit.framework.TestCase; + +/** + * @version $Rev$ $Date$ + */ +public class BytecodeInterfaceGeneratorTestCase extends TestCase { + private MockType foo; + private BytecodeInterfaceGenerator gen; + private TestClassLoader cl; + + public void testHeaderNoBaseClass() { + gen.visitType(foo); + gen.visitEnd(); + Class c = cl.addClass(gen.getClassData()); + assertEquals("Foo", c.getName()); + assertTrue(c.isInterface()); + assertEquals(0, c.getInterfaces().length); + assertEquals(0, c.getMethods().length); + } + + public void testHeaderWithPackage() { + gen.visitType(new MockType("org.apache.Foo", null)); + gen.visitEnd(); + Class c = cl.addClass(gen.getClassData()); + assertEquals("org.apache.Foo", c.getName()); + assertEquals(0, c.getInterfaces().length); + assertEquals(0, c.getMethods().length); + } + + public void testHeaderOneBaseClass() throws NoJavaImplementationException { + foo.addBaseType(new MockType("bar1", Bar1.class)); + gen.visitType(foo); + gen.visitEnd(); + Class c = cl.addClass(gen.getClassData()); + assertEquals("Foo", c.getName()); + assertEquals(1, c.getInterfaces().length); + assertEquals(Bar1.class, c.getInterfaces()[0]); + assertEquals(0, c.getMethods().length); + } + + public void testHeaderMultipleBaseClass() throws NoJavaImplementationException { + foo.addBaseType(new MockType("bar1", Bar1.class)); + foo.addBaseType(new MockType("bar2", Bar2.class)); + gen.visitType(foo); + gen.visitEnd(); + Class c = cl.addClass(gen.getClassData()); + assertEquals("Foo", c.getName()); + assertEquals(2, c.getInterfaces().length); + assertEquals(Bar1.class, c.getInterfaces()[0]); + assertEquals(Bar2.class, c.getInterfaces()[1]); + assertEquals(0, c.getMethods().length); + } + + public void testBooleanProperty() throws NoJavaImplementationException, NoSuchMethodException { + gen.visitType(foo); + gen.visitProperty(new MockProperty("true", Boolean.TYPE, false, false)); + gen.visitEnd(); + Class c = cl.addClass(gen.getClassData()); + assertEquals(2, c.getMethods().length); + Method getter = c.getMethod("isTrue", new Class[0]); + assertEquals(boolean.class, getter.getReturnType()); + Method setter = c.getMethod("setTrue", new Class[] {boolean.class}); + assertEquals(void.class, setter.getReturnType()); + } + + public void testByteArrayProperty() throws NoJavaImplementationException, NoSuchMethodException { + gen.visitType(foo); + gen.visitProperty(new MockProperty("bytes", byte[].class, false, false)); + gen.visitEnd(); + Class c = cl.addClass(gen.getClassData()); + assertEquals(2, c.getMethods().length); + Method getter = c.getMethod("getBytes", new Class[0]); + assertEquals(byte[].class, getter.getReturnType()); + Method setter = c.getMethod("setBytes", new Class[] {byte[].class}); + assertEquals(void.class, setter.getReturnType()); + } + + public void testObjectProperty() throws NoJavaImplementationException, NoSuchMethodException { + gen.visitType(foo); + gen.visitProperty(new MockProperty("bar", Bar1.class, false, false)); + gen.visitEnd(); + Class c = cl.addClass(gen.getClassData()); + assertEquals(2, c.getMethods().length); + Method getter = c.getMethod("getBar", new Class[0]); + assertEquals(Bar1.class, getter.getReturnType()); + Method setter = c.getMethod("setBar", new Class[] {Bar1.class}); + assertEquals(void.class, setter.getReturnType()); + } + + public void testReadOnlyProperty() throws NoJavaImplementationException, NoSuchMethodException { + gen.visitType(foo); + gen.visitProperty(new MockProperty("int", Integer.TYPE, false, true)); + gen.visitEnd(); + Class c = cl.addClass(gen.getClassData()); + assertEquals(1, c.getMethods().length); + Method getter = c.getMethod("getInt", new Class[0]); + assertEquals(int.class, getter.getReturnType()); + } + + public void testManyProperty() throws NoJavaImplementationException, NoSuchMethodException { + gen.visitType(foo); + gen.visitProperty(new MockProperty("list", Integer.TYPE, true, false)); + gen.visitEnd(); + Class c = cl.addClass(gen.getClassData()); + assertEquals(1, c.getMethods().length); + Method getter = c.getMethod("getList", new Class[0]); + assertEquals(List.class, getter.getReturnType()); + } + + public void testTwoProperties() throws NoJavaImplementationException, NoSuchMethodException { + gen.visitType(foo); + gen.visitProperty(new MockProperty("true", Boolean.TYPE, false, false)); + gen.visitProperty(new MockProperty("int", Integer.TYPE, false, false)); + gen.visitEnd(); + Class c = cl.addClass(gen.getClassData()); + assertEquals(4, c.getMethods().length); + Method getter = c.getMethod("isTrue", new Class[0]); + assertEquals(boolean.class, getter.getReturnType()); + Method setter = c.getMethod("setTrue", new Class[] {boolean.class}); + assertEquals(void.class, setter.getReturnType()); + getter = c.getMethod("getInt", new Class[0]); + assertEquals(int.class, getter.getReturnType()); + setter = c.getMethod("setInt", new Class[] {int.class}); + assertEquals(void.class, setter.getReturnType()); + } + + protected void setUp() throws Exception { + super.setUp(); + foo = new MockType("foo", null); + gen = new BytecodeInterfaceGenerator(); + cl = new TestClassLoader(); + } + + private class TestClassLoader extends ClassLoader { + public TestClassLoader() { + super(TestClassLoader.class.getClassLoader()); + } + + Class addClass(byte[] bytes) { + return defineClass(null, bytes, 0, bytes.length); + } + } +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/Foo.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/Foo.java new file mode 100644 index 0000000000..56bf6af9b4 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/Foo.java @@ -0,0 +1,26 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.codegen; + +/** + * @version $Rev$ $Date$ + */ +public interface Foo { +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/JavaInterfaceGeneratorTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/JavaInterfaceGeneratorTestCase.java new file mode 100644 index 0000000000..6cc0529c5f --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/JavaInterfaceGeneratorTestCase.java @@ -0,0 +1,129 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.codegen; + +import java.io.PrintWriter; +import java.io.StringWriter; + +import junit.framework.TestCase; + +/** + * @version $Rev$ $Date$ + */ +public class JavaInterfaceGeneratorTestCase extends TestCase { + private static final String SEP = System.getProperty("line.separator"); + + private JavaInterfaceGenerator gen; + private StringWriter writer; + private MockType foo; + + public void testHeaderNoBaseClass() { + gen.visitType(foo); + gen.visitEnd(); + assertEquals(localize("public interface Foo {\n}\n"), writer.toString()); + } + + public void testHeaderWithPackage() { + gen.visitType(new MockType("org.apache.Foo", null)); + gen.visitEnd(); + assertEquals(localize("package org.apache;\n\npublic interface Foo {\n}\n"), writer.toString()); + } + + public void testHeaderOneBaseClass() throws NoJavaImplementationException { + foo.addBaseType(new MockType("bar1", Bar1.class)); + gen.visitType(foo); + gen.visitEnd(); + assertEquals(localize("public interface Foo extends org.apache.tuscany.sdo.codegen.Bar1 {\n}\n"), writer.toString()); + } + + public void testHeaderMultipleBaseClass() throws NoJavaImplementationException { + foo.addBaseType(new MockType("bar1", Bar1.class)); + foo.addBaseType(new MockType("bar2", Bar2.class)); + gen.visitType(foo); + gen.visitEnd(); + assertEquals(localize("public interface Foo extends org.apache.tuscany.sdo.codegen.Bar1, org.apache.tuscany.sdo.codegen.Bar2 {\n}\n"), writer.toString()); + } + + public void testBooleanProperty() throws NoJavaImplementationException { + gen.visitType(foo); + gen.visitProperty(new MockProperty("true", Boolean.TYPE, false, false)); + gen.visitEnd(); + assertEquals(localize("public interface Foo {\n\tboolean isTrue();\n\tvoid setTrue(boolean value);\n}\n"), writer.toString()); + } + + public void testByteArrayProperty() throws NoJavaImplementationException { + gen.visitType(foo); + gen.visitProperty(new MockProperty("bytes", byte[].class, false, false)); + gen.visitEnd(); + assertEquals(localize("public interface Foo {\n\tbyte[] getBytes();\n\tvoid setBytes(byte[] value);\n}\n"), writer.toString()); + } + + public void testObjectProperty() throws NoJavaImplementationException { + gen.visitType(foo); + gen.visitProperty(new MockProperty("bar", Bar1.class, false, false)); + gen.visitEnd(); + assertEquals(localize("public interface Foo {\n\torg.apache.tuscany.sdo.codegen.Bar1 getBar();\n\tvoid setBar(org.apache.tuscany.sdo.codegen.Bar1 value);\n}\n"), writer.toString()); + } + + public void testReadOnlyProperty() throws NoJavaImplementationException { + gen.visitType(foo); + gen.visitProperty(new MockProperty("int", Integer.TYPE, false, true)); + gen.visitEnd(); + assertEquals(localize("public interface Foo {\n\tint getInt();\n}\n"), writer.toString()); + } + + public void testManyProperty() throws NoJavaImplementationException { + gen.visitType(foo); + gen.visitProperty(new MockProperty("list", Integer.TYPE, true, false)); + gen.visitEnd(); + assertEquals(localize("public interface Foo {\n\tjava.util.List getList();\n}\n"), writer.toString()); + } + + public void testTwoProperties() throws NoJavaImplementationException { + gen.visitType(foo); + gen.visitProperty(new MockProperty("true", Boolean.TYPE, false, false)); + gen.visitProperty(new MockProperty("int", Integer.TYPE, false, false)); + gen.visitEnd(); + assertEquals(localize("public interface Foo {\n\tboolean isTrue();\n\tvoid setTrue(boolean value);\n\tint getInt();\n\tvoid setInt(int value);\n}\n"), writer.toString()); + } + + protected void setUp() throws Exception { + super.setUp(); + writer = new StringWriter(); + gen = new JavaInterfaceGenerator(new PrintWriter(writer)); + foo = new MockType("foo", null); + } + + private String localize(String s) { + StringBuffer b = new StringBuffer(s.length() + s.length()/10); + for (int i = 0; i < s.length(); i++) { + char ch = s.charAt(i); + if (ch == '\t') { + b.append(" "); + } else if (ch == '\n') { + b.append(SEP); + } else { + b.append(ch); + } + } + return b.toString(); + } + +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/MockProperty.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/MockProperty.java new file mode 100644 index 0000000000..3e3e87e47b --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/MockProperty.java @@ -0,0 +1,94 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.codegen; + +import java.util.List; + +import commonj.sdo.Property; +import commonj.sdo.Type; + +/** + * @version $Rev$ $Date$ + */ +class MockProperty implements Property { + private final String name; + private final Type type; + private final boolean many; + private final boolean readOnly; + + public MockProperty(String name, Class type, boolean many, boolean readOnly) { + this.name = name; + this.type = new MockType(null, type); + this.many = many; + this.readOnly = readOnly; + } + + public String getName() { + return name; + } + + public Type getType() { + return type; + } + + public boolean isMany() { + return many; + } + + public boolean isContainment() { + throw new UnsupportedOperationException(); + } + + public Type getContainingType() { + throw new UnsupportedOperationException(); + } + + public Object getDefault() { + throw new UnsupportedOperationException(); + } + + public boolean isReadOnly() { + return readOnly; + } + + public Property getOpposite() { + throw new UnsupportedOperationException(); + } + + public List /*String*/ getAliasNames() { + throw new UnsupportedOperationException(); + } + + public boolean isNullable() { + throw new UnsupportedOperationException(); + } + + public boolean isOpenContent() { + throw new UnsupportedOperationException(); + } + + public List getInstanceProperties() { + throw new UnsupportedOperationException(); + } + + public Object get(Property property) { + throw new UnsupportedOperationException(); + } +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/MockType.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/MockType.java new file mode 100644 index 0000000000..ec848de4fa --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/codegen/MockType.java @@ -0,0 +1,104 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.codegen; + +import java.util.List; +import java.util.ArrayList; + +import commonj.sdo.Type; +import commonj.sdo.Property; + +/** + * @version $Rev$ $Date$ + */ +class MockType implements Type { + private final String name; + private final Class javaClass; + private final List baseTypes = new ArrayList(); + + public MockType(String name, Class javaClass) { + this.javaClass = javaClass; + this.name = name; + } + + public void addBaseType(Type baseType) { + baseTypes.add(baseType); + } + + public String getName() { + return name; + } + + public String getURI() { + throw new UnsupportedOperationException(); + } + + public Class getInstanceClass() { + return javaClass; + } + + public boolean isInstance(Object object) { + throw new UnsupportedOperationException(); + } + + public List /*Property*/ getProperties() { + throw new UnsupportedOperationException(); + } + + public Property getProperty(String propertyName) { + throw new UnsupportedOperationException(); + } + + public boolean isDataType() { + throw new UnsupportedOperationException(); + } + + public boolean isOpen() { + throw new UnsupportedOperationException(); + } + + public boolean isSequenced() { + throw new UnsupportedOperationException(); + } + + public boolean isAbstract() { + throw new UnsupportedOperationException(); + } + + public List /*Type*/ getBaseTypes() { + return baseTypes; + } + + public List /*Property*/ getDeclaredProperties() { + throw new UnsupportedOperationException(); + } + + public List /*String*/ getAliasNames() { + throw new UnsupportedOperationException(); + } + + public List getInstanceProperties() { + throw new UnsupportedOperationException(); + } + + public Object get(Property property) { + throw new UnsupportedOperationException(); + } +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/AllTests.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/AllTests.java new file mode 100644 index 0000000000..734c1b0469 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/AllTests.java @@ -0,0 +1,86 @@ + +/** + * + * 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. + */ + +package org.apache.tuscany.sdo.test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +public class AllTests extends TestCase { + + + public static TestSuite suite() { + + TestSuite suite = new TestSuite(); + + suite.addTestSuite(ChangeSummaryOnDataObjectTestCase.class); + suite.addTestSuite(ChangeSummaryPropertyTestCase.class); + suite.addTestSuite(ChangeSummaryTestCase.class); + suite.addTestSuite(ContainmentCycleTestCase.class); + suite.addTestSuite(CrossScopeCopyTestCase.class); + suite.addTestSuite(DataGraphTestCase.class); + suite.addTestSuite(DataTypeBaseTypeTestCase.class); + suite.addTestSuite(DateConversionTestCase.class); + suite.addTestSuite(DefineOpenContentPropertyTestCase.class); + suite.addTestSuite(DefineTypeTestCase.class); + suite.addTestSuite(FormTestCase.class); + suite.addTestSuite(HelperContextTestCase.class); + suite.addTestSuite(IsManyTestCase.class); + suite.addTestSuite(JavaSerializeDeserializeTestCase.class); + suite.addTestSuite(MixedTypeTestCase.class); + suite.addTestSuite(NeverStaleChangeSummaryTestCase.class); + suite.addTestSuite(OpenTypeTestCase.class); + suite.addTestSuite(SchemaLocationTestCase.class); + suite.addTestSuite(SerializeTypesTestCase.class); + suite.addTestSuite(SimpleCopyTestCase.class); + suite.addTestSuite(SimpleDynamicTestCase.class); + suite.addTestSuite(SimpleEqualityTestCase.class); + suite.addTestSuite(SubstitutionValuesTestCase.class); + suite.addTestSuite(TypeConversionTestCase.class); + suite.addTestSuite(TypeRoundTripTestCase.class); + suite.addTestSuite(XMLDocumentTestCase.class); + suite.addTestSuite(XMLHelperTestCase.class); + suite.addTestSuite(XMLStreamHelperTestCase.class); + suite.addTestSuite(XPathTestCase.class); + suite.addTestSuite(XSDHelperTestCase.class); + suite.addTestSuite(XSDQNameTestCase.class); + suite.addTestSuite(XMLLoadOptionsTestCase.class); + suite.addTestSuite(XMLSaveOptionsTestCase.class); + suite.addTestSuite(XMLUnknownPropertiesTestCase.class); + suite.addTestSuite(ExpectedExceptionsTestCase.class); + suite.addTestSuite(TypeHelperTestCase.class); + return suite; + } + + + + /** + * Runs the test suite using the textual runner. + */ + public static void main(String[] args) { + junit.textui.TestRunner.run(suite()); + } +} + + + + + + diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/AnyTypeTest.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/AnyTypeTest.java new file mode 100644 index 0000000000..4d085eae28 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/AnyTypeTest.java @@ -0,0 +1,112 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.io.InputStream; +import java.io.StringReader; +import java.io.StringWriter; +import java.net.URL; + +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLOutputFactory; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; + +import junit.framework.TestCase; + +import org.apache.tuscany.sdo.api.XMLStreamHelper; +import org.apache.tuscany.sdo.api.SDOUtil; + +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.XSDHelper; + +public class AnyTypeTest extends TestCase { + private static TypeHelper typeHelper; + private static DataFactory dataFactory; + private static XMLStreamHelper streamHelper; + private static XSDHelper xsdHelper; + + private static final String TEST_MODEL = "/anytype.xsd"; + private static final String TEST_NAMESPACE = "http://www.example.com/anytype"; + + public void testAnySimpleType() throws Exception { + final Property property = typeHelper.getOpenContentProperty(TEST_NAMESPACE, "globalElement"); + final Type propertyType = property.getType(); + + DataObject dataObject = dataFactory.create(TEST_NAMESPACE, "Person"); + dataObject.set("firstName", "Fuhwei"); + + DataObject rootObject = dataFactory.create(propertyType); + rootObject.set("anyTypeElement", dataObject); + + dataObject = dataFactory.create(TEST_NAMESPACE, "Person"); + dataObject.set("firstName", "Mindy"); + rootObject.set("personElement", dataObject); + + // XMLStreamHelper.saveObject has a problem to serialize the any type + final XMLOutputFactory outputFactory = XMLOutputFactory.newInstance(); + final StringWriter writer = new StringWriter(); + final XMLStreamWriter streamWriter = outputFactory.createXMLStreamWriter(writer); + streamHelper.saveObject(rootObject, streamWriter); + streamWriter.flush(); + // System.out.println(writer.toString()); + + final XMLInputFactory inputFactory = XMLInputFactory.newInstance(); + final StringReader reader = new StringReader(writer.toString()); + final XMLStreamReader streamReader = inputFactory.createXMLStreamReader(reader); + final XMLDocument doc = streamHelper.load(streamReader); + rootObject = doc.getRootObject(); + DataObject testObject = rootObject.getDataObject("anyTypeElement"); + // System.out.println("anyTypeElement dataobject: " + testObject); + testObject = rootObject.getDataObject("personElement"); + // System.out.println("personElement dataobject: " + testObject); + } + + public void testAbstractTypeFails() { + try { + final DataObject abstractObj = dataFactory.create("commonj.sdo","DataObject"); + assertTrue("Should not succeed", false); + } + catch ( final IllegalArgumentException e) { + // expected result + } + } + + protected void setUp() throws Exception { + final HelperContext hc = SDOUtil.createHelperContext(); + typeHelper = hc.getTypeHelper(); + dataFactory = hc.getDataFactory(); + xsdHelper = hc.getXSDHelper(); + streamHelper = SDOUtil.createXMLStreamHelper(hc); + + // Populate the meta data for the test (Stock Quote) model + final URL url = getClass().getResource(TEST_MODEL); + final InputStream inputStream = url.openStream(); + xsdHelper.define(inputStream, url.toString()); + inputStream.close(); + } + +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ChangeSummaryOnDataObjectTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ChangeSummaryOnDataObjectTestCase.java new file mode 100644 index 0000000000..b9b9c0f2ea --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ChangeSummaryOnDataObjectTestCase.java @@ -0,0 +1,216 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.math.BigDecimal; +import java.net.URL; +import java.util.List; + +import junit.framework.TestCase; + +import org.apache.tuscany.sdo.api.SDOUtil; + +import commonj.sdo.ChangeSummary; +import commonj.sdo.DataGraph; +import commonj.sdo.DataObject; +import commonj.sdo.Property; +import commonj.sdo.Type; +import commonj.sdo.helper.HelperContext; +import commonj.sdo.helper.TypeHelper; +import commonj.sdo.helper.XSDHelper; + + +public class ChangeSummaryOnDataObjectTestCase extends TestCase { + + + private final String TEST_DATA = "/simplechangesummary.xml"; + HelperContext hc; + XSDHelper xh; + TypeHelper th; + + public void testBasicsDO() { + Type cst = th.getType("commonj.sdo","ChangeSummaryType"); + Type strt = th.getType("commonj.sdo", "String"); + + Type newt = SDOUtil.createType(hc, "testcases.changesummary", "simpleCS", false); + Property strProp = SDOUtil.createProperty(newt, "strElem", strt); + SDOUtil.createProperty(newt, "changeSummary", cst); + + DataObject iNewt = hc.getDataFactory().create(newt); + + testBasicsBody(strProp, iNewt); +} + + public void testBasicsDG() { + + Type strt = th.getType("commonj.sdo", "String"); + + + Type newt = SDOUtil.createType(hc, "testcases.changesummary", "simpleNOCS", false); + Property strProp = SDOUtil.createProperty(newt, "strElem", strt); + + DataGraph graph = SDOUtil.createDataGraph(); + DataObject iNewt = graph.createRootObject(newt); + + testBasicsBody(strProp, iNewt); +} + + + /** + * @param strProp + * @param iNewt + */ + private void testBasicsBody(Property strProp, DataObject iNewt) { + ChangeSummary cs = iNewt.getChangeSummary(); + cs.beginLogging(); + + List co = cs.getChangedDataObjects(); + assertEquals(0, co.size()); + iNewt.set(strProp, "some text"); + assertEquals(0, co.size()); + co = cs.getChangedDataObjects(); + assertEquals(1, co.size()); + + List oldValues = cs.getOldValues((DataObject)co.get(0)); + + ChangeSummary.Setting ov1 = (ChangeSummary.Setting)oldValues.get(0); + Property p = ov1.getProperty(); + assertEquals("strElem", p.getName()); + Object v = ov1.getValue(); + assertEquals(null, v); + + assertTrue(cs.isLogging()); + cs.endLogging(); + assertFalse(cs.isLogging()); + + } + + + + public void testDynamicNestedDataObjectsDG() throws Exception { + DataGraph dataGraph = SDOUtil.createDataGraph(); + DataObject quote = dataGraph.createRootObject(th.getType("http://www.example.com/simple", "Quote")); + + testDynamicNestedDOBody(quote); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + SDOUtil.saveDataGraph(dataGraph, baos, null); + // SDOUtil.saveDataGraph(dataGraph, System.out, null); + + assertTrue(TestUtil.equalXmlFiles(new ByteArrayInputStream(baos.toByteArray()), getClass().getResource(TEST_DATA))); + + + assertEquals(1, quote.getList("quotes").size()); + assertEquals("fbnt", quote.getString("symbol")); + dataGraph.getChangeSummary().undoChanges(); + // SDOUtil.saveDataGraph(dataGraph, System.out, null); + assertEquals(0, quote.getList("quotes").size()); + assertNull(quote.getString("symbol")); + + + } + + public void testDynamicNestedDataObjectsDO() throws Exception { + Type quoteType = th.getType("http://www.example.com/simpleCS", "RootQuote"); + DataObject quote = hc.getDataFactory().create(quoteType); + + testDynamicNestedDOBody(quote); + //hc.getXMLHelper().save(quote, "http://www.example.com/simpleCS", "stockQuote", System.out); + assertEquals(1, quote.getList("quotes").size()); + assertEquals("fbnt", quote.getString("symbol")); + + quote.getChangeSummary().undoChanges(); + + assertEquals(0, quote.getList("quotes").size()); + assertNull(quote.getString("symbol")); + + + + } + + /** + * @param quote + */ + private void testDynamicNestedDOBody(DataObject quote) { + // Begin logging changes + // + ChangeSummary changeSummary = quote.getChangeSummary(); + assertNotNull(changeSummary); + assertFalse(changeSummary.isLogging()); + changeSummary.beginLogging(); + + + // Modify the data graph in various fun and interesting ways + // + quote.setString("symbol", "fbnt"); + quote.setString("companyName", "FlyByNightTechnology"); + quote.setBigDecimal("price", new BigDecimal("1000.0")); + quote.setBigDecimal("open1", new BigDecimal("1000.0")); + quote.setBigDecimal("high", new BigDecimal("1000.0")); + quote.setBigDecimal("low", new BigDecimal("1000.0")); + quote.setDouble("volume", 1000); + quote.setDouble("change1", 1000); + + DataObject child = quote.createDataObject("quotes"); + child.setBigDecimal("price", new BigDecimal("2000.0")); + + changeSummary.endLogging(); + assertEquals(2, changeSummary.getChangedDataObjects().size()); // 2 DataObjects + assertTrue(changeSummary.getChangedDataObjects().contains(quote)); + assertTrue(changeSummary.getChangedDataObjects().contains(child)); + assertFalse(changeSummary.isCreated(quote)); + assertTrue(changeSummary.isCreated(child)); + + ChangeSummary.Setting ov = changeSummary.getOldValue(quote, quote.getType().getProperty("symbol")); + assertNull(ov.getValue()); + + + } + + protected void setUp() throws Exception { + super.setUp(); + +// uncomment these lines for sending aspect trace to a file +// tracing.lib.TraceMyClasses tmc = (TraceMyClasses)Aspects.aspectOf(TraceMyClasses.class); +// tmc.initStream(new PrintStream("c:\\temp\\trace.log")); + + // Populate the meta data for the test (Stock Quote) model + URL url = getClass().getResource("/simple.xsd"); + InputStream inputStream = url.openStream(); + hc = SDOUtil.createHelperContext(); + th = hc.getTypeHelper(); + xh = hc.getXSDHelper(); + xh.define(inputStream, url.toString()); + inputStream.close(); + + URL url2 = getClass().getResource("/simpleWithChangeSummary.xsd"); + InputStream inputStream2 = url2.openStream(); + xh.define(inputStream2, url2.toString()); + inputStream.close(); + + + +} + +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ChangeSummaryPropertyTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ChangeSummaryPropertyTestCase.java new file mode 100644 index 0000000000..4a62ec6135 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ChangeSummaryPropertyTestCase.java @@ -0,0 +1,219 @@ +/**
+ *
+ * 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.
+ */
+package org.apache.tuscany.sdo.test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.net.URL;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.ChangeSummary;
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+import commonj.sdo.Sequence;
+import commonj.sdo.Type;
+import commonj.sdo.helper.DataFactory;
+import commonj.sdo.helper.HelperContext;
+import commonj.sdo.helper.XMLHelper;
+import commonj.sdo.helper.XSDHelper;
+
+public class ChangeSummaryPropertyTestCase extends TestCase {
+ private final String TEST_MODEL = "/simpleWithChangeSummary.xsd";
+ private final String TEST_NAMESPACE = "http://www.example.com/simpleCS";
+
+ private final String TEST_DATA_BEFORE_UNDO = "/simpleWithChangeSummary.xml";
+ private final String TEST_DATA_AFTER_UNDO = "/simpleWithChangeSummaryUndone.xml";
+
+ HelperContext hc;
+ DataFactory dataFactory;
+ XMLHelper xmlHelper;
+
+ void verify(ChangeSummary cs, DataObject quote, String nameSpace, String element, String beforeUndo, String afterUndo) throws IOException {
+ // Stop logging changes and serialize the resulting data graph
+ //
+ cs.endLogging();
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ xmlHelper.save(quote, nameSpace, element, baos);
+ //xmlHelper.save(quote, nameSpace, element, System.out);
+
+ byte[] bytes = baos.toByteArray();
+ URL url = getClass().getResource(beforeUndo);
+ assertTrue(TestUtil.equalXmlFiles(new ByteArrayInputStream(bytes), url));
+
+ DataObject loaded = xmlHelper.load(new ByteArrayInputStream(bytes)).getRootObject();
+ baos.reset();
+ xmlHelper.save(loaded, nameSpace, element, baos);
+ //xmlHelper.save(loaded, nameSpace, element, System.out);
+ assertTrue(TestUtil.equalXmlFiles(new ByteArrayInputStream(baos.toByteArray()), url));
+
+ // Undo all changes and then serialize the resulting data graph again
+ //
+ cs.undoChanges();
+
+ baos.reset();
+ xmlHelper.save(quote, nameSpace, element, baos);
+ //xmlHelper.save(quote, nameSpace, element, System.out);
+
+ assertTrue(TestUtil.equalXmlFiles(new ByteArrayInputStream(baos.toByteArray()), getClass().getResource(afterUndo)));
+ }
+
+ /**
+ * ChangeSummary property test.
+ */
+ protected final void change(String nameSpace, String beforeUndo, String afterUndo) throws Exception {
+ Type quoteType = hc.getTypeHelper().getType(nameSpace, "RootQuote");
+ DataObject quote = dataFactory.create(quoteType);
+
+ ChangeSummary cs = quote.getChangeSummary();
+ ChangeSummary csp = (ChangeSummary)quote.get("changes");
+
+ assertSame(cs, csp);
+
+ quote.setString("symbol", "fbnt");
+ quote.setString("companyName", "FlyByNightTechnology");
+ quote.setBigDecimal("price", new BigDecimal("1000.0"));
+ DataObject child = quote.createDataObject("quotes");
+ child.setBigDecimal("price", new BigDecimal("1500.0"));
+ child = quote.createDataObject("quotes");
+ child.setBigDecimal("price", new BigDecimal("2000.0"));
+ child = child.createDataObject("quotes");
+ child.setBigDecimal("price", new BigDecimal("2000.99"));
+ child = quote.createDataObject("quotes");
+ child.setBigDecimal("price", new BigDecimal("2500.0"));
+
+ // Begin logging changes
+ //
+ cs.beginLogging();
+
+ // Modify the data graph in various ways
+ //
+ quote.setString("symbol", "FBNT");
+ quote.setBigDecimal("price", new BigDecimal("999.0"));
+ quote.setDouble("volume", 1000);
+
+ child = quote.createDataObject("quotes");
+ child.setBigDecimal("price", new BigDecimal("3000.0"));
+ child = quote.createDataObject("quotes");
+ child.setBigDecimal("price", new BigDecimal("4000.0"));
+
+ quote.getDataObject("quotes[2]").delete();
+
+ verify(cs, quote, nameSpace, "stockQuote", beforeUndo, afterUndo);
+ }
+
+ /**
+ * Simple ChangeSummary property test.
+ */
+ public void testChangeSummary() throws Exception {
+ change(TEST_NAMESPACE, TEST_DATA_BEFORE_UNDO, TEST_DATA_AFTER_UNDO);
+ }
+
+ static final String SequenceTest_NameSpace = "http://www.example.com/sequenceCS";
+
+ /**
+ * Mixed ChangeSummary property test.
+ */
+ public void testMixedChangeSummary() throws Exception {
+ change(SequenceTest_NameSpace, "/mixedChangeSummary.xml", "/mixedChangeSummaryUndone.xml");
+ }
+
+ protected final DataObject createDataObject(Type quoteType, Object value, Sequence sequence, Property property) {
+ DataObject child = dataFactory.create(quoteType);
+ child.set("symbol", value);
+ sequence.add(property, child);
+ return child;
+ }
+
+ static final String SequenceTest_ELEMENT = "openQuote";
+
+ private XSDHelper xsdHelper;
+
+ /**
+ * Open/any ChangeSummary property test.
+ */
+ public void testOpenChangeSummary() throws Exception {
+ DataObject quote = dataFactory.create(xsdHelper.getGlobalProperty(SequenceTest_NameSpace, SequenceTest_ELEMENT, true).getType());
+
+ ChangeSummary cs = quote.getChangeSummary();
+ ChangeSummary csp = (ChangeSummary)quote.get("changes");
+
+ assertSame(cs, csp);
+
+ quote.set("symbol", "fbnt");
+ Property property = xsdHelper.getGlobalProperty("http://www.example.com/open", "openStockQuote", true);
+ Type quoteType = property.getType();
+ List openStockQuotes = ((DataObject)quote).getList(property);
+
+ addQuote(openStockQuotes, quoteType, "1500.0");
+ DataObject osq2 = addQuote(openStockQuotes, quoteType, "2000.0");
+ addQuote(osq2.getList(property), quoteType, "2000.99");
+ addQuote(openStockQuotes, quoteType, "2500.0");
+
+ // Begin logging changes
+ //
+ cs.beginLogging();
+
+ // Modify the data graph in various ways
+ //
+ quote.set("symbol", "FBNT");
+
+ addQuote(openStockQuotes, quoteType, "3000.0");
+ addQuote(openStockQuotes, quoteType, "4000.0");
+
+ openStockQuotes.remove(osq2);
+
+
+ verify(cs, quote, SequenceTest_NameSpace, SequenceTest_ELEMENT, "/openChangeSummary.xml", "/openChangeSummaryUndone.xml");
+ }
+
+ private DataObject addQuote(List openStockQuotes, Type quoteType,
+ Object value) {
+ DataObject osq = dataFactory.create(quoteType);
+ osq.set("symbol", value);
+ openStockQuotes.add(osq);
+ return osq;
+ }
+
+ void define(String model) throws Exception {
+ // Populate the meta data for the test model
+ URL url = getClass().getResource(model);
+ xsdHelper.define(url.openStream(), url.toString());
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ hc = SDOUtil.createHelperContext();
+ xsdHelper = hc.getXSDHelper();
+ dataFactory = hc.getDataFactory();
+ xmlHelper = hc.getXMLHelper();
+
+ // Populate the meta data for the test (Stock Quote) model
+ define(TEST_MODEL);
+
+ define("/SequenceChangeSummary.xsd");
+ }
+}
diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ChangeSummaryTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ChangeSummaryTestCase.java new file mode 100644 index 0000000000..e956720117 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ChangeSummaryTestCase.java @@ -0,0 +1,92 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.net.URL; + +import junit.framework.TestCase; + +import org.apache.tuscany.sdo.util.SDOUtil; + +import commonj.sdo.ChangeSummary; +import commonj.sdo.DataGraph; +import commonj.sdo.DataObject; +import commonj.sdo.helper.XSDHelper; + + +public class ChangeSummaryTestCase extends TestCase { + private final String TEST_MODEL = "/simple.xsd"; + private final String TEST_DATA = "/simplechangesummary.xml"; + + /** + * Simple ChangeSummary test. + */ + public void testChangeSummary() throws IOException { + // Create an empty data graph and add a root object, an instance of type Quote + // + + DataGraph dataGraph = SDOUtil.createDataGraph(); + DataObject quote = dataGraph.createRootObject("http://www.example.com/simple", "Quote"); + + // Begin logging changes + // + ChangeSummary changeSummary = dataGraph.getChangeSummary(); + changeSummary.beginLogging(); + + // Modify the data graph in various fun and interesting ways + // + quote.setString("symbol", "fbnt"); + quote.setString("companyName", "FlyByNightTechnology"); + quote.setBigDecimal("price", new BigDecimal("1000.0")); + quote.setBigDecimal("open1", new BigDecimal("1000.0")); + quote.setBigDecimal("high", new BigDecimal("1000.0")); + quote.setBigDecimal("low", new BigDecimal("1000.0")); + quote.setDouble("volume", 1000); + quote.setDouble("change1", 1000); + + DataObject child = quote.createDataObject("quotes"); + child.setBigDecimal("price", new BigDecimal("2000.0")); + + // Stop logging changes and print the resulting data graph to stdout + // + changeSummary.endLogging(); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + SDOUtil.saveDataGraph(dataGraph, baos, null); + + assertTrue(TestUtil.equalXmlFiles(new ByteArrayInputStream(baos.toByteArray()), getClass().getResource(TEST_DATA))); + } + + protected void setUp() throws Exception { + super.setUp(); + + // Populate the meta data for the test (Stock Quote) model + URL url = getClass().getResource(TEST_MODEL); + InputStream inputStream = url.openStream(); + XSDHelper.INSTANCE.define(inputStream, url.toString()); + inputStream.close(); + } +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ContainmentCycleTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ContainmentCycleTestCase.java new file mode 100644 index 0000000000..843ab9b982 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ContainmentCycleTestCase.java @@ -0,0 +1,866 @@ +/** + * + * Copyright 2005 The Apache Software Foundation or its licensors, as applicable. + * + * Licensed 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. + */ +package org.apache.tuscany.sdo.test; + +import junit.framework.TestCase; +import commonj.sdo.DataObject; +import commonj.sdo.Sequence; +import commonj.sdo.Type; +import commonj.sdo.helper.HelperContext; + +import org.apache.tuscany.sdo.api.XMLStreamHelper; +import org.apache.tuscany.sdo.api.SDOUtil; + +import javax.xml.stream.XMLOutputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamWriter; + +import com.example.test.Containment.ContainmentFactory; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.util.ArrayList; +import java.util.List; + +/** + * Tests serialization of containment cycles. For JavaSerialization, the test case + * passes if an IllegalStateException is thrown. For XMLHelper and XMLStreamHelper + * serialization, serization should complete without throwing an Exception. In all + * cases, the actual structure of the DataObject should not be changed by the + * method call to serialize the DO. + * + * The same test is run for a static model (Type created using XSD2JavaGenerator), a + * dynamic model (Type created using TypeHelper), and a 'mixed' model (Type created + * using XSDHelper - dynamic Type creation using static resources). + */ +public class ContainmentCycleTestCase extends TestCase { + + private static final String CONTAIN_URI = "http://www.example.com/ContainmentTest"; + private static final String CONTAIN_TYPE = "ContainmentTest"; + private static HelperContext staticScope; + private static HelperContext dynamicScope; + private static HelperContext mixedScope; + private static boolean initialized = false; + private static boolean mixedCreated = false; + + /** + * Attempt to create a 1-Member Containment Cycle using set____ on a single valued property + * and verify the behavior of serialization. This is the static version of this test case. + */ + // Note: Static test cases are prevented due to a JVM Error in ObjectOutputStream. + // The IllegalStateException thrown by Java serialization is caught, which in turn allows + // the StackOverflowException to occur. The catcher is catching RuntimeException, so it does + // not matter which Exception is thrown by the SDO code. + public void atestStaticOneMemberSingleValueSetDataObject() { + final DataObject dataObj1 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + + dataObj1.setString("Name", "dataObj1"); + + setSingleValueOneMember(dataObj1); + attemptSerialization(dataObj1, staticScope); + } + + /** + * Attempt to create an n-Member Containment Cycle using set____ on a single valued property + * and verify the behavior of serialization. This is the static version of this test case. + */ + public void atestStaticNMemberSingleValueSetDataObject() { + final DataObject dataObj1 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + final DataObject dataObj2 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + final DataObject dataObj3 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + setSingleValueNMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, staticScope); + } + + + /** + * Attempt to create a 1-Member Containment Cycle using set____ on a multi valued property + * and verify the behavior of serialization. This is the static version of this test case. + */ + public void atestStaticOneMemberMultiValueSetDataObject() { + final DataObject dataObj1 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + final DataObject dataObj2 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + final DataObject dataObj3 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + setMultiValueOneMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, staticScope); + } + + /** + * Attempt to create an n-Member Containment Cycle using set____ on a multi valued property + * and verify the behavior of serialization. This is the static version of this test case. + */ + public void atestStaticNMemberMultiValueSetDataObject() { + final DataObject dataObj1 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + final DataObject dataObj2 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + final DataObject dataObj3 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + setManyValueNMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, staticScope); + } + + /** + * Attempt to create a 1-Member Containment Cycle by making updates to a List returned + * from the DataObject and verify the behavior of serialization. This is the static version + * of this test case. + */ + public void atestStaticOneMemberReturnedList() { + final DataObject dataObj1 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + + dataObj1.setString("Name", "dataObj1"); + + returnedListOneMember(dataObj1); + attemptSerialization(dataObj1, staticScope); + } + + /** + * Attempt to create an n-Member Containment Cycle by making updates to a List returned + * from the DataObject and verify the behavior of serialization. This is the static version + * of this test case. + */ + public void atestStaticNMemberReturnedList() { + final DataObject dataObj1 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + final DataObject dataObj2 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + final DataObject dataObj3 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + returnedListNMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, staticScope); + } + + /** + * Attempt to create a 1-Member Containment Cycle using by using a Sequence to make updates + * to the DataObject, affecting a single valued property, and verify the behavior of + * serialization. This is the static version of this test case. + */ + public void atestStaticOneMemberSingleValueSequence() { + final DataObject dataObj1 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + + dataObj1.setString("Name", "dataObj1"); + + sequenceSingleValueOneMember(dataObj1); + attemptSerialization(dataObj1, staticScope); + } + + /** + * Attempt to create an n-Member Containment Cycle using by using a Sequence to make updates + * to the DataObject, affecting a single valued property, and verify the behavior of + * serialization. This is the static version of this test case. + */ + public void atestStaticNMemberSingleValueSequence() { + final DataObject dataObj1 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + final DataObject dataObj2 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + final DataObject dataObj3 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + sequenceSingleValueNMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, staticScope); + } + + /** + * Attempt to create a 1-Member Containment Cycle using by using a Sequence to make updates + * to the DataObject, affecting a multi valued property, and verify the behavior of + * serialization. This is the static version of this test case. + */ + public void atestStaticOneMemberMultiValueSequence() { + final DataObject dataObj1 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + final DataObject dataObj2 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + final DataObject dataObj3 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + sequenceMultiValueOneMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, staticScope); + } + + /** + * Attempt to create an n-Member Containment Cycle using by using a Sequence to make updates + * to the DataObject, affecting a multi valued property, and verify the behavior of + * serialization. This is the static version of this test case. + */ + public void atestStaticNMemberMultiValueSequence() { + final DataObject dataObj1 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + final DataObject dataObj2 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + final DataObject dataObj3 = (DataObject) ContainmentFactory.INSTANCE.createContainmentTest(); + + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + sequenceManyValueNMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, staticScope); + } + + /** + * Attempt to create a 1-Member Containment Cycle using set____ on a single valued property + * and verify the behavior of serialization. This is the hybrid version of this test case. + */ + public void testHybridOneMemberSingleValueSetDataObject() { + assertTrue("Test case cannot proceed due to error creating Type.", mixedCreated); + + final DataObject dataObj1 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + + setSingleValueOneMember(dataObj1); + attemptSerialization(dataObj1, mixedScope); + } + + /** + * Attempt to create an n-Member Containment Cycle using set____ on a single valued property + * and verify the behavior of serialization. This is the hybrid version of this test case. + */ + public void testHybridNMemberSingleValueSetDataObject() { + assertTrue("Test case cannot proceed due to error creating Type.", mixedCreated); + + final DataObject dataObj1 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + final DataObject dataObj2 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + final DataObject dataObj3 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + setSingleValueNMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, mixedScope); + } + + /** + * Attempt to create a 1-Member Containment Cycle using set____ on a multi valued property + * and verify the behavior of serialization. This is the hybrid version of this test case. + */ + public void testHybridOneMemberMultiValueSetDataObject() { + assertTrue("Test case cannot proceed due to error creating Type.", mixedCreated); + + final DataObject dataObj1 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + final DataObject dataObj2 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + final DataObject dataObj3 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + setMultiValueOneMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, mixedScope); + } + + /** + * Attempt to create an n-Member Containment Cycle using set____ on a multi valued property + * and verify the behavior of serialization. This is the hybrid version of this test case. + */ + public void testHybridNMemberMultiValueSetDataObject() { + assertTrue("Test case cannot proceed due to error creating Type.", mixedCreated); + + final DataObject dataObj1 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + final DataObject dataObj2 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + final DataObject dataObj3 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + setManyValueNMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, mixedScope); + } + + /** + * Attempt to create a 1-Member Containment Cycle by making updates to a List returned + * from the DataObject and verify the behavior of serialization. This is the hybrid version + * of this test case. + */ + public void testHybridOneMemberReturnedList() { + assertTrue("Test case cannot proceed due to error creating Type.", mixedCreated); + + final DataObject dataObj1 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + + returnedListOneMember(dataObj1); + attemptSerialization(dataObj1, mixedScope); + } + + /** + * Attempt to create an n-Member Containment Cycle by making updates to a List returned + * from the DataObject and verify the behavior of serialization. This is the hybrid version + * of this test case. + */ + public void testHybridNMemberReturnedList() { + assertTrue("Test case cannot proceed due to error creating Type.", mixedCreated); + + final DataObject dataObj1 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + final DataObject dataObj2 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + final DataObject dataObj3 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + returnedListNMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, mixedScope); + } + + /** + * Attempt to create a 1-Member Containment Cycle using by using a Sequence to make updates + * to the DataObject, affecting a single valued property, and verify the behavior of + * serialization. This is the hybrid version of this test case. + */ + public void testHybridOneMemberSingleValueSequence() { + assertTrue("Test case cannot proceed due to error creating Type.", mixedCreated); + + final DataObject dataObj1 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + + sequenceSingleValueOneMember(dataObj1); + attemptSerialization(dataObj1, mixedScope); + } + + /** + * Attempt to create an n-Member Containment Cycle using by using a Sequence to make updates + * to the DataObject, affecting a single valued property, and verify the behavior of + * serialization. This is the hybrid version of this test case. + */ + public void testHybridNMemberSingleValueSequence() { + assertTrue("Test case cannot proceed due to error creating Type.", mixedCreated); + + final DataObject dataObj1 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + final DataObject dataObj2 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + final DataObject dataObj3 = mixedScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + sequenceSingleValueNMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, mixedScope); + } + + /** + * Attempt to create a 1-Member Containment Cycle using by using a Sequence to make updates + * to the DataObject, affecting a multi valued property, and verify the behavior of serialization. + * This is the hybrid version of this test case. + */ + public void testHybridOneMemberMultiValueSequence() { + assertTrue("Test case cannot proceed due to error creating Type.", mixedCreated); + + final DataObject dataObj1 = mixedScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj2 = mixedScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj3 = mixedScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + sequenceMultiValueOneMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, mixedScope); + } + + /** + * Attempt to create an n-Member Containment Cycle using by using a Sequence to make updates + * to the DataObject, affecting a multi valued property, and verify the behavior of serialization. + * This is the hybrid version of this test case. + */ + public void testHybridNMemberMultiValueSequence() { + assertTrue("Test case cannot proceed due to error creating Type.", mixedCreated); + + final DataObject dataObj1 = mixedScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj2 = mixedScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj3 = mixedScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + sequenceManyValueNMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, mixedScope); + } + + /** + * Attempt to create a 1-Member Containment Cycle using set____ on a single valued property + * and verify the behavior of serialization. This is the dynamic version of this test case. + */ + public void testDynamicOneMemberSingleValueSetDataObject() { + final DataObject dataObj1 = dynamicScope.getDataFactory().create(CONTAIN_URI, + CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + + setSingleValueOneMember(dataObj1); + attemptSerialization(dataObj1, dynamicScope); + } + + /** + * Attempt to create an n-Member Containment Cycle using set____ on a single valued property + * and verify the behavior of serialization. This is the dynamic version of this test case. + */ + public void testDynamicNMemberSingleValueSetDataObject() { + final DataObject dataObj1 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj2 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj3 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + setSingleValueNMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, dynamicScope); + } + + /** + * Attempt to create a 1-Member Containment Cycle using set____ on a multi valued property + * and verify the behavior of serialization. This is the dynamic version of this test case. + */ + public void testDynamicOneMemberMultiValueSetDataObject() { + final DataObject dataObj1 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj2 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj3 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + setMultiValueOneMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, dynamicScope); + } + + /** + * Attempt to create an n-Member Containment Cycle using set____ on a multi valued property + * and verify the behavior of serialization. This is the dynamic version of this test case. + */ + public void testDynamicNMemberMultiValueSetDataObject() { + final DataObject dataObj1 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj2 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj3 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + setManyValueNMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, dynamicScope); + } + + /** + * Attempt to create a 1-Member Containment Cycle by making updates to a List returned + * from the DataObject and verify the behavior of serialization. This is the dynamic version + * of this test case. + */ + public void testDynamicOneMemberReturnedList() { + final DataObject dataObj1 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + + returnedListOneMember(dataObj1); + attemptSerialization(dataObj1, dynamicScope); + } + + /** + * Attempt to create an n-Member Containment Cycle by making updates to a List returned + * from the DataObject and verify the behavior of serialization. This is the dynamic version + * of this test case. + */ + public void testDynamicNMemberReturnedList() { + final DataObject dataObj1 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj2 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj3 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + returnedListNMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, dynamicScope); + } + + /** + * Attempt to create a 1-Member Containment Cycle using by using a Sequence to make updates + * to the DataObject, affecting a single valued property, and verify the behavior of + * serialization. This is the dynamic version of this test case. + */ + public void testDynamicOneMemberSingleValueSequence() { + final DataObject dataObj1 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + + sequenceSingleValueOneMember(dataObj1); + attemptSerialization(dataObj1, dynamicScope); + } + + /** + * Attempt to create an n-Member Containment Cycle using by using a Sequence to make updates + * to the DataObject, affecting a single valued property, and verify the behavior of + * serialization. This is the dynamic version of this test case. + */ + public void testDynamicNMemberSingleValueSequence() { + final DataObject dataObj1 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj2 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj3 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + sequenceSingleValueNMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, dynamicScope); + } + + /** + * Attempt to create a 1-Member Containment Cycle using by using a Sequence to make updates + * to the DataObject, affecting a multi valued property, and verify the behavior of + * serialization. This is the dynamic version of this test case. + */ + public void testDynamicOneMemberMultiValueSequence() { + final DataObject dataObj1 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj2 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj3 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + sequenceMultiValueOneMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, dynamicScope); + } + + /** + * Attempt to create an n-Member Containment Cycle using by using a Sequence to make updates + * to the DataObject, affecting a multi valued property, and verify the behavior of + * serialization. This is the dynamic version of this test case. + */ + public void testDynamicNMemberMultiValueSequence() { + final DataObject dataObj1 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj2 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + final DataObject dataObj3 = dynamicScope.getDataFactory().create(CONTAIN_URI, CONTAIN_TYPE); + dataObj1.setString("Name", "dataObj1"); + dataObj2.setString("Name", "dataObj2"); + dataObj3.setString("Name", "dataObj3"); + + sequenceManyValueNMember(dataObj1, dataObj2, dataObj3); + attemptSerialization(dataObj1, dynamicScope); + } + + /** + * Attempt to serialize the DataObject in via XML, XMLStreamHelper, + * and Java serialization. + * @param dataObj + */ + private void attemptSerialization(final DataObject dataObj, final HelperContext scope) { + + assertTrue("Containment cycle was not established.", + containmentCycleExists(dataObj)); + + try { + serializeDataObjectXML(dataObj, scope); + } catch (final Exception e) { + fail("XML serialization of a containment cycle resulted in a(n) " + e.getClass().getName() + "."); + e.printStackTrace(); + } + + assertTrue("Containment cycle was affected by XMLHelper serialization.", + containmentCycleExists(dataObj)); + + try { + serializeDataObjectJava(dataObj); + fail("Java serialization of a containment cycle should result in an IllegalStateException."); + } catch (final Exception e) { + // Do nothing. An Exception is expected in this case. + } + + assertTrue("Containment cycle was affected by Java serialization.", + containmentCycleExists(dataObj)); + + try { + serializeDataObjectStream(dataObj, scope); + } catch (final Exception e) { + fail("XMLStreamHelper serialization of a containment cycle resulted in a(n) " + e.getClass().getName() + "."); + e.printStackTrace(); + } + assertTrue("Containment cycle was affected by XMLStreamHelper serialization.", + containmentCycleExists(dataObj)); + } + /** + * Uses the XMLHelper to serialize the input DataObject + * + * @param dataObject + * @param fileName + * @throws IOException + */ + private static void serializeDataObjectXML(final DataObject dataObject, final HelperContext scope) { + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + final Type type = dataObject.getType(); + + try { + scope.getXMLHelper().save(dataObject, type.getURI(), type.getName(), baos); + } + catch (final IOException e) { + fail("Could not complete test case due to IOException."); + } + } + + /** + * Uses Java serialization to serialize the input DataObject + * + * @param dataObject + * @param fileName + * @throws IOException + */ + private static void serializeDataObjectStream(final DataObject dataObject, final HelperContext scope) { + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + final XMLOutputFactory factory = XMLOutputFactory.newInstance(); + XMLStreamWriter serializer; + final XMLStreamHelper xmlStreamHelper = SDOUtil.createXMLStreamHelper(scope); + try { + serializer = factory.createXMLStreamWriter(baos); + xmlStreamHelper.saveObject(dataObject, serializer); + serializer.flush(); + } + catch (final XMLStreamException e) { + fail("Exception encountered during XMLStreamHelper serialization."); + e.printStackTrace(); + } + } + + /** + * Uses Java serialization to serialize the input DataObject + * + * @param dataObject + * @param fileName + * @throws IOException + */ + private static void serializeDataObjectJava(final DataObject dataObject) { + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + try { + final ObjectOutputStream out = new ObjectOutputStream(baos); + out.writeObject(dataObject); + out.close(); + } + catch (final IOException e) { + fail("Could not complete test case due to IOException."); + } + } + + /** + * Returns true if input DataObject root is part of a containment cycle, + * false otherwise. + * @param root + * @return + */ + private static boolean containmentCycleExists (final DataObject root) + { + DataObject curr = root.getContainer(); + + while (curr != null) + { + if (curr == root) { + return true; + } + + curr = curr.getContainer(); + } + return false; + } + + /** + * Use setDataObject to create a one member containment cycle. + * @param dataObj1 + */ + private void setSingleValueOneMember(final DataObject dataObj1) { + dataObj1.setDataObject("Contain", dataObj1); + } + + /** + * Use setDataObject to create an N-member containment cycle. + * @param dataObj1 + * @param dataObj2 + * @param dataobj3 + */ + private void setSingleValueNMember(final DataObject dataObj1, final DataObject dataObj2, final DataObject dataObj3) { + dataObj1.setDataObject("Contain", dataObj2); + dataObj2.setDataObject("Contain", dataObj3); + dataObj3.setDataObject("Contain", dataObj1); + } + + /** + * Use setList to create a one member containment cycle. + * @param dataObj1 + * @param dataObj2 + * @param dataObj3 + */ + private void setMultiValueOneMember(final DataObject dataObj1, final DataObject dataObj2, final DataObject dataObj3) { + final List addList = new ArrayList(); + + addList.add(dataObj2); + addList.add(dataObj1); + addList.add(dataObj3); + dataObj1.setList("ContainMany", addList); + } + + /** + * Use setList to create an N-member containment cycle. + * @param dataObj1 + * @param dataObj2 + * @param dataObj3 + */ + private void setManyValueNMember(final DataObject dataObj1, final DataObject dataObj2, final DataObject dataObj3) { + final List addList = new ArrayList(); + + dataObj1.setDataObject("Contain", dataObj2); + dataObj2.setDataObject("Contain", dataObj3); + addList.add(dataObj1); + dataObj3.setList("ContainMany", addList); + } + + /** + * Create a 1-member containment cycle by making updates to a returned List. + * @param dataObj1 + */ + private void returnedListOneMember(final DataObject dataObj1) { + final List returnedList = dataObj1.getList("ContainMany"); + + returnedList.add(dataObj1); + } + + /** + * Create an n-member containment cycle by making updates to a returned List. + * @param dataObj1 + * @param dataObj2 + * @param dataobj3 + */ + private void returnedListNMember(final DataObject dataObj1, final DataObject dataObj2, final DataObject dataObj3) { + dataObj1.setDataObject("Contain", dataObj2); + dataObj2.setDataObject("Contain", dataObj3); + + final List returnedList = dataObj3.getList("ContainMany"); + + returnedList.add(dataObj1); + } + + /** + * Create a 1-member containment cycle by making updates to a Sequence. + * The data member in this case is single valued. + * @param dataObj1 + * @param dataObj2 + * @param dataObj3 + */ + private void sequenceSingleValueOneMember(final DataObject dataObj1) { + assertTrue("DataObject is not Sequenced. Test case may not proceed.", dataObj1.getType().isSequenced()); + + final Sequence sequence = dataObj1.getSequence(); + + sequence.add("Contain", dataObj1); + } + + /** + * Create an n-member containment cycle by making updates to a Sequence. + * The data member in this case is single valued. + * @param dataObj1 + * @param dataObj2 + * @param dataObj3 + */ + private void sequenceSingleValueNMember(final DataObject dataObj1, final DataObject dataObj2, final DataObject dataObj3) { + assertTrue("DataObject is not Sequenced. Test case may not proceed.", dataObj1.getType().isSequenced()); + + final Sequence sequence1 = dataObj1.getSequence(); + final Sequence sequence2 = dataObj2.getSequence(); + final Sequence sequence3 = dataObj3.getSequence(); + + sequence1.add("Contain", (Object) dataObj2); + sequence2.add("Contain", (Object) dataObj3); + + sequence3.add("Contain", (Object) dataObj1); + } + + /** + * Create a 1-member containment cycle by making updates to a Sequence. + * The data member in this case is many valued. + * @param dataObj1 + * @param dataObj2 + * @param dataObj3 + */ + private void sequenceMultiValueOneMember(final DataObject dataObj1, final DataObject dataObj2, final DataObject dataObj3) { + assertTrue("DataObject is not Sequenced. Test case may not proceed.", dataObj1.getType().isSequenced()); + + final Sequence sequence = dataObj1.getSequence(); + + sequence.add("ContainMany", dataObj2); + sequence.add("ContainMany", dataObj3); + sequence.add("ContainMany", dataObj1); + } + + /** + * Create an n-member containment cycle by making updates to a Sequence. + * The data member in this case is many valued. + * @param dataObj1 + * @param dataObj2 + * @param dataObj3 + */ + private void sequenceManyValueNMember(final DataObject dataObj1, final DataObject dataObj2, final DataObject dataObj3) { + assertTrue("DataObject is not Sequenced. Test case may not proceed.", dataObj1.getType().isSequenced()); + + final List addList = new ArrayList(); + + addList.add(dataObj2); + dataObj1.setList("ContainMany", addList); + + addList.clear(); + addList.add(dataObj3); + dataObj2.setList("ContainMany", addList); + + final Sequence sequence = dataObj3.getSequence(); + + sequence.add("ContainMany", dataObj1); + } + + public void setUp() { + if (!initialized) { + staticScope = SDOUtil.createHelperContext(); + ContainmentFactory.INSTANCE.register(staticScope); + + dynamicScope = SDOUtil.createHelperContext(); + ContainmentTypeUtil.createDynamically(dynamicScope); + + mixedScope = SDOUtil.createHelperContext(); + mixedCreated = ContainmentTypeUtil.createDynamicWithStaticResources(mixedScope); + + initialized = true; + } + } +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ContainmentTypeUtil.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ContainmentTypeUtil.java new file mode 100644 index 0000000000..f602555fa6 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ContainmentTypeUtil.java @@ -0,0 +1,86 @@ +/** + * + * Copyright 2005 The Apache Software Foundation or its licensors, as applicable. + * + * Licensed 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. + */ +package org.apache.tuscany.sdo.test; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +import commonj.sdo.DataObject; +import commonj.sdo.Type; +import commonj.sdo.helper.HelperContext; +import commonj.sdo.helper.TypeHelper; + +/** + * Provides methods to dynamically create the ContainemntTest Type using the XSDHelper + * and the TypeHelper. + */ +public class ContainmentTypeUtil { + + /** + * createDynamicWithStaticResources creates the DataObject type from an existing + * XSD. The same XSD is used to create the Types statically using the XSD2JavaGenerator. + * The XSD should be kept in synch with the createDynamically method in this class. + * @throws IOException + * @return true if + */ + public static boolean createDynamicWithStaticResources(HelperContext hc) { + try { + // Populate the meta data for the test model (ContainTest) + URL url = ContainmentCycleTestCase.class.getResource("/containmenttest.xsd"); + InputStream inputStream = url.openStream(); + hc.getXSDHelper().define(inputStream, url.toString()); + inputStream.close(); + } catch(IOException e) { + e.printStackTrace(); + return false; + } + return true; + } + + /** + * createDynamically() creates the SDO Types using the TypeHelper. This method should be kept in + * synch with the XSD used for createDynamicallyWithStaticResources. The same XSD is used for + * the static generation of SDO Types using XSD2JavaGenerator. + */ + public static void createDynamically(HelperContext hc) { + TypeHelper types = hc.getTypeHelper(); + Type stringType = types.getType("commonj.sdo", "String"); + + DataObject testType = hc.getDataFactory().create("commonj.sdo", "Type"); + testType.set("uri", "http://www.example.com/ContainmentTest"); + testType.set("name", "ContainmentTest"); + testType.setBoolean("sequenced", true); + + DataObject nameProperty = testType.createDataObject("property"); + nameProperty.set("name", "Name"); + nameProperty.set("type", stringType); + + DataObject containProperty = testType.createDataObject("property"); + containProperty.set("name", "Contain"); + containProperty.setBoolean("containment", true); + containProperty.set("type", testType); + + DataObject containManyProperty = testType.createDataObject("property"); + containManyProperty.set("name", "ContainMany"); + containManyProperty.setBoolean("many", true); + containManyProperty.setBoolean("containment", true); + containManyProperty.set("type", testType); + + types.define(testType); + } +}
\ No newline at end of file diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/CrossScopeCopyTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/CrossScopeCopyTestCase.java new file mode 100644 index 0000000000..bba7fb4c1b --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/CrossScopeCopyTestCase.java @@ -0,0 +1,474 @@ +/**
+ *
+ * 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.
+ */
+package org.apache.tuscany.sdo.test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.Vector;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sdo.api.SDOUtil;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+import commonj.sdo.Type;
+import commonj.sdo.helper.CopyHelper;
+import commonj.sdo.helper.DataFactory;
+import commonj.sdo.helper.HelperContext;
+import commonj.sdo.helper.TypeHelper;
+
+public class CrossScopeCopyTestCase extends TestCase
+{
+ // Literals
+ private static final String TEST_NAMESPACE = "http://www.example.com/bank";
+ private static final String BANK_MODEL = "/bank.xsd";
+ private static final String BANK_TYPE = "bankType";
+ private static final String BRANCH_TYPE = "branchType";
+ private static final String SERVICE_TYPE = "serviceType";
+ private static final String ACCOUNT_TYPE = "accountType";
+ private static final String CUSTOMER_TYPE = "customerType";
+ private static final String ADDRESS_TYPE = "addressType";
+ private static final String DYNAMIC_TYPE = "dynamicType";
+
+ // SDO model objects
+ private HelperContext hca;
+ private HelperContext hcb;
+ private TypeHelper scopeA;
+ private TypeHelper scopeB;
+
+ // SDO instance objects
+ private DataObject bankSDO;
+ private DataObject branchSDO1;
+ private DataObject branchSDO2;
+ private DataObject serviceSDO1;
+ private DataObject serviceSDO2;
+ private DataObject serviceSDO3;
+ private DataObject customerSDO1;
+ private DataObject customerSDO2;
+ private DataObject customerSDO3;
+ private DataObject customerSDO4;
+
+ private int indent = 0;
+
+ public void testCrossScopeCopy() throws IOException
+ {
+ CopyHelper copyHelperB = SDOUtil.createCrossScopeCopyHelper(hcb);
+
+ // Perform Shallow Copy Test
+ DataObject copiedSDO = copyHelperB.copyShallow(bankSDO);
+ shallowCopyAssertions(bankSDO, copiedSDO);
+
+ // Perform Deep Copy Test
+ copiedSDO = copyHelperB.copy(bankSDO);
+ deepCopyAssertions(bankSDO, copiedSDO);
+
+ // Inter-Reference Copy
+ copiedSDO = copyHelperB.copy(customerSDO1);
+ DataObject prop = (DataObject)copiedSDO.get("HomeBranch");
+ assertTrue(prop==null);
+
+ // Perform invalid namespace test
+ DataObject sdo = hca.getDataFactory().create(TEST_NAMESPACE, DYNAMIC_TYPE );
+ sdo.set("custNum", "099" );
+ sdo.set("firstName", "John");
+ sdo.set("lastName", "Doe");
+ boolean failed = false;
+ try
+ {
+ // In this case, we are copying an object to a scope
+ // where the object's type has not been defined. That
+ // will generate a null pointer exception what we will
+ // catch.
+ copyHelperB.copy(sdo);
+ }
+ catch(java.lang.NullPointerException ex)
+ {
+ failed = true;
+ }
+ assertTrue(failed);
+ }
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ // Create Two Scopes
+ hca = SDOUtil.createHelperContext();
+ hcb = SDOUtil.createHelperContext();
+ scopeA = hca.getTypeHelper();
+ scopeB = hcb.getTypeHelper();
+
+ // Populate scopes with bank model now
+ URL url = getClass().getResource(BANK_MODEL);
+ InputStream inputStream = url.openStream();
+ hca.getXSDHelper().define(inputStream, url.toString());
+ inputStream.close();
+ inputStream = url.openStream();
+ hcb.getXSDHelper().define(inputStream, url.toString());
+ inputStream.close();
+
+ // Now Populate scopeA with some dynamic models
+ populateScopeWithDynamicTypes(scopeA);
+
+ // Construct Source Tree
+ constructSourceTree(hca.getDataFactory());
+ }
+
+ private void shallowCopyAssertions(DataObject sdo, DataObject copiedSdo)
+ {
+ assertEquals(sdo.getType().getName(), copiedSdo.getType().getName());
+ assertEquals(sdo.getType().getURI(), copiedSdo.getType().getURI());
+ assertNotSame(sdo.getType(), copiedSdo.getType());
+ assertEquals(sdo.getInstanceProperties().size(), copiedSdo
+ .getInstanceProperties().size());
+
+ for(Iterator it = sdo.getInstanceProperties().iterator(), it2 = copiedSdo
+ .getInstanceProperties().iterator(); it.hasNext();)
+ {
+ Property p1 = (Property) it.next(), p2 = (Property) it2.next();
+ assertEquals(p1.getName(), p2.getName());
+ Object o1 = sdo.get(p1), o2 = copiedSdo.get(p2);
+ if(p1.getType().isDataType())
+ {
+ assertEquals(o1, o2);
+ // TODO is there a way I can distinguish between mutable and
+ // immutable types
+ // so that I can do some "same object" tests
+ }
+ else
+ {
+ assertNotSame(p1, p2);
+ if(p2.isMany())
+ {
+ assertEquals(copiedSdo.getList(p2).size(), 0);
+ }
+ else
+ {
+ assertNull(copiedSdo.get(p2));
+ }
+ }
+ try
+ {
+ sdo.get(p2);
+ assertTrue(false);
+ }
+ catch(Exception e)
+ {
+ // expected route
+ }
+ try
+ {
+ copiedSdo.get(p1);
+ assertTrue(false);
+ }
+ catch(Exception e2)
+ {
+ // expected route
+ }
+ }
+ }
+
+ private void deepCopyAssertions(DataObject sdo, DataObject copiedSdo)
+ {
+ //indent();
+
+ //System.out.println("checking objects of types: "
+ // + sdo.getType().getName() + ", "
+ // + copiedSdo.getType().getName());
+ indent++;
+
+ assertEquals(sdo.getType().getName(), copiedSdo.getType().getName());
+ assertEquals(sdo.getType().getURI(), copiedSdo.getType().getURI());
+ assertNotSame(sdo.getType(), copiedSdo.getType());
+ assertEquals(sdo.getInstanceProperties().size(), copiedSdo
+ .getInstanceProperties().size());
+
+ for(Iterator it = sdo.getInstanceProperties().iterator(), it2 = copiedSdo
+ .getInstanceProperties().iterator(); it.hasNext();)
+ {
+ Property p1 = (Property) it.next(), p2 = (Property) it2.next();
+ assertEquals(p1.getName(), p2.getName());
+ Object o1 = sdo.get(p1), o2 = copiedSdo.get(p2);
+ if(p1.getType().isDataType())
+ {
+ assertEquals(o1, o2);
+ // TODO is there a way I can distinguish between mutable and
+ // immutable types
+ // so that I can do some "same object" tests
+ }
+ else
+ {
+ assertNotSame(p1, p2);
+ if(p2.isMany())
+ {
+ assertEquals(sdo.getList(p1).size(), copiedSdo.getList(p2)
+ .size());
+ for(Iterator it3 = sdo.getList(p1).iterator(), it4 = copiedSdo
+ .getList(p2).iterator(); it3.hasNext();)
+ {
+ deepCopyAssertions((DataObject) it3.next(),
+ (DataObject) it4.next());
+ }
+ }
+ else
+ {
+ deepCopyAssertions(sdo.getDataObject(p1), copiedSdo
+ .getDataObject(p2));
+ }
+ }
+ try
+ {
+ sdo.get(p2);
+ assertTrue(false);
+ }
+ catch(Exception e)
+ {
+ // expected route
+ }
+ try
+ {
+ copiedSdo.get(p1);
+ assertTrue(false);
+ }
+ catch(Exception e2)
+ {
+ // expected route
+ }
+ }
+
+ indent--;
+ }
+
+ /*
+ private void indent()
+ {
+ for(int i=0; i <indent; i++) System.out.print(" ");
+ }
+ */
+
+ protected void constructSourceTree(DataFactory df)
+ {
+ // Create Instances
+ bankSDO = df.create(TEST_NAMESPACE, BANK_TYPE );
+ branchSDO1 = df.create(TEST_NAMESPACE, BRANCH_TYPE );
+ branchSDO2 = df.create(TEST_NAMESPACE, BRANCH_TYPE );
+ serviceSDO1 = df.create(TEST_NAMESPACE, SERVICE_TYPE );
+ serviceSDO2 = df.create(TEST_NAMESPACE, SERVICE_TYPE );
+ serviceSDO3 = df.create(TEST_NAMESPACE, SERVICE_TYPE );
+ customerSDO1 = df.create(TEST_NAMESPACE, CUSTOMER_TYPE );
+ customerSDO2 = df.create(TEST_NAMESPACE, CUSTOMER_TYPE );
+ customerSDO3 = df.create(TEST_NAMESPACE, CUSTOMER_TYPE );
+ customerSDO4 = df.create(TEST_NAMESPACE, CUSTOMER_TYPE );
+
+ // Populate the Bank Instance
+ bankSDO.set("name", "Fourth National");
+ Vector v = new Vector();
+ v.add(branchSDO1);
+ v.add(branchSDO2);
+ bankSDO.set("Branch",v);
+ v.removeAllElements();
+ v.add(serviceSDO1);
+ v.add(serviceSDO2);
+ v.add(serviceSDO3);
+ bankSDO.set("Service",v);
+ v.removeAllElements();
+ v.add(customerSDO1);
+ v.add(customerSDO2);
+ v.add(customerSDO3);
+ v.add(customerSDO4);
+ bankSDO.set("Customer",v);
+ v.removeAllElements();
+
+ // Populate Branch Instances
+ // Branch 1
+ branchSDO1.set("ID", "BR100");
+ DataObject addr = df.create(TEST_NAMESPACE, ADDRESS_TYPE );
+ addr.set("Street", "1302 Money Street");
+ addr.set("City", "Apex");
+ addr.set("State", "NC");
+ addr.set("Zip", "27502");
+ branchSDO1.set("Address", addr);
+ v.add("If you are north, head south");
+ v.add("If you are south, head north");
+ branchSDO1.set("Directions", v);
+ v.removeAllElements();
+ DataObject account1 = df.create(TEST_NAMESPACE, ACCOUNT_TYPE );
+ account1.set("ID", "0000 1200 0001");
+ account1.set("Service", serviceSDO1 );
+ account1.setBigDecimal("Balance", new BigDecimal("3124.12"));
+ v.add(account1);
+ DataObject account2 = df.create(TEST_NAMESPACE, ACCOUNT_TYPE );
+ account2.set("ID", "0000 8899 0001");
+ account2.set("Service", serviceSDO1 );
+ account2.setBigDecimal("Balance", new BigDecimal("20.00"));
+ v.add(account2);
+ DataObject account3 = df.create(TEST_NAMESPACE, ACCOUNT_TYPE );
+ account3.set("ID", "0000 3110 0020");
+ account3.set("Service", serviceSDO3 );
+ account3.setBigDecimal("Balance", new BigDecimal("5000.00"));
+ v.add(account3);
+ branchSDO1.set("Account", v);
+ v.removeAllElements();
+ // Branch 2
+ branchSDO2.set("ID", "BR200");
+ addr = df.create(TEST_NAMESPACE, ADDRESS_TYPE );
+ addr.set("Street", "1207 Cash Court");
+ addr.set("City", "Raleigh");
+ addr.set("State", "NC");
+ addr.set("Zip", "27701");
+ branchSDO2.set("Address", addr);
+ v.add("If you are east, head west");
+ v.add("If you are west, head east");
+ branchSDO2.set("Directions", v);
+ v.removeAllElements();
+ DataObject account4 = df.create(TEST_NAMESPACE, ACCOUNT_TYPE );
+ account4.set("ID", "0000 0011 0001");
+ account4.set("Service", serviceSDO1 );
+ account4.setBigDecimal("Balance", new BigDecimal("99.12"));
+ v.add(account4);
+ DataObject account5 = df.create(TEST_NAMESPACE, ACCOUNT_TYPE );
+ account5.set("ID", "0000 9911 0001");
+ account5.set("Service", serviceSDO2 );
+ account5.setBigDecimal("Balance", new BigDecimal("820.00"));
+ v.add(account5);
+ DataObject account6 = df.create(TEST_NAMESPACE, ACCOUNT_TYPE );
+ account6.set("ID", "0000 0001 0020");
+ account6.set("Service", serviceSDO3 );
+ account6.setBigDecimal("Balance", new BigDecimal("9000.00"));
+ v.add(account6);
+ branchSDO2.set("Account", v);
+ v.removeAllElements();
+
+ // Populate Service Instances
+ serviceSDO1.set("ID", "SRV01");
+ serviceSDO1.set("Name", "Checking");
+ serviceSDO1.setBigDecimal("Fee", new BigDecimal("0.00"));
+ serviceSDO2.set("ID", "SRV02");
+ serviceSDO2.set("Name", "Savings");
+ serviceSDO2.setBigDecimal("Fee", new BigDecimal("0.00"));
+ serviceSDO3.set("ID", "SRV03");
+ serviceSDO3.set("Name", "Loan");
+ serviceSDO3.setBigDecimal("Fee", new BigDecimal("0.00"));
+
+ // Populate Customer Instances
+ // Customer 1
+ customerSDO1.set("ID", "CUST01");
+ customerSDO1.set("First", "James");
+ customerSDO1.set("Last", "Madison");
+ addr = df.create(TEST_NAMESPACE, ADDRESS_TYPE );
+ addr.set("Street", "1234 Easy Street");
+ addr.set("City", "New York");
+ addr.set("State", "NY");
+ addr.set("Zip", "27511");
+ customerSDO1.set("Address", addr);
+ customerSDO1.set("HomeBranch", branchSDO1);
+ v.add(account1);
+ customerSDO1.set("Account", v);
+ v.removeAllElements();
+ v.add(customerSDO2);
+ v.add(customerSDO3);
+ customerSDO1.set("Related", v);
+ v.removeAllElements();
+ // Customer 2
+ customerSDO2.set("ID", "CUST02");
+ customerSDO2.set("First", "George");
+ customerSDO2.set("Last", "Washington");
+ addr = df.create(TEST_NAMESPACE, ADDRESS_TYPE );
+ addr.set("Street", "1776 Potomac Avenue");
+ addr.set("City", "Washington");
+ addr.set("State", "DC");
+ addr.set("Zip", "50555");
+ customerSDO2.set("Address", addr);
+ customerSDO2.set("HomeBranch", branchSDO1);
+ v.add(account2);
+ v.add(account3);
+ customerSDO2.set("Account", v);
+ v.removeAllElements();
+ // Customer 3
+ customerSDO3.set("ID", "CUST03");
+ customerSDO3.set("First", "Thomas");
+ customerSDO3.set("Last", "Jefferson");
+ addr = df.create(TEST_NAMESPACE, ADDRESS_TYPE );
+ addr.set("Street", "1492 Columbus Avenue");
+ addr.set("City", "Charlottesville");
+ addr.set("State", "VA");
+ addr.set("Zip", "20121");
+ customerSDO3.set("Address", addr);
+ customerSDO3.set("HomeBranch", branchSDO2);
+ v.add(account4);
+ customerSDO3.set("Account", v);
+ v.removeAllElements();
+ // Customer 4
+ customerSDO4.set("ID", "CUST04");
+ customerSDO4.set("First", "Benjamin");
+ customerSDO4.set("Last", "Franklin");
+ addr = df.create(TEST_NAMESPACE, ADDRESS_TYPE );
+ addr.set("Street", "99 Light Street");
+ addr.set("City", "Philadelphia");
+ addr.set("State", "PA");
+ addr.set("Zip", "19251");
+ customerSDO4.set("Address", addr);
+ customerSDO4.set("HomeBranch", branchSDO2);
+ v.add(account5);
+ v.add(account6);
+ customerSDO4.set("Account", v);
+ v.removeAllElements();
+
+ }
+
+ private void populateScopeWithDynamicTypes(TypeHelper scope)
+ {
+ Type stringType = scope.getType("commonj.sdo", "String");
+ DataObject customerType = DataFactory.INSTANCE.create("commonj.sdo", "Type");
+ customerType.set("uri", TEST_NAMESPACE);
+ customerType.set("name", DYNAMIC_TYPE );
+ DataObject custNumProperty = customerType.createDataObject("property");
+ custNumProperty.set("name", "custNum");
+ custNumProperty.set("type", stringType);
+ DataObject firstNameProperty = customerType.createDataObject("property");
+ firstNameProperty.set("name", "firstName");
+ firstNameProperty.set("type", stringType);
+ DataObject lastNameProperty = customerType.createDataObject("property");
+ lastNameProperty.set("name", "lastName");
+ lastNameProperty.set("type", stringType);
+ scope.define(customerType);
+ }
+
+ /*
+ private void dumpObject(DataObject sdo, String node )
+ {
+ try
+ {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ SDOUtil.createXMLHelper(scopeA).save(sdo, TEST_NAMESPACE,
+ node, baos);
+ System.out.println(baos.toString());
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ */
+}
diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DataGraphTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DataGraphTestCase.java new file mode 100644 index 0000000000..5fcc567908 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DataGraphTestCase.java @@ -0,0 +1,270 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +import junit.framework.TestCase; + +import org.apache.tuscany.sdo.util.SDOUtil; + +import commonj.sdo.DataGraph; +import commonj.sdo.DataObject; +import commonj.sdo.Type; +import commonj.sdo.helper.XSDHelper; + +/** + * Tests methods of DataGraph except for change summary which is tested elsewhere. + */ +public class DataGraphTestCase extends TestCase { + private final String SIMPLE_MODEL = "/simple.xsd"; + private final String ANYTYPE_MODEL = "/anytype.xsd"; + + /** + * createRootObject(type) test with good parms. + */ + public void testCreateRootObjectType() throws IOException { + // Create an empty data graph and add a root object, an instance of type Quote + + DataGraph dataGraph = SDOUtil.createDataGraph(); + Type quoteType = dataGraph.getType("http://www.example.com/simple", "Quote"); + DataObject quote = dataGraph.createRootObject(quoteType); + + assertNotNull(quote); + } + + /** + * createRootObject(type) test with bad parm. + */ + public void testCreateRootObjectTypeBad() throws IOException { + // Create an empty data graph and pass bad parms to createRootObject + + DataGraph dataGraph = SDOUtil.createDataGraph(); + boolean success = false; + try { + dataGraph.createRootObject(null); + } catch(NullPointerException npe) { + fail("createRootObject with null type threw NullPointerException"); + } catch(Exception e) { + success = true; + } + if (!success) { + fail("createRootObject with null type parameter did not throw an exception"); + } + } + + /** + * createRootObject(type) test with good parms but too often to ensure + * that IllegalStateException is thrown + */ + public void testCreateRootObjectTypeIllegalState() throws IOException { + // Create an empty data graph and add a root object, then add another root object + + DataGraph dataGraph = SDOUtil.createDataGraph(); + DataObject quote = dataGraph.createRootObject("http://www.example.com/anytype", "Person"); + + assertNotNull(quote); + + Type quoteType = dataGraph.getType("http://www.example.com/simple", "Quote"); + assertNotNull(quoteType); + boolean success = false; + try { + dataGraph.createRootObject(quoteType); + } catch(IllegalStateException ise) { + success = true; + } catch(Exception e) { + fail("createRootObject called when a root was already created and an exception other than IllegalStateException was thrown: "+e.getMessage()); + } + if (!success) { + fail("createRootObject called when a root was already created but no IllegalStateException was thrown"); + } + } + + /** + * createRootObject(type) test with good parms but too often to ensure + * that IllegalStateException is thrown + */ + public void testCreateRootObjectUriTypenameIllegalState() throws IOException { + // Create an empty data graph and add a root object, then add another root object + + DataGraph dataGraph = SDOUtil.createDataGraph(); + DataObject quote = dataGraph.createRootObject("http://www.example.com/anytype", "Person"); + + assertNotNull(quote); + + boolean success = false; + try { + dataGraph.createRootObject("http://www.example.com/simple", "Quote"); + } catch(IllegalStateException ise) { + success = true; + } catch(Exception e) { + fail("createRootObject called when a root was already created and an exception other than IllegalStateException was thrown: "+e.getMessage()); + } + if (!success) { + fail("createRootObject called when a root was already created but no IllegalStateException was thrown"); + } + } + + /** + * createRootObject(uri_string, typeName_string) test with good parms. + */ + public void testCreateRootObjectUriTypename() throws IOException { + // Create an empty data graph and add a root object, an instance of type Quote + + DataGraph dataGraph = SDOUtil.createDataGraph(); + DataObject quote = dataGraph.createRootObject("http://www.example.com/simple", "Quote"); + + assertNotNull(quote); + } + + /** + * createRootObject(uri_string, typeName_string) test with bad parms. + */ + public void testCreateRootObjectUriTypenameBad1() throws IOException { + // Create an empty data graph and pass bad parms to createRootObject + + DataGraph dataGraph = SDOUtil.createDataGraph(); + boolean success = false; + try { + dataGraph.createRootObject("http://www.example.com/mangled", "Quote"); + } catch(NullPointerException npe) { + fail("createRootObject with mangled URI threw NullPointerException"); + } catch(Exception e) { + success = true; + } + if (!success) { + fail("createRootObject with mangled URI did not throw an exception"); + } + } + + /** + * createRootObject(uri_string, typeName_string) test with bad parms. + */ + public void testCreateRootObjectUriTypenameBad2() throws IOException { + // Create an empty data graph and pass bad parms to createRootObject + + DataGraph dataGraph = SDOUtil.createDataGraph(); + boolean success = false; + try { + dataGraph.createRootObject("http://www.example.com/simple", "Mangled"); + } catch(NullPointerException npe) { + fail("createRootObject with mangled type name threw NullPointerException"); + } catch(Exception e) { + success = true; + } + if (!success) { + fail("createRootObject with mangled type name did not throw an exception"); + } + } + + /** + * getType(uri_string, typeName_string) test with good parms. + */ + public void testGetType() throws IOException { + // Create an empty data graph and get a type, a Quote type + + DataGraph dataGraph = SDOUtil.createDataGraph(); + Type quoteType = dataGraph.getType("http://www.example.com/simple", "Quote"); + + assertNotNull(quoteType); + } + + /** + * getType(uri_string, typeName_string) test with bad URI parm. + */ + public void testGetTypeBad1() throws IOException { + // Create an empty data graph and pass bad parms to getType + + DataGraph dataGraph = SDOUtil.createDataGraph(); + Type quoteType = null; + try { + quoteType = dataGraph.getType("http://www.example.com/mangled", "Quote"); + } catch(Exception e) { + fail("getType with mangled URI threw an exception: "+e.getMessage()); + } + assertNull(quoteType); + } + + /** + * getType(uri_string, typeName_string) test with bad type name parm. + */ + public void testGetTypeBad2() throws IOException { + // Create an empty data graph and pass bad parms to getType + + DataGraph dataGraph = SDOUtil.createDataGraph(); + Type quoteType = null; + try { + quoteType = dataGraph.getType("http://www.example.com/simple", "Mangled"); + } catch(Exception e) { + fail("getType with mangled type name threw an exception: "+e.getMessage()); + } + assertNull(quoteType); + } + + /** + * getType(uri_string, typeName_string) test with null URI parm. + */ + public void testGetTypeBad3() throws IOException { + // Create an empty data graph and pass bad parms to getType + + DataGraph dataGraph = SDOUtil.createDataGraph(); + Type quoteType = null; + try { + quoteType = dataGraph.getType(null, "Quote"); + } catch(Exception e) { + fail("getType with null URI threw an exception: "+e.getMessage()); + } + assertNull(quoteType); + } + + /** + * getType(uri_string, typeName_string) test with null type name parm. + */ + public void testGetTypeBad4() throws IOException { + // Create an empty data graph and pass bad parms to getType + + DataGraph dataGraph = SDOUtil.createDataGraph(); + Type quoteType = null; + try { + quoteType = dataGraph.getType("http://www.example.com/simple", null); + } catch(Exception e) { + fail("getType with null type name threw an exception: "+e.getMessage()); + } + assertNull(quoteType); + } + + protected void setUp() throws Exception { + super.setUp(); + + // Populate the meta data for the Quote type + URL url = getClass().getResource(SIMPLE_MODEL); + InputStream inputStream = url.openStream(); + XSDHelper.INSTANCE.define(inputStream, url.toString()); + inputStream.close(); + + // Populate the meta data for the Person type + URL url2 = getClass().getResource(ANYTYPE_MODEL); + InputStream inputStream2 = url2.openStream(); + XSDHelper.INSTANCE.define(inputStream2, url2.toString()); + inputStream2.close(); + } +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DataTypeBaseTypeTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DataTypeBaseTypeTestCase.java new file mode 100644 index 0000000000..a49b165386 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DataTypeBaseTypeTestCase.java @@ -0,0 +1,68 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.List; + +import junit.framework.TestCase; + +import commonj.sdo.Type; +import commonj.sdo.helper.TypeHelper; +import commonj.sdo.helper.XSDHelper; + + +public class DataTypeBaseTypeTestCase extends TestCase { + private final String TEST_MODEL = "/datatype.xsd"; + private final String TEST_NAMESPACE = "http://www.example.com/datatype"; + + public void testSimpleSDOType() throws IOException + { + Type type = TypeHelper.INSTANCE.getType(TEST_NAMESPACE, "SimpleSDOType"); + List baseTypes = type.getBaseTypes(); + assertTrue(baseTypes.size() == 1); + } + + public void testSimpleSDOTypeInstanceClass() throws IOException + { + Type type = TypeHelper.INSTANCE.getType(TEST_NAMESPACE, "SimpleSDOTypeInstanceClass"); + List baseTypes = type.getBaseTypes(); + assertTrue(baseTypes.size() == 0); + } + + public void testSimpleSDOTypeExtendedInstanceClass() throws IOException + { + Type type = TypeHelper.INSTANCE.getType(TEST_NAMESPACE, "SimpleSDOTypeExtendedInstanceClass"); + List baseTypes = type.getBaseTypes(); + assertTrue(baseTypes.size() == 1); + } + + public void setUp() throws Exception + { + URL url = getClass().getResource(TEST_MODEL); + InputStream inputStream = url.openStream(); + XSDHelper.INSTANCE.define(inputStream, url.toString()); + inputStream.close(); + } + +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DateConversionTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DateConversionTestCase.java new file mode 100644 index 0000000000..291842e1aa --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DateConversionTestCase.java @@ -0,0 +1,374 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.lang.reflect.Method; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +import junit.framework.TestCase; + +import commonj.sdo.helper.DataHelper; + +// DateConversionTestCase insures that the DataHelper conversions accurately +// retain the information in the specified fields (e.g. month, day or year). +// It also provides coverage for the DataHelper API. +// Note that toDate is called each time Test.initialize() is called. + +public class DateConversionTestCase extends TestCase +{ + private static Calendar test_calendar; + private static Date test_date; + private static DataHelper data_helper; + + private static final TestType TO_DATE_TIME = new TestType("toDateTime", new int [] {Calendar.YEAR, Calendar.MONTH, + Calendar.DAY_OF_MONTH, Calendar.HOUR_OF_DAY, Calendar.MINUTE, Calendar.SECOND, Calendar.MILLISECOND}); + private static final TestType TO_DURATION = new TestType("toDuration", new int [] {Calendar.YEAR, Calendar.MONTH, + Calendar.DAY_OF_MONTH, Calendar.HOUR_OF_DAY, Calendar.MINUTE, Calendar.SECOND, Calendar.MILLISECOND}); + private static final TestType TO_TIME = new TestType("toTime", new int [] {Calendar.HOUR_OF_DAY, Calendar.MINUTE, + Calendar.SECOND, Calendar.MILLISECOND}); + private static final TestType TO_DAY = new TestType("toDay", new int[] {Calendar.DAY_OF_MONTH}); + private static final TestType TO_MONTH = new TestType("toMonth", new int[] {Calendar.MONTH}); + private static final TestType TO_MONTH_DAY = new TestType("toMonthDay", new int[] {Calendar.MONTH, Calendar.DAY_OF_MONTH}); + private static final TestType TO_YEAR = new TestType("toYear", new int[] {Calendar.YEAR}); + private static final TestType TO_YEAR_MONTH= new TestType("toYearMonth", new int[] {Calendar.YEAR, Calendar.MONTH}); + private static final TestType TO_YEAR_MONTH_DAY = new TestType("toYearMonthDay", new int[] {Calendar.YEAR, + Calendar.MONTH, Calendar.DAY_OF_MONTH}); + + public DateConversionTestCase() throws Exception + { + data_helper = DataHelper.INSTANCE; + test_calendar = new GregorianCalendar(); + test_calendar.setTime(new Date(System.currentTimeMillis())); + test_date = test_calendar.getTime(); + } + + private static class TestType + { + private static final Class[] DATE_CLASS_ARRAY = {Date.class}; + private static final Class[] CALENDAR_CLASS_ARRAY = {Calendar.class}; + + Method date_method; + Method calendar_method; + int [] compare_fields; + + public TestType (String method_name, int [] compare_fields) + { + try + { + this.date_method = DataHelper.class.getMethod(method_name, DATE_CLASS_ARRAY); + } + catch (NoSuchMethodException e) + { + this.date_method = null; + } + + this.compare_fields = compare_fields; + try + { + this.calendar_method = DataHelper.class.getMethod(method_name, CALENDAR_CLASS_ARRAY); + } + catch (NoSuchMethodException e) + { + this.calendar_method = null; + } + + } + + public Method getDateMethod() + { + return this.date_method; + } + + public Method getCalendarMethod() + { + return this.calendar_method; + } + } + + private static class Test + { + String from_type; + Date from_date; + Calendar from_calendar; + Class expected_exception; + + public Test () + { + this.from_date = null; + this.from_calendar = null; + expected_exception = null; + } + + public void initialize (TestType from_type) + { + this.from_type = from_type.getDateMethod().getName(); + + try + { + String date_string = (String) from_type.getDateMethod().invoke(data_helper, new Object[] {test_date}); + + this.from_date = data_helper.toDate(date_string); + date_string = (String) from_type.getCalendarMethod().invoke(data_helper, new Object[] {test_calendar}); + this.from_calendar = data_helper.toCalendar(date_string); + } + catch (Exception e) + { + this.from_date = null; + this.from_calendar = null; + } + + } + + // This method is needed because there is not a toDate(Date) method in DataHelper. + + public void initializeToDate() + { + this.from_calendar = test_calendar; + this.from_date = test_date; + this.from_type = "toDate"; + } + + public void attemptConversion (TestType to_type) throws Exception + { + executeConversion(to_type.getDateMethod(), new Object[] {this.from_date}, to_type.compare_fields); + executeConversion(to_type.getCalendarMethod(), new Object[] {this.from_calendar}, to_type.compare_fields); + } + + private void executeConversion (Method conversion, Object[] parm, int [] compare_fields) throws Exception + { + String result; + + try + { + result = (String) conversion.invoke(data_helper, parm); + } + catch (Exception e) + { + System.err.println("An unexpected exception was thrown while calling " + conversion.getName() + + " after initializing with " + this.from_type + "."); + throw e; + } + + assertTrue("The expected value did not result when calling " + conversion.getName() + + " after initializing with " + this.from_type + ".", compareFields(parm[0], result, compare_fields)); + } + + private boolean compareFields(Object compare_to, String output, int [] compare_fields) + { + Calendar result = data_helper.toCalendar(output); + Calendar expected; + + if (compare_to instanceof Calendar) + expected = (GregorianCalendar) test_calendar; + else + { + expected = new GregorianCalendar(); + expected.setTime((Date) test_date); + } + + for (int i = 0; i < compare_fields.length; i++) + { + if (expected.get(compare_fields[i]) != result.get(compare_fields[i])) + { + System.err.println("Failed: - expected '" + expected.get(compare_fields[i]) + "' got '" + result.get(compare_fields[i]) + "' for output: " + output); + return false; + } + } + return true; + } + + } + + public void testConversionsFromDay() throws Exception + { + Test FromDay = new Test(); + + FromDay.initialize(TO_DAY); + + FromDay.attemptConversion(TO_DAY); + } + + public void testConversionsFromDate() throws Exception + { + Test FromDate = new Test(); + + FromDate.initializeToDate(); + + FromDate.attemptConversion(TO_DATE_TIME); + FromDate.attemptConversion(TO_DURATION); + FromDate.attemptConversion(TO_TIME); + FromDate.attemptConversion(TO_DAY); + FromDate.attemptConversion(TO_MONTH); + FromDate.attemptConversion(TO_MONTH_DAY); + FromDate.attemptConversion(TO_YEAR); + FromDate.attemptConversion(TO_YEAR_MONTH); + FromDate.attemptConversion(TO_YEAR_MONTH_DAY); + } + + public void testConversionsFromDateTime() throws Exception + { + Test FromDateTime = new Test(); + + FromDateTime.initialize(TO_DATE_TIME); + + FromDateTime.attemptConversion(TO_DATE_TIME); + FromDateTime.attemptConversion(TO_DURATION); + FromDateTime.attemptConversion(TO_TIME); + FromDateTime.attemptConversion(TO_DAY); + FromDateTime.attemptConversion(TO_MONTH); + FromDateTime.attemptConversion(TO_MONTH_DAY); + FromDateTime.attemptConversion(TO_YEAR); + FromDateTime.attemptConversion(TO_YEAR_MONTH); + FromDateTime.attemptConversion(TO_YEAR_MONTH_DAY); + } + + public void testConversionsFromDuration() throws Exception + { + Test FromDuration = new Test(); + + FromDuration.initialize(TO_DURATION); + + FromDuration.attemptConversion(TO_DURATION); + FromDuration.attemptConversion(TO_DATE_TIME); + FromDuration.attemptConversion(TO_TIME); + FromDuration.attemptConversion(TO_DAY); + FromDuration.attemptConversion(TO_MONTH); + FromDuration.attemptConversion(TO_MONTH_DAY); + FromDuration.attemptConversion(TO_YEAR); + FromDuration.attemptConversion(TO_YEAR_MONTH); + FromDuration.attemptConversion(TO_YEAR_MONTH_DAY); + } + + public void testConversionsFromMonth() throws Exception + { + Test FromMonth = new Test(); + + FromMonth.initialize(TO_MONTH); + + FromMonth.attemptConversion(TO_MONTH); + } + + public void testConversionsFromMonthDay() throws Exception + { + Test FromMonthDay = new Test(); + + FromMonthDay.initialize(TO_MONTH_DAY); + FromMonthDay.attemptConversion(TO_MONTH_DAY); + FromMonthDay.attemptConversion(TO_MONTH); + FromMonthDay.attemptConversion(TO_DAY); + } + + public void testConversionsFromTime() throws Exception + { + Test FromTime = new Test(); + + FromTime.initialize(TO_TIME); + + FromTime.attemptConversion(TO_TIME); + } + + public void testConversionsFromYear() throws Exception + { + Test FromYear = new Test(); + + FromYear.initialize(TO_YEAR); + + FromYear.attemptConversion(TO_YEAR); + } + + public void testConversionsFromYearMonth() throws Exception + { + Test FromYearMonth = new Test(); + + FromYearMonth.initialize(TO_YEAR_MONTH); + + FromYearMonth.attemptConversion(TO_YEAR_MONTH); + FromYearMonth.attemptConversion(TO_MONTH); + FromYearMonth.attemptConversion(TO_YEAR); + } + + public void testConversionsFromYearMonthDay() throws Exception + { + Test FromYearMonthDay = new Test(); + + FromYearMonthDay.initialize(TO_YEAR_MONTH_DAY); + + FromYearMonthDay.attemptConversion(TO_YEAR_MONTH_DAY); + FromYearMonthDay.attemptConversion(TO_YEAR_MONTH); + FromYearMonthDay.attemptConversion(TO_MONTH_DAY); + FromYearMonthDay.attemptConversion(TO_YEAR); + FromYearMonthDay.attemptConversion(TO_MONTH); + FromYearMonthDay.attemptConversion(TO_DAY); + } + + // Ensure that strings that should be recognized by toDate do not + // result in a null Date value. + + public void testToDateFormats() throws Exception + { + String[] validStrings = + { + "2006-03-31T03:30:45.123Z", + "-2006-03-31T03:30:45.1Z", + "2006-03-31T03:30:45Z", + "2006-03-31T03:30:45.123", + "2006-03-31T03:30:45.1", + "-2006-03-31T03:30:45", + "2006-03-31T03:30:45.123 EDT", + "2006-03-31T03:30:45.1 EDT", + "2006-03-31T03:30:45 EDT", + "---05 PST", + "---04", + "--12 GMT", + "--12", + "--08-08 EST", + "--08-08", + "1976-08-08 PDT", + "1976-08-08", + "88-12 CST", + "1988-12", + "2005 CDT", + "1999", + "P2006Y 08M 10D T 12H 24M 07S", + "P2006Y 10D T 12H", + "-P2006Y 08M 10D T 07S.2", + "P08M 10D T 07H", + "-P 04M 10DT12H 24S.88", + "PT12H" + }; + + for (int i = 0; i < validStrings.length; i++) + { + assertNotNull("DataHelper.toData() should not return null for '" + validStrings[i] + "'.", + data_helper.toDate(validStrings[i])); + } + + } + + public void testDateTime(){ + // a small bolt on test case resulting from a fix for JIRA TUSCANY-1044 + String date = DataHelper.INSTANCE.toDateTime(DataHelper.INSTANCE.toCalendar("2007-02-04T00:00:00.200Z")); + assertEquals("2007-02-04T00:00:00.200Z", date); + } + +} + diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DefineOpenContentPropertyTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DefineOpenContentPropertyTestCase.java new file mode 100644 index 0000000000..bbbad11f53 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DefineOpenContentPropertyTestCase.java @@ -0,0 +1,133 @@ +/**
+ *
+ * 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.
+ */
+package org.apache.tuscany.sdo.test;
+
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.net.URL;
+
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+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.XMLHelper;
+import commonj.sdo.helper.XSDHelper;
+import junit.framework.TestCase;
+
+
+public class DefineOpenContentPropertyTestCase extends TestCase {
+ private final String TEST_MODEL = "/open.xsd";
+ private final String TEST_NAMESPACE = "http://www.example.com/open";
+ private final String TEST_DATA = "/openContentProperty.xml";
+
+ private TypeHelper typeHelper;
+ private XSDHelper xsdHelper;
+ private XMLHelper xmlHelper;
+ private DataFactory dataFactory;
+
+ public void testDefineOpenContentProperty() throws IOException {
+ Type quoteType = typeHelper.getType(TEST_NAMESPACE, "OpenQuote");
+ DataObject quote = dataFactory.create(quoteType);
+
+ Property symbolProperty = quoteType.getProperty("symbol");
+ assertFalse(symbolProperty.isOpenContent());
+
+ quote.setString(symbolProperty, "s1");
+
+ Property companyProperty = typeHelper.getOpenContentProperty(TEST_NAMESPACE, "company");
+ assertTrue(companyProperty.isOpenContent());
+
+ DataObject company = quote.createDataObject(companyProperty);
+ company.setString("name", "FlyByNightTechnology");
+
+ Property priceProperty = typeHelper.getOpenContentProperty(TEST_NAMESPACE, "price");
+ assertTrue(priceProperty.isOpenContent());
+
+ quote.getList(priceProperty).add(new BigDecimal("1000.0"));
+
+ // Define a new SDO open content property with simple type
+ DataObject p = dataFactory.create("commonj.sdo", "Property");
+ p.set("type", typeHelper.getType("commonj.sdo", "Decimal"));
+ p.set("name", "highPrice");
+ Property highPrice = typeHelper.defineOpenContentProperty(TEST_NAMESPACE, p);
+ assertTrue(highPrice.isOpenContent());
+
+ quote.setBigDecimal(highPrice, new BigDecimal("1100.0"));
+
+ // Define a new SDO open content property with complex type
+ DataObject mutualFundQuotePropertyDef = dataFactory.create("commonj.sdo", "Property");
+ mutualFundQuotePropertyDef.set("type", quoteType);
+ mutualFundQuotePropertyDef.set("name", "mutualFundQuote");
+ mutualFundQuotePropertyDef.setBoolean("containment", true);
+ Property mutualFundQuoteProperty = typeHelper.defineOpenContentProperty(TEST_NAMESPACE, mutualFundQuotePropertyDef);
+ assertTrue(mutualFundQuoteProperty.isOpenContent());
+
+ DataObject mutualFundQuote = quote.createDataObject(mutualFundQuoteProperty);
+ mutualFundQuote.setString("symbol", "mutual-1");
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ xmlHelper.save(quote, TEST_NAMESPACE, "openStockQuote", baos);
+
+ assertTrue(TestUtil.equalXmlFiles(new ByteArrayInputStream(baos.toByteArray()), getClass().getResource(TEST_DATA)));
+
+ // validate existing property condition
+ Property duplicateProp = typeHelper.defineOpenContentProperty(TEST_NAMESPACE, p);
+ assertTrue(highPrice.equals(duplicateProp));
+
+ // validate error condition, where new property exists with different type
+ boolean errorCondition = false;
+ try
+ {
+ p = dataFactory.create("commonj.sdo", "Property");
+ p.set("type", typeHelper.getType("commonj.sdo", "String"));
+ p.set("name", "highPrice");
+ highPrice = typeHelper.defineOpenContentProperty(TEST_NAMESPACE, p);
+ }
+ catch( IllegalArgumentException ex )
+ {
+ errorCondition = true;
+ }
+ assertTrue(errorCondition);
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ HelperContext hc = SDOUtil.createHelperContext();
+ typeHelper = hc.getTypeHelper();
+ dataFactory = hc.getDataFactory();
+ xsdHelper = hc.getXSDHelper();
+ xmlHelper = hc.getXMLHelper();
+
+ // Populate the meta data for the test (Stock Quote) model
+ URL url = getClass().getResource(TEST_MODEL);
+ InputStream inputStream = url.openStream();
+ xsdHelper.define(inputStream, url.toString());
+ inputStream.close();
+ }
+}
diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DefineTypeTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DefineTypeTestCase.java new file mode 100644 index 0000000000..5b3e814f69 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DefineTypeTestCase.java @@ -0,0 +1,704 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +import junit.framework.TestCase; + +import org.apache.tuscany.sdo.api.SDOUtil; + +import commonj.sdo.DataObject; +import commonj.sdo.Property; +import commonj.sdo.Sequence; +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; + +public class DefineTypeTestCase extends TestCase +{ + private static final String CUSTOMER1_XML = "/customer1.xml"; + private static final String CUSTOMER2_XML = "/customer2.xml"; + private static final String OPEN_XML = "/open2.xml"; + private static final String MIXED_XML = "/mixed2.xml"; + private static final String MIXEDOPEN_XML = "/mixedopen.xml"; + + HelperContext hc; + + protected void setUp() throws Exception { + super.setUp(); + hc = SDOUtil.createHelperContext(); + } + + public void testDefineTypeRoundTrip() throws Exception { + TypeHelper types = hc.getTypeHelper(); + DataFactory factory = hc.getDataFactory(); + XMLHelper xmlHelper = hc.getXMLHelper(); + + Type intType = types.getType("commonj.sdo", "Int"); + Type stringType = types.getType("commonj.sdo", "String"); + + Property xmlElementProp = hc.getXSDHelper().getGlobalProperty("commonj.sdo/xml", "xmlElement", false); + + // create a new Type for Customers + DataObject customerType = factory.create("commonj.sdo", + "Type"); + customerType.set("uri", "http://example.com/customer"); + customerType.set("name", "Customer"); + + // create a customer number property as an XSD attribute + DataObject custNumProperty = customerType.createDataObject("property"); + custNumProperty.set("name", "custNum"); + custNumProperty.set("type", intType); + custNumProperty.setBoolean(xmlElementProp, false); + + // create a first name property as an XSD attribute + DataObject firstNameProperty = + customerType.createDataObject("property"); + firstNameProperty.set("name", "firstName"); + firstNameProperty.set("type", stringType); + firstNameProperty.setBoolean(xmlElementProp, false); + + // create a last name property as an XSD attribute + DataObject lastNameProperty = customerType.createDataObject("property"); + lastNameProperty.set("name", "lastName"); + lastNameProperty.set("type", stringType); + lastNameProperty.setBoolean(xmlElementProp, false); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + xmlHelper.save(customerType, "commonj.sdo", "type", baos); + + ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); + XMLDocument xdoc = xmlHelper.load(bais); + + customerType = xdoc.getRootObject(); + + // now define the Customer type so that customers can be made + types.define(customerType); + + DataObject customer1 = factory.create("http://example.com/customer", + "Customer"); + + customer1.setInt("custNum", 1); + customer1.set("firstName", "John"); + customer1.set("lastName", "Adams"); + DataObject customer2 = factory.create("http://example.com/customer", + "Customer"); + customer2.setInt("custNum", 2); + customer2.set("firstName", "Jeremy"); + customer2.set("lastName", "Pavick"); + + assertNotNull(customer1); + Type type = customer1.getType(); + assertNotNull(type.getProperty("custNum")); + assertNotNull(type.getProperty("firstName")); + assertNotNull(type.getProperty("lastName")); + assertEquals(type.getProperty("custNum").getType(), intType); + assertEquals(type.getProperty("firstName").getType(), stringType); + assertEquals(type.getProperty("lastName").getType(), stringType); + + assertNotNull(customer2); + type = customer2.getType(); + assertNotNull(type.getProperty("custNum")); + assertNotNull(type.getProperty("firstName")); + assertNotNull(type.getProperty("lastName")); + assertEquals(type.getProperty("custNum").getType(), intType); + assertEquals(type.getProperty("firstName").getType(), stringType); + assertEquals(type.getProperty("lastName").getType(), stringType); + + baos = new ByteArrayOutputStream(); + xmlHelper.save( + customer1, + "http://example.com/customer", + "Customer", baos); + assertTrue( + TestUtil.equalXmlFiles( + new ByteArrayInputStream(baos.toByteArray()), + getClass().getResource(CUSTOMER1_XML))); + + baos = new ByteArrayOutputStream(); + xmlHelper.save( + customer2, + "http://example.com/customer", + "Customer", baos); + assertTrue( + TestUtil.equalXmlFiles( + new ByteArrayInputStream(baos.toByteArray()), + getClass().getResource(CUSTOMER2_XML))); + } + + public void testDefineType() throws Exception + { + TypeHelper types = hc.getTypeHelper(); + DataFactory factory = hc.getDataFactory(); + XMLHelper xmlHelper = hc.getXMLHelper(); + + Type intType = types.getType("commonj.sdo", "Int"); + Type stringType = types.getType("commonj.sdo", "String"); + + Property xmlElementProp = hc.getXSDHelper().getGlobalProperty("commonj.sdo/xml", "xmlElement", false); + + // create a new Type for Customers + DataObject customerType = factory.create("commonj.sdo", + "Type"); + customerType.set("uri", "http://example.com/customer"); + customerType.set("name", "Customer"); + + // create a customer number property + DataObject custNumProperty = customerType.createDataObject("property"); + custNumProperty.set("name", "custNum"); + custNumProperty.set("type", intType); + custNumProperty.setBoolean(xmlElementProp, false); + + // create a first name property + DataObject firstNameProperty = + customerType.createDataObject("property"); + firstNameProperty.set("name", "firstName"); + firstNameProperty.set("type", stringType); + firstNameProperty.setBoolean(xmlElementProp, false); + + // create a last name property + DataObject lastNameProperty = customerType.createDataObject("property"); + lastNameProperty.set("name", "lastName"); + lastNameProperty.set("type", stringType); + lastNameProperty.setBoolean(xmlElementProp, false); + + // now define the Customer type so that customers can be made + types.define(customerType); + + DataObject customer1 = factory.create("http://example.com/customer", + "Customer"); + + customer1.setInt("custNum", 0); + assertTrue(customer1.isSet("custNum")); + + customer1.setInt("custNum", 1); + customer1.set("firstName", "John"); + customer1.set("lastName", "Adams"); + DataObject customer2 = factory.create("http://example.com/customer", + "Customer"); + customer2.setInt("custNum", 2); + customer2.set("firstName", "Jeremy"); + customer2.set("lastName", "Pavick"); + + assertNotNull(customer1); + Type type = customer1.getType(); + assertNotNull(type.getProperty("custNum")); + assertNotNull(type.getProperty("firstName")); + assertNotNull(type.getProperty("lastName")); + assertEquals(type.getProperty("custNum").getType(), intType); + assertEquals(type.getProperty("firstName").getType(), stringType); + assertEquals(type.getProperty("lastName").getType(), stringType); + + assertNotNull(customer2); + assertNotNull(types.getOpenContentProperty("http://example.com/customer", "customer")); + + type = customer2.getType(); + assertNotNull(type.getProperty("custNum")); + assertNotNull(type.getProperty("firstName")); + assertNotNull(type.getProperty("lastName")); + assertEquals(type.getProperty("custNum").getType(), intType); + assertEquals(type.getProperty("firstName").getType(), stringType); + assertEquals(type.getProperty("lastName").getType(), stringType); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + xmlHelper.save( + customer1, + "http://example.com/customer", + "Customer", baos); + assertTrue( + TestUtil.equalXmlFiles( + new ByteArrayInputStream(baos.toByteArray()), + getClass().getResource(CUSTOMER1_XML))); + + baos = new ByteArrayOutputStream(); + xmlHelper.save( + customer2, + "http://example.com/customer", + "Customer", baos); + assertTrue( + TestUtil.equalXmlFiles( + new ByteArrayInputStream(baos.toByteArray()), + getClass().getResource(CUSTOMER2_XML))); + } + + public void testDefineDataType() throws Exception + { + TypeHelper types = hc.getTypeHelper(); + DataFactory factory = hc.getDataFactory(); + XMLHelper xmlHelper = hc.getXMLHelper(); + XSDHelper xsdHelper = hc.getXSDHelper(); + + Property xmlElementProp = hc.getXSDHelper().getGlobalProperty("commonj.sdo/xml", "xmlElement", false); + Property javaClassProperty = xsdHelper.getGlobalProperty("commonj.sdo/java", "javaClass", false); + + // create a data types + DataObject intType = factory.create("commonj.sdo", "Type"); + intType.set("uri", "http://example.com/customer"); + intType.set("name", "MyIntType"); + intType.setBoolean("dataType", true); + intType.set(javaClassProperty, "int"); + + DataObject stringType = factory.create("commonj.sdo", "Type"); + stringType.set("uri", "http://example.com/customer"); + stringType.set("name", "MyStringType"); + stringType.setBoolean("dataType", true); + stringType.set(javaClassProperty, "java.lang.String"); + + // create a new Type for Customers + DataObject customerType = factory.create("commonj.sdo", + "Type"); + customerType.set("uri", "http://example.com/customer"); + customerType.set("name", "Customer"); + + // create a customer number property + DataObject custNumProperty = customerType.createDataObject("property"); + custNumProperty.set("name", "custNum"); + custNumProperty.set("type", intType); + custNumProperty.setBoolean(xmlElementProp, false); + + // create a first name property + DataObject firstNameProperty = + customerType.createDataObject("property"); + firstNameProperty.set("name", "firstName"); + firstNameProperty.set("type", stringType); + firstNameProperty.setBoolean(xmlElementProp, false); + + // create a last name property + DataObject lastNameProperty = customerType.createDataObject("property"); + lastNameProperty.set("name", "lastName"); + lastNameProperty.set("type", stringType); + lastNameProperty.setBoolean(xmlElementProp, false); + + // now define the Customer type so that customers can be made + types.define(customerType); + + DataObject customer1 = factory.create("http://example.com/customer", + "Customer"); + + customer1.setInt("custNum", 1); + customer1.set("firstName", "John"); + customer1.set("lastName", "Adams"); + DataObject customer2 = factory.create("http://example.com/customer", + "Customer"); + customer2.setInt("custNum", 2); + customer2.set("firstName", "Jeremy"); + customer2.set("lastName", "Pavick"); + + assertNotNull(customer1); + Type type = customer1.getType(); + assertNotNull(type.getProperty("custNum")); + assertNotNull(type.getProperty("firstName")); + assertNotNull(type.getProperty("lastName")); + assertNotNull(type.getProperty("custNum")); + assertNotNull(type.getProperty("firstName")); + assertNotNull(type.getProperty("lastName")); + + type = type.getProperty("custNum").getType(); + assertEquals(type.getURI(), "http://example.com/customer"); + assertEquals(type.getName(), "MyIntType"); + assertTrue(type.isDataType()); + + assertNotNull(customer2); + assertNotNull(types.getOpenContentProperty("http://example.com/customer", "customer")); + + type = customer2.getType(); + assertNotNull(type.getProperty("custNum")); + assertNotNull(type.getProperty("firstName")); + assertNotNull(type.getProperty("lastName")); + assertNotNull(type.getProperty("custNum")); + assertNotNull(type.getProperty("firstName")); + assertNotNull(type.getProperty("lastName")); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + xmlHelper.save( + customer1, + "http://example.com/customer", + "Customer", baos); + assertTrue( + TestUtil.equalXmlFiles( + new ByteArrayInputStream(baos.toByteArray()), + getClass().getResource(CUSTOMER1_XML))); + + baos = new ByteArrayOutputStream(); + xmlHelper.save( + customer2, + "http://example.com/customer", + "Customer", baos); + assertTrue( + TestUtil.equalXmlFiles( + new ByteArrayInputStream(baos.toByteArray()), + getClass().getResource(CUSTOMER2_XML))); + } + + public void testFastDefineType() throws Exception + { + TypeHelper types = hc.getTypeHelper(); + DataFactory factory = hc.getDataFactory(); + XMLHelper xmlHelper = hc.getXMLHelper(); + + Type intType = types.getType("commonj.sdo", "Int"); + Type stringType = types.getType("commonj.sdo", "String"); + + // create a new Type for Customers + Type customerType = SDOUtil.createType(hc, "http://example.com/customer", "Customer", false); + + // create a customer number property + Property custNumProperty = SDOUtil.createProperty(customerType, "custNum", intType); + SDOUtil.setPropertyXMLKind(custNumProperty, false); + + // create a first name property + Property firstNameProperty = SDOUtil.createProperty(customerType, "firstName", stringType); + SDOUtil.setPropertyXMLKind(firstNameProperty, false); + + // create a last name property + Property lastNameProperty = SDOUtil.createProperty(customerType, "lastName", stringType); + SDOUtil.setPropertyXMLKind(lastNameProperty, false); + + DataObject customer1 = factory.create("http://example.com/customer", + "Customer"); + customer1.setInt("custNum", 1); + customer1.set("firstName", "John"); + customer1.set("lastName", "Adams"); + DataObject customer2 = factory.create("http://example.com/customer", + "Customer"); + customer2.setInt("custNum", 2); + customer2.set("firstName", "Jeremy"); + customer2.set("lastName", "Pavick"); + + assertNotNull(customer1); + Type type = customer1.getType(); + assertNotNull(type.getProperty("custNum")); + assertNotNull(type.getProperty("firstName")); + assertNotNull(type.getProperty("lastName")); + assertEquals(type.getProperty("custNum").getType(), intType); + assertEquals(type.getProperty("firstName").getType(), stringType); + assertEquals(type.getProperty("lastName").getType(), stringType); + + assertNotNull(customer2); + type = customer2.getType(); + assertNotNull(type.getProperty("custNum")); + assertNotNull(type.getProperty("firstName")); + assertNotNull(type.getProperty("lastName")); + assertEquals(type.getProperty("custNum").getType(), intType); + assertEquals(type.getProperty("firstName").getType(), stringType); + assertEquals(type.getProperty("lastName").getType(), stringType); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + xmlHelper.save( + customer1, + "http://example.com/customer", + "Customer", baos); + assertTrue( + TestUtil.equalXmlFiles( + new ByteArrayInputStream(baos.toByteArray()), + getClass().getResource(CUSTOMER1_XML))); + + baos = new ByteArrayOutputStream(); + xmlHelper.save( + customer2, + "http://example.com/customer", + "Customer", baos); + assertTrue( + TestUtil.equalXmlFiles( + new ByteArrayInputStream(baos.toByteArray()), + getClass().getResource(CUSTOMER2_XML))); + } + + public void testDefineSequencedType() throws Exception + { + + TypeHelper types = hc.getTypeHelper(); + DataFactory factory = hc.getDataFactory(); + XMLHelper xmlHelper = hc.getXMLHelper(); + + Type stringType = types.getType("commonj.sdo", "String"); + Type decimalType = types.getType("commonj.sdo", "Decimal"); + + // Define a new mixed type - MixedQuote + DataObject mixedQuoteType = factory.create("commonj.sdo", "Type"); + mixedQuoteType.set("uri", "http://www.example.com/mixed"); + mixedQuoteType.set("name", "MixedQuote"); + mixedQuoteType.set("sequenced", Boolean.TRUE); + + DataObject symbolProperty = mixedQuoteType.createDataObject("property"); + symbolProperty.set("name", "symbol"); + symbolProperty.set("type", stringType); + + DataObject companyNameProperty = mixedQuoteType.createDataObject("property"); + companyNameProperty.set("name", "companyName"); + companyNameProperty.set("type", stringType); + + DataObject priceProperty = mixedQuoteType.createDataObject("property"); + priceProperty.set("name", "price"); + priceProperty.set("type", decimalType); + + DataObject quotesProperty = mixedQuoteType.createDataObject("property"); + quotesProperty.set("name", "quotes"); + quotesProperty.set("type", mixedQuoteType); + quotesProperty.set("many", Boolean.TRUE); + quotesProperty.set("containment", Boolean.TRUE); + + types.define(mixedQuoteType); + + DataObject quote = factory.create("http://www.example.com/mixed", "MixedQuote"); + + assertTrue(quote.getType().isSequenced()); + + Sequence sequence = quote.getSequence(); + + sequence.addText("\n "); + + quote.setString("symbol", "fbnt"); + + sequence.addText("\n "); + + quote.setString("companyName", "FlyByNightTechnology"); + + sequence.addText("\n some text\n "); + + DataObject child = quote.createDataObject("quotes"); + child.setBigDecimal("price", new BigDecimal("2000.0")); + + sequence.addText("\n more text\n "); + + // quote.setBigDecimal("price", new BigDecimal("1000.0")); + sequence.add("price", new BigDecimal("1000.0")); + + sequence.addText("\n"); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + xmlHelper.save(quote, "http://www.example.com/mixed", "mixedStockQuote", baos); + assertTrue(TestUtil.equalXmlFiles(new ByteArrayInputStream(baos.toByteArray()), getClass().getResource(MIXED_XML))); + } + + public void testDefineSequencedOpenType() throws Exception + { + TypeHelper types = hc.getTypeHelper(); + DataFactory factory = hc.getDataFactory(); + XMLHelper xmlHelper = hc.getXMLHelper(); + + Type stringType = types.getType("commonj.sdo", "String"); + Type decimalType = types.getType("commonj.sdo", "Decimal"); + + // Define a new mixed type - MixedQuote + DataObject mixedQuoteType = factory.create("commonj.sdo", "Type"); + mixedQuoteType.set("uri", "http://www.example.com/mixed"); + mixedQuoteType.set("name", "MixedOpenQuote"); + mixedQuoteType.set("sequenced", Boolean.TRUE); + mixedQuoteType.set("open", Boolean.TRUE); + +// DataObject symbolProperty = mixedQuoteType.createDataObject("property"); +// symbolProperty.set("name", "symbol"); +// symbolProperty.set("type", stringType); + + DataObject companyNameProperty = mixedQuoteType.createDataObject("property"); + companyNameProperty.set("name", "companyName"); + companyNameProperty.set("type", stringType); + + DataObject priceProperty = mixedQuoteType.createDataObject("property"); + priceProperty.set("name", "price"); + priceProperty.set("type", decimalType); + + DataObject quotesProperty = mixedQuoteType.createDataObject("property"); + quotesProperty.set("name", "quotes"); + quotesProperty.set("type", mixedQuoteType); + quotesProperty.set("many", Boolean.TRUE); + quotesProperty.set("containment", Boolean.TRUE); + + types.define(mixedQuoteType); + + // Define a global type + DataObject globalType = factory.create("commonj.sdo", "Type"); + globalType.set("uri", "http://www.example.com/open"); + // Don't set the type's name - null is used for types containing global properties. + + DataObject symbolProperty = globalType.createDataObject("property"); + symbolProperty.set("name", "symbol"); + symbolProperty.set("type", stringType); + symbolProperty.set("containment", Boolean.TRUE); + + types.define(globalType); + + DataObject quote = factory.create("http://www.example.com/mixed", "MixedOpenQuote"); + + assertTrue(quote.getType().isSequenced()); + + Sequence sequence = quote.getSequence(); + + sequence.addText("\n "); + + Type definedGlobalType = types.getType("http://www.example.com/open", "DocumentRoot"); + + Property definedSymbolProperty = definedGlobalType.getProperty("symbol"); + quote.setString(definedSymbolProperty, "fbnt"); + + sequence.addText("\n "); + + quote.setString("companyName", "FlyByNightTechnology"); + + sequence.addText("\n some text\n "); + + DataObject child = quote.createDataObject("quotes"); + child.setBigDecimal("price", new BigDecimal("2000.0")); + + sequence.addText("\n more text\n "); + + // quote.setBigDecimal("price", new BigDecimal("1000.0")); + sequence.add("price", new BigDecimal("1000.0")); + + sequence.addText("\n"); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + xmlHelper.save(quote, "http://www.example.com/mixed", "mixedOpenStockQuote", baos); + assertTrue(TestUtil.equalXmlFiles(new ByteArrayInputStream(baos.toByteArray()), getClass().getResource(MIXEDOPEN_XML))); + } + + + public void testDefineOpenType() throws Exception + { + TypeHelper types = hc.getTypeHelper(); + DataFactory factory = hc.getDataFactory(); + XMLHelper xmlHelper = hc.getXMLHelper(); + + Type stringType = types.getType("commonj.sdo", "String"); + Type decimalType = types.getType("commonj.sdo", "Decimal"); + + Property xmlElementProp = hc.getXSDHelper().getGlobalProperty("commonj.sdo/xml", "xmlElement", false); + + // Define a new open type - OpenQuote + DataObject openQuoteType = factory.create("commonj.sdo", "Type"); + openQuoteType.set("uri", "http://www.example.com/open"); + openQuoteType.set("name", "OpenQuote"); + openQuoteType.set("open", Boolean.TRUE); + openQuoteType.setBoolean("open", true); + + types.define(openQuoteType); + + // Define new type - CompanyType + DataObject companyType = factory.create("commonj.sdo", "Type"); + companyType.set("uri", "http://www.example.com/open"); + companyType.set("name", "CompanyType"); + + // Create CompanyType property - "name" as an XSD attribute + DataObject nameProperty = companyType.createDataObject("property"); + nameProperty.set("name", "name"); + nameProperty.set("type", stringType); + nameProperty.set("containment", Boolean.TRUE); + nameProperty.setBoolean(xmlElementProp, false); + + types.define(companyType); + + // Define open content property - company + DataObject symbolProperty = factory.create("commonj.sdo", "Property"); + symbolProperty.set("name", "symbol"); + symbolProperty.set("type", stringType); + types.defineOpenContentProperty("http://www.example.com/open", symbolProperty); + + // Define open content property - company + DataObject companyProperty = factory.create("commonj.sdo", "Property"); + companyProperty.set("name", "company"); + companyProperty.set("type", companyType); + companyProperty.set("containment", Boolean.TRUE); + types.defineOpenContentProperty("http://www.example.com/open", companyProperty); + + // Define open content property - price + DataObject priceProperty = factory.create("commonj.sdo", "Property"); + priceProperty.set("name", "price"); + priceProperty.set("type", decimalType); + types.defineOpenContentProperty("http://www.example.com/open", priceProperty); + + // Create DataObject instances + DataObject openQuote = factory.create("http://www.example.com/open", "OpenQuote"); + assertTrue(openQuote.getType().isOpen()); + + Property definedSymbolProperty = types.getOpenContentProperty("http://www.example.com/open", "symbol"); + openQuote.set(definedSymbolProperty, "s1"); + + Property definedCompanyProperty = types.getOpenContentProperty("http://www.example.com/open", "company"); + DataObject company = openQuote.createDataObject(definedCompanyProperty); + company.setString("name", "FlyByNightTechnology"); + + Property definedPriceProperty = types.getOpenContentProperty("http://www.example.com/open", "price"); + openQuote.setBigDecimal(definedPriceProperty, new BigDecimal("1000.0")); + + assertEquals(definedPriceProperty.getType(), decimalType); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + xmlHelper.save( + openQuote, + "http://www.example.com/open", + "openStockQuote", baos); + assertTrue( + TestUtil.equalXmlFiles( + new ByteArrayInputStream(baos.toByteArray()), + getClass().getResource(OPEN_XML))); + } + +/** + * Type T1 has property t1p of type T2, type T2 has property t2p of type T1. + * Ensure that the typehelper can handle this circularity + */ +public void testInterdependentTypes() + { + DataObject t1 = DataFactory.INSTANCE.create("commonj.sdo", "Type"); + DataObject t1p = DataFactory.INSTANCE.create("commonj.sdo", "Property"); + DataObject t2 = DataFactory.INSTANCE.create("commonj.sdo", "Type"); + DataObject t2p = DataFactory.INSTANCE.create("commonj.sdo", "Property"); + + t1.set("name", "T1"); + t1.set("uri", "foo"); + t2.set("name", "T2"); + t2.set("uri", "foo"); + + t1.getList("property").add(t1p); + t2.getList("property").add(t2p); + t1p.set("name", "t1p"); + t1p.set("type", t2); + t2p.set("name", "t2p"); + t2p.set("type", t1); + + List ts = new ArrayList(); + ts.add(t1); + ts.add(t2); + List types = hc.getTypeHelper().define(ts); + + Type first = (Type)types.get(0); + Type second = (Type)types.get(1); + + Type firstsPropsType = ((Property)first.getProperties().get(0)).getType(); + Type secondPropsType = ((Property)second.getProperties().get(0)).getType(); + + assertNotNull(first); + assertNotNull(second); + assertEquals(first, secondPropsType); + assertEquals(second, firstsPropsType); + + } + +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DeserializationNoSchemaTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DeserializationNoSchemaTestCase.java new file mode 100644 index 0000000000..5bde232a72 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DeserializationNoSchemaTestCase.java @@ -0,0 +1,124 @@ +/**
+ *
+ * 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.
+ */
+package org.apache.tuscany.sdo.test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.net.URL;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.helper.HelperContext;
+import commonj.sdo.helper.TypeHelper;
+import commonj.sdo.helper.XMLDocument;
+import commonj.sdo.helper.XMLHelper;
+
+
+public class DeserializationNoSchemaTestCase extends TestCase
+{
+ HelperContext hc;
+
+ TypeHelper th;
+
+ private final String xmlStr =
+ "<?xml version=\"1.0\" encoding=\"ASCII\"?> " +
+ "<simple:stockQuote xmlns:simple=\"www.example.com/simple\"> " +
+ "<symbol>fbnt</symbol> " +
+ "<companyName>FlyByNightTechnology</companyName> " +
+ "<price>1000.0</price> " +
+ "<open1>1000.0</open1> " +
+ "<high>1000.0</high> " +
+ "<low>1000.0</low> " +
+ "<volume>1000.0</volume> " +
+ "<change1>1000.0</change1> " +
+ "<quotes> " +
+ "<price>2000.0</price> " +
+ "</quotes> " +
+ "</simple:stockQuote>";
+
+ public void testLoadQuoteXMLDoc() throws IOException
+ {
+ XMLHelper xmlHelper = hc.getXMLHelper();
+/* URL url = getClass().getResource("/quote.xml");
+ InputStream inputStream = url.openStream();*/
+ XMLDocument doc = xmlHelper.load(xmlStr);
+ DataObject root = doc.getRootObject();
+
+ List symbols = root.getList("symbol");
+ DataObject symbol = (DataObject)symbols.get(0);
+
+ String seqValue = (String)symbol.getSequence().getValue(0);
+ assertEquals(seqValue, "fbnt");
+
+ //String symbol = root.getString("symbol");
+ //System.out.println("symbol: " + symbol);
+ }
+
+ public void testAnyTypeContainer() throws Exception
+ {
+ HelperContext hc = SDOUtil.createHelperContext();
+
+ URL url = getClass().getResource("/simple.xsd");
+ InputStream inputStream = url.openStream();
+ hc.getXSDHelper().define(inputStream, url.toString());
+
+ XMLHelper xmlHelper = hc.getXMLHelper();
+ url = getClass().getResource("/quoteInSOAP.xml");
+ inputStream = url.openStream();
+ XMLDocument doc = xmlHelper.load(inputStream);
+ DataObject root = doc.getRootObject();
+ DataObject body = (DataObject)root.getList("Body").get(0);
+ DataObject stockQuote = (DataObject)body.getList("stockQuote").get(0);
+
+ //xmlHelper.save(stockQuote, stockQuote.getType().getURI(), "stockQuote", System.out);
+
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = SDOUtil.createObjectOutputStream(bos, hc);
+ oos.writeObject(stockQuote);
+ oos.close();
+ bos.close();
+
+ ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
+ ObjectInputStream ois = SDOUtil.createObjectInputStream(bis, hc);
+ DataObject objectCopy = (DataObject)ois.readObject();
+ ois.close();
+ bis.close();
+
+ assertEquals(objectCopy.getString("symbol"), "fbnt");
+
+ //xmlHelper.save(objectCopy, stockQuote.getType().getURI(), "stockQuote", System.out);
+ }
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ hc = SDOUtil.createHelperContext();
+ th = hc.getTypeHelper();
+ }
+}
diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DotNameTest.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DotNameTest.java new file mode 100644 index 0000000000..476f34c328 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DotNameTest.java @@ -0,0 +1,78 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +import junit.framework.TestCase; + +import org.apache.tuscany.sdo.util.SDOUtil; + +import commonj.sdo.DataObject; +import commonj.sdo.Type; +import commonj.sdo.helper.DataFactory; +import commonj.sdo.helper.HelperContext; +import commonj.sdo.helper.TypeHelper; + + +public class DotNameTest extends TestCase { + private final String TEST_MODEL = "/dotNames.xsd"; + private final String TEST_NAMESPACE = "http://www.example.com/dotNames"; + private HelperContext hc; + private TypeHelper th; + private DataFactory df; + + /** + * Simple Dynamic SDO 2 test. + */ + public void testDynamic() throws IOException { + Type quoteType = th.getType(TEST_NAMESPACE, "DotNameType"); + DataObject quote = df.create(quoteType); + + + quote.getList("property.2.1").add(TEST_NAMESPACE); + assertTrue(quote.isSet("property.2.1")); + assertSame(quote.get("property.2.1.0"), TEST_NAMESPACE); + quote.getList("foo.bar").add(TEST_NAMESPACE); + assertTrue(quote.isSet("foo.bar")); + assertSame(quote.get("foo.bar.0"), TEST_NAMESPACE); + } + + + protected void setUp() throws Exception { + super.setUp(); + + // Populate the meta data for the test (Stock Quote) model + URL url = getClass().getResource(TEST_MODEL); + hc = SDOUtil.createHelperContext(); + th = hc.getTypeHelper(); + df = hc.getDataFactory(); + + InputStream inputStream = url.openStream(); + hc.getXSDHelper().define(inputStream, url.toString()); + inputStream.close(); + + + } + +}
\ No newline at end of file diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DynamicTypesComparisonTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DynamicTypesComparisonTestCase.java new file mode 100644 index 0000000000..1a9deaf775 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/DynamicTypesComparisonTestCase.java @@ -0,0 +1,256 @@ +/**
+ *
+ * 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.
+ */
+package org.apache.tuscany.sdo.test;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Sequence;
+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;
+
+/**
+ * Test to compare data objects created with SDO API with one created from XML
+ */
+public class DynamicTypesComparisonTestCase extends TestCase {
+ private final String COMMONJ_SDO = "commonj.sdo";
+
+ private final String DYNAMIC_ROOT_TYPE_0 = "TestType0";
+
+ private final String DYNAMIC_TYPES_SCHEMA_STRING = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<xsd:schema\n"
+ + " targetNamespace=\"http://www.example.com/dynamicTypesFromSchemaSimple\"\n"
+ + " xmlns:dtfs=\"http://www.example.com/dynamicTypesFromSchemaSimple\"\n"
+ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n" + " \n"
+ + " <xsd:complexType name=\"TestType0\" mixed=\"true\">\n" + " <xsd:sequence>\n"
+ + " <xsd:element name=\"aString\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"xsd:string\"/>\n"
+ + " <xsd:element name=\"aBoolean\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"xsd:boolean\"/>\n"
+ + " <xsd:element name=\"aFloat\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"xsd:float\"/>\n"
+ + " </xsd:sequence>\n" + " </xsd:complexType>\n" + " \n"
+ + " <xsd:element name=\"testElement0\" type=\"dtfs:TestType0\"/>\n" + " \n" + "</xsd:schema>\n";
+
+ private final String DYNAMIC_TYPES_URI = "http://www.example.com/dynamicTypesFromSchemaSimple";
+
+ private final String SDO_FROM_API_AND_DYN = "object created with API with dynamic type ";
+
+ private final String SDO_FROM_API_AND_REF = "object created with API with type from XSD";
+
+ private final String SDO_FROM_XML_AND_REF = "object created with XML with type from XSD";
+
+ private final String TEST_XML_DOC_0_STRING = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ + "<dtfs:testElement0 xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
+ + " xmlns:dtfs=\"http://www.example.com/dynamicTypesFromSchemaSimple\">\n"
+ + " <aString>This is a repeated string.</aString>\n" + " <aString>This is a repeated string.</aString>\n"
+ + " <aBoolean>true</aBoolean>\n" + " <aBoolean>false</aBoolean>\n" + " <aBoolean>true</aBoolean>\n"
+ + " <aBoolean>1</aBoolean>\n" + " <aBoolean>0</aBoolean>\n" + " <aFloat>0</aFloat>\n"
+ + " <aFloat>12.5</aFloat>\n" + " <aFloat>0</aFloat>\n" + "</dtfs:testElement0>\n";
+
+ private void comparePropertyObjects(String propName, String name1, String name2, Object propObj1, Object propObj2) {
+ if (propObj1 == null) {
+ if (propObj2 != null) {
+ localFail("property " + propName + " for " + name1 + " was null but " + name2 + " was '" + propObj2
+ + "'");
+ }
+ } else if (propObj2 == null) {
+ localFail("property " + propName + " for " + name2 + " was null but " + name1 + " was '" + propObj1 + "'");
+ } else {
+ if (!propObj1.equals(propObj2)) {
+ localFail("property " + propName + " for " + name1 + " was '" + propObj1 + "' but " + name2 + " was '"
+ + propObj2 + "'");
+ }
+ }
+ }
+
+ private void compareSequencesIgnoringWhitespace(String name1, String name2, Sequence sequence1, Sequence sequence2) {
+ if (sequence1 == null) {
+ if (sequence2 != null) {
+ localFail("sequence for " + name1 + " was null but " + name2 + " was not null");
+ }
+ } else if (sequence2 == null) {
+ localFail("sequence for " + name2 + " was null but " + name1 + " was not null");
+ } else {
+ List trimmedSeq1 = new ArrayList();
+ List trimmedSeq2 = new ArrayList();
+ trimWhitespaceFromSequence(trimmedSeq1, sequence1);
+ trimWhitespaceFromSequence(trimmedSeq2, sequence2);
+ int size1 = trimmedSeq1.size();
+ int size2 = trimmedSeq2.size();
+ if (size1 != size2) {
+ localFail("lengths of trimmed sequences differ: " + name1 + " was " + size1 + ", " + name2 + " was "
+ + size2);
+ } else {
+ Object[] objArr1 = trimmedSeq1.toArray();
+ Object[] objArr2 = trimmedSeq2.toArray();
+ for (int i = 0; i < size1; i++) {
+ Object obj1 = objArr1[i];
+ Object obj2 = objArr2[i];
+ if (obj1 == null) {
+ if (obj2 != null) {
+ localFail("sequence for " + name1 + " had null element for which " + name2 + " had '" + obj2
+ + "'");
+ }
+ } else if (obj2 == null) {
+ localFail("sequence for " + name2 + " had null element for which " + name1 + " had '" + obj1 + "'");
+ } else {
+ if (!obj1.equals(obj2)) {
+ localFail("sequences did not match: " + name1 + " had '" + obj1 + "' but " + name2 + " had '"
+ + obj2 + "'");
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private void getAndCompareProperties(String propName, DataObject xmlAndRefTypDO, DataObject apiAndDynTypDO,
+ DataObject apiAndRefTypDO) {
+ Object xmlRefProperty = xmlAndRefTypDO.get(propName);
+ Object apiDynProperty = apiAndDynTypDO.get(propName);
+ Object apiRefProperty = apiAndRefTypDO.get(propName);
+ comparePropertyObjects(propName, SDO_FROM_XML_AND_REF, SDO_FROM_API_AND_DYN, xmlRefProperty, apiDynProperty);
+ comparePropertyObjects(propName, SDO_FROM_XML_AND_REF, SDO_FROM_API_AND_REF, xmlRefProperty, apiRefProperty);
+ }
+
+ private void localFail(String message) {
+ // System.err.println(message);
+ fail(message);
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ private void specifyProperty(DataObject containingTypeDO, String nameString, Type typ, boolean isMany) {
+ DataObject subordinateProperty = containingTypeDO.createDataObject("property");
+ subordinateProperty.set("name", nameString);
+ subordinateProperty.set("type", typ);
+ subordinateProperty.setBoolean("many", isMany);
+ }
+
+ /**
+ * test #0 of Data Object primitive datatypes
+ */
+ public void testDynamicTypesGroup0DO() throws IOException {
+ HelperContext hcDO = SDOUtil.createHelperContext();
+
+ TypeHelper thDO = hcDO.getTypeHelper();
+ DataFactory dfDO = hcDO.getDataFactory();
+
+ // create a container object type
+ DataObject containerTypeDO = dfDO.create("commonj.sdo", "Type");
+ containerTypeDO.set("uri", DYNAMIC_TYPES_URI);
+ containerTypeDO.set("name", DYNAMIC_ROOT_TYPE_0);
+ containerTypeDO.set("sequenced", Boolean.TRUE);
+
+ specifyProperty(containerTypeDO, "aString", thDO.getType(COMMONJ_SDO, "String"), true);
+ specifyProperty(containerTypeDO, "aBoolean", thDO.getType(COMMONJ_SDO, "Boolean"), true);
+ specifyProperty(containerTypeDO, "aFloat", thDO.getType(COMMONJ_SDO, "Float"), true);
+
+ Type containerType = thDO.define(containerTypeDO);
+ assertNotNull(containerType);
+
+ DataObject doFromApiAndDynTyp = dfDO.create(containerType);
+ assertNotNull(doFromApiAndDynTyp);
+ doFromApiAndDynTyp.getList("aString").add("This is a repeated string.");
+ doFromApiAndDynTyp.getList("aString").add("This is a repeated string.");
+ doFromApiAndDynTyp.getList("aBoolean").add(new Boolean(true));
+ doFromApiAndDynTyp.getList("aBoolean").add(new Boolean(false));
+ doFromApiAndDynTyp.getList("aBoolean").add(new Boolean(true));
+ doFromApiAndDynTyp.getList("aBoolean").add(new Boolean(true));
+ doFromApiAndDynTyp.getList("aBoolean").add(new Boolean(false));
+ doFromApiAndDynTyp.getList("aFloat").add(new Float(0));
+ doFromApiAndDynTyp.getList("aFloat").add(new Float(12.5));
+ doFromApiAndDynTyp.getList("aFloat").add(new Float(0));
+
+ Type rootType = thDO.getType(DYNAMIC_TYPES_URI, DYNAMIC_ROOT_TYPE_0);
+ assertNotNull(rootType);
+ assertSame(containerType, rootType);
+
+ // now load xml to get a reference data object using schema
+ HelperContext hcRef = SDOUtil.createHelperContext();
+ XSDHelper xsdHelper = hcRef.getXSDHelper();
+ List typeList = xsdHelper.define(DYNAMIC_TYPES_SCHEMA_STRING);
+ assertNotNull(typeList);
+ TypeHelper thRef = hcRef.getTypeHelper();
+ Type rootTypeRef = thRef.getType(DYNAMIC_TYPES_URI, DYNAMIC_ROOT_TYPE_0);
+
+ assertNotNull(rootTypeRef);
+
+ XMLHelper xhRef = hcRef.getXMLHelper();
+ // XMLDocument docRef =
+ // xhRef.load(getClass().getResourceAsStream(TEST_XML_DOC_0));
+ XMLDocument docRef = xhRef.load(TEST_XML_DOC_0_STRING);
+ DataObject doFromXmlAndRefTyp = docRef.getRootObject();
+
+ assertNotNull(doFromXmlAndRefTyp);
+
+ // create a data object using dynamic API from reference type
+ DataFactory dfRef = hcRef.getDataFactory();
+ DataObject doFromApiAndRefTyp = dfRef.create(rootTypeRef);
+ assertNotNull(doFromApiAndRefTyp);
+ doFromApiAndRefTyp.getList("aString").add("This is a repeated string.");
+ doFromApiAndRefTyp.getList("aString").add("This is a repeated string.");
+ doFromApiAndRefTyp.getList("aBoolean").add(new Boolean(true));
+ doFromApiAndRefTyp.getList("aBoolean").add(new Boolean(false));
+ doFromApiAndRefTyp.getList("aBoolean").add(new Boolean(true));
+ doFromApiAndRefTyp.getList("aBoolean").add(new Boolean(true));
+ doFromApiAndRefTyp.getList("aBoolean").add(new Boolean(false));
+ doFromApiAndRefTyp.getList("aFloat").add(new Float(0));
+ doFromApiAndRefTyp.getList("aFloat").add(new Float(12.5));
+ doFromApiAndRefTyp.getList("aFloat").add(new Float(0));
+
+ getAndCompareProperties("aString", doFromXmlAndRefTyp, doFromApiAndDynTyp, doFromApiAndRefTyp);
+ getAndCompareProperties("aBoolean", doFromXmlAndRefTyp, doFromApiAndDynTyp, doFromApiAndRefTyp);
+ getAndCompareProperties("aFloat", doFromXmlAndRefTyp, doFromApiAndDynTyp, doFromApiAndRefTyp);
+ Sequence seqFromXmlAndRefTyp = doFromXmlAndRefTyp.getSequence();
+ Sequence seqFromApiAndDynTyp = doFromApiAndDynTyp.getSequence();
+ Sequence seqFromApiAndRefTyp = doFromApiAndRefTyp.getSequence();
+ compareSequencesIgnoringWhitespace(SDO_FROM_XML_AND_REF, SDO_FROM_API_AND_DYN, seqFromXmlAndRefTyp,
+ seqFromApiAndDynTyp);
+ compareSequencesIgnoringWhitespace(SDO_FROM_XML_AND_REF, SDO_FROM_API_AND_REF, seqFromXmlAndRefTyp,
+ seqFromApiAndRefTyp);
+ }
+
+ private void trimWhitespaceFromSequence(List trimmedSeq, Sequence sequence) {
+ if (sequence != null) {
+ for (int i = 0; i < sequence.size(); i++) {
+ Object obj = sequence.getValue(i);
+ if (obj instanceof String) {
+ String str = ((String) obj).trim();
+ if (str.length() > 0) {
+ trimmedSeq.add(str);
+ }
+ } else {
+ trimmedSeq.add(obj);
+ }
+ }
+ }
+ }
+}
diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ExpectedExceptionsTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ExpectedExceptionsTestCase.java new file mode 100644 index 0000000000..7674cda42b --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ExpectedExceptionsTestCase.java @@ -0,0 +1,1878 @@ +/**
+ *
+ * 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.
+ */
+package org.apache.tuscany.sdo.test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.List;
+
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import com.example.ExpectedException.ExpectedExceptionFactory;
+
+import commonj.sdo.DataGraph;
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+import commonj.sdo.Sequence;
+import commonj.sdo.Type;
+import commonj.sdo.helper.HelperContext;
+import commonj.sdo.helper.TypeHelper;
+
+import junit.framework.TestCase;
+
+/**
+ * Verifies the Exception related behavior which is explicitly identified in
+ * the 2.1 SDO Specification.
+ */
+public class ExpectedExceptionsTestCase extends TestCase {
+
+ private static final String TEST_URI = "http://example.com/ExpectedException";
+ private static final String TEST_TYPE_NAME = "ExpectedExceptionType";
+ private static final String SEQ_TYPE_NAME = "SequenceReadOnlyType";
+ private static boolean typeDefined = false;
+ private static HelperContext helperContext;
+ private static DataObject testDO;
+ private static DataObject seqDO;
+
+ /**
+ * Verifies the following statement.
+ * Get<T>(String path) will not throw exceptions other than ClassCastException
+ * if it is impossible to convert between the actual and expected types.
+ * Note: This test case will not be implmented because it is already covered
+ * by testCannnotConvertClassCastException.
+ */
+
+ public void testGetTStringClassCastExceptionOnly() {
+ // This test case will not be implemented.
+ }
+
+ /**
+ * Verifies the following statement.
+ * get<T>(Property property) throws an IllegalArgumentException when
+ * getInstanceProperties().contains(property) == false.
+ */
+ public void testGetViaPropertyIllegalArgumentException() {
+ DataObject invalidPropDO = helperContext.getDataFactory().create(TEST_URI, SEQ_TYPE_NAME);
+ Property invalidProp = invalidPropDO.getInstanceProperty("uniqueName");
+
+ try {
+ testDO.get(invalidProp);
+ fail("get(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("get(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBoolean(invalidProp);
+ fail("getBoolean(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBoolean(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getByte(invalidProp);
+ fail("getByte(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getByte(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getChar(invalidProp);
+ fail("getChar(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getChar(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDouble(invalidProp);
+ fail("getDouble(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDouble(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getFloat(invalidProp);
+ fail("getFloat(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getFloat(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getInt(invalidProp);
+ fail("getInt(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getInt(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getLong(invalidProp);
+ fail("getLong(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getLong(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getShort(invalidProp);
+ fail("getShort(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getShort(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBytes(invalidProp);
+ fail("getBytes(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBytes(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBigDecimal(invalidProp);
+ fail("getBigDecimal(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBigDecimal(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBigInteger(invalidProp);
+ fail("getBigInteger(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBigInteger(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDataObject(invalidProp);
+ fail("getDataObject(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDataObject(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDate(invalidProp);
+ fail("getDate(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDate(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getString(invalidProp);
+ fail("getString(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getString(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getList(invalidProp);
+ fail("getList(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(propert)== false. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getList(Property property) should throw an IllegalArgumentException when getInstanceProperties().contains(property)== false. " + e.getClass().getName() + " was thrown.");
+ }
+ }
+
+ /**
+ * Verfies the following statement.
+ * get<T>(int propertyIndex) throws an IllegalArgumentException when
+ * propertIndex <0 or >= getInstanceProerties().size()
+ */
+ public void testGetViaIndexIllegalArgumentException() {
+ int numProps = testDO.getInstanceProperties().size();
+
+ try {
+ testDO.get(-1);
+ fail("get(-1) should throw an IllegalArgumentException. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("get(-1) should throw an IllegalArgumentException. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBoolean(-1);
+ fail("getBoolean(-1) should throw an IllegalArgumentException. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBoolean(-1) should throw an IllegalArgumentException. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getByte(-1);
+ fail("getByte(-1) should throw an IllegalArgumentException. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getByte(-1) should throw an IllegalArgumentException. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getChar(-1);
+ fail("getChar(-1) should throw an IllegalArgumentException. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getChar(-1) should throw an IllegalArgumentException. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDouble(-1);
+ fail("getDouble(-1) should throw an IllegalArgumentException. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDouble(-1) should throw an IllegalArgumentException. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getFloat(-1);
+ fail("getFloat(-1) should throw an IllegalArgumentException. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getFloat(-1) should throw an IllegalArgumentException. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getInt(-1);
+ fail("getInt(-1) should throw an IllegalArgumentException. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getInt(-1) should throw an IllegalArgumentException. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getLong(-1);
+ fail("getLong(-1) should throw an IllegalArgumentException. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getLong(-1) should throw an IllegalArgumentException. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getShort(-1);
+ fail("getShort(-1) should throw an IllegalArgumentException. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getShort(-1) should throw an IllegalArgumentException. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBytes(-1);
+ fail("getBytes(-1) should throw an IllegalArgumentException. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBytes(-1) should throw an IllegalArgumentException. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBigDecimal(-1);
+ fail("getBigDecimal(-1) should throw an IllegalArgumentException. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBigDecimal(-1) should throw an IllegalArgumentException. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBigInteger(-1);
+ fail("getBigInteger(-1) should throw an IllegalArgumentException. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBigInteger(-1) should throw an IllegalArgumentException. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDataObject(-1);
+ fail("getDataObject(-1) should throw an IllegalArgumentException. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDataObject(-1) should throw an IllegalArgumentException. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDate(-1);
+ fail("getDate(-1) should throw an IllegalArgumentException. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDate(-1) should throw an IllegalArgumentException. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getString(-1);
+ fail("getString(-1) should throw an IllegalArgumentException. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getString(-1) should throw an IllegalArgumentException. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getList(-1);
+ fail("getList(-1) should throw an IllegalArgumentException. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getList(-1) should throw an IllegalArgumentException. " + e.getClass().getName() + " was thrown.");
+ }
+
+ try {
+ testDO.get(numProps);
+ fail("get(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("get(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBoolean(numProps);
+ fail("getBoolean(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBoolean(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getByte(numProps);
+ fail("getByte(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getByte(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getChar(numProps);
+ fail("getChar(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getChar(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDouble(numProps);
+ fail("getDouble(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDouble(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getFloat(numProps);
+ fail("getFloat(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getFloat(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getInt(numProps);
+ fail("getInt(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getInt(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getLong(numProps);
+ fail("getLong(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getLong(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getShort(numProps);
+ fail("getShort(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getShort(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBytes(numProps);
+ fail("getBytes(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBytes(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBigDecimal(numProps);
+ fail("getBigDecimal(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBigDecimal(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBigInteger(numProps);
+ fail("getBigInteger(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBigInteger(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDataObject(numProps);
+ fail("getDataObject(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDataObject(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDate(numProps);
+ fail("getDate(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDate(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getString(numProps);
+ fail("getString(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getString(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getList(numProps);
+ fail("getList(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getList(int) should throw an IllegalArgumentException when int >= getInstanceProperties.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ }
+
+ /**
+ * Verifies the following statement.
+ * Using an Index out of range (index < 0 or >= getList(Property property).size())
+ * will result in an IndexOutOfBoundsException.
+ */
+ public void testListIndexOutOfBoundsException() {
+ List list = testDO.getList("listVal");
+
+// Not fixed in TUSCANY-578
+// try {
+// list.get(-1);
+// fail("list.get(-1) should throw an IndexOutOfBoundsException. No Exception was thrown.");
+// } catch (IndexOutOfBoundsException e) {
+// // Success - do nothing
+// } catch (Exception e) {
+// fail("list.get(-1) should throw an IndexOutOfBoundsException. " + e.getClass().getName() + " was thrown.");
+// }
+// try {
+// list.get(list.size());
+// fail("list.get(int) should throw an IndexOutOfBoundsException when int >= list.size(). No Exception was thrown.");
+// } catch (IndexOutOfBoundsException e) {
+// // Success - do nothing
+// } catch (Exception e) {
+// fail("list.get(int) should throw an IndexOutOfBoundsException when int >= list.size(). " + e.getClass().getName() + " was thrown.");
+// }
+// try {
+// list.remove(-1);
+// fail("list.remove(-1) should throw an IndexOutOfBoundsException. No Exception was thrown.");
+// } catch (IndexOutOfBoundsException e) {
+// // Success - do nothing
+// } catch (Exception e) {
+// fail("list.remove(-1) should throw an IndexOutOfBoundsException. " + e.getClass().getName() + " was thrown.");
+// }
+ try {
+ list.remove(list.size());
+ fail("list.remove(int) should throw an IndexOutOfBoundsException when int >= list.size(). No Exception was thrown.");
+ } catch (IndexOutOfBoundsException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("list.remove(int) should throw an IndexOutOfBoundsException when int >= list.size(). " + e.getClass().getName() + " was thrown.");
+ }
+ }
+
+ /**
+ * Verifies the following statement.
+ * Modification of a read-only property results in UnsupportedOperationException.
+ * This test case is for modifications done through the DataObject API.
+ */
+ public void testModifyReadOnlyUnsupportedOperationException() {
+ Property readOnlyProp = testDO.getInstanceProperty("readOnlyVal");
+ List properties = testDO.getInstanceProperties();
+ Property currProp;
+ int readOnlyIndex = -1, i = 0, size = properties.size();
+
+ // Verify the precondition
+ assertTrue("readOnlyVal should be read-only.", readOnlyProp.isReadOnly());
+
+ while (readOnlyIndex < 0 && i < size) {
+ currProp = (Property) properties.get(i);
+ if (currProp.equals(readOnlyProp))
+ readOnlyIndex = i;
+ i++;
+ }
+
+ try {
+ testDO.set("readOnlyVal", "NewValue");
+ fail("DataObject.set(string, value) should throw an UnsupportedOperationException when the Property represented by string is read-only. No Exception was thrown.");
+ } catch (UnsupportedOperationException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("DataObject.set(string, value) should throw an UnsupportedOperationException when the Property represented by string is read-only. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.set(readOnlyProp, "NewValue");
+ System.out.println("propname =" + readOnlyProp.getName());
+ fail("DataObject.set(property, value) should throw an UnsupportedOperationException when the Property represented by property is read-only. No Exception was thrown.");
+ } catch (UnsupportedOperationException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("DataObject.set(property, value) should throw an UnsupportedOperationException when the Property represented by property is read-only. " + e.getClass().getName() + " was thrown.");
+ }
+ assertTrue("The test case could not procede because the index of the read only Property was not found.", readOnlyIndex > -1);
+ try {
+ testDO.set(readOnlyIndex, "NewValue");
+ fail("DataObject.set(index, value) should throw an UnsupportedOperationException when the Property represented by index is read-only. No Exception was thrown.");
+ } catch (UnsupportedOperationException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("DataObject.set(index, value) should throw an UnsupportedOperationException when the Property represented by index is read-only. " + e.getClass().getName() + " was thrown.");
+ }
+
+ try {
+ testDO.unset("readOnlyVal");
+ fail("DataObject.unset(string) should throw an UnsupportedOperationException when the Property represented by string is read-only. No Exception was thrown.");
+ } catch (UnsupportedOperationException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("DataObject.unset(string) should throw an UnsupportedOperationException when the Property represented by string is read-only. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.unset(readOnlyProp);
+ fail("DataObject.unset(property) should throw an UnsupportedOperationException when the Property represented by property is read-only. No Exception was thrown.");
+ } catch (UnsupportedOperationException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("DataObject.unset(property) should throw an UnsupportedOperationException when the Property represented by property is read-only. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.unset(readOnlyIndex);
+ fail("DataObject.unset(index) should throw an UnsupportedOperationException when the Property represented by index is read-only. No Exception was thrown.");
+ } catch (UnsupportedOperationException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("DataObject.unset(index) should throw an UnsupportedOperationException when the Property represented by index is read-only. " + e.getClass().getName() + " was thrown.");
+ }
+ }
+
+ /**
+ * Verifies the following statement.
+ * Modification of a read-only property results in UnsupportedOperationException.
+ * This test case is for modification done through the List API.
+ */
+ public void testModifyReadOnlyUnsupportedOperationExceptionList() {
+ Property readOnlyProp = testDO.getInstanceProperty("readOnlyVal");
+ List properties = testDO.getInstanceProperties();
+ Property currProp;
+ int readOnlyIndex = -1, i = 0, size = properties.size();
+
+ while (readOnlyIndex < 0 && i < size) {
+ currProp = (Property) properties.get(i);
+ if (currProp.equals(readOnlyProp))
+ readOnlyIndex = i;
+ i++;
+ }
+
+// Not fixed in TUSCANY-578
+// try {
+// List temp = testDO.getList("readOnlyListVal");
+// temp.add("String to add.");
+// fail("DataObject.getList(path).add(value) should throw an UnsupportedOperationException when the Property represented by path is read-only. No Exception was thrown.");
+// } catch (UnsupportedOperationException e) {
+// // Success - do nothing
+// } catch (Exception e) {
+// fail("DataObject.getList(path).add(value) should throw an IllegalArgumentException when the Property represented by path is read-only. " + e.getClass().getName() + " was thrown.");
+// }
+// try {
+// Sequence temp = testDO.getSequence();
+// temp.add("readOnlyListVal", "String to add.");
+// fail("DataObject.getSequence().add(path, value) should throw an UnsupportedOperationException when the Property represtend by path is read-only. No Exception was thrown.");
+// } catch (UnsupportedOperationException e) {
+// // Success - do nothing
+// } catch (Exception e) {
+// fail("DataObject.getSequence().add(path, value) should throw an UnsupportedOperationException when the Property represtend by path is read-only. " + e.getClass().getName() + " was thrown.");
+// }
+ }
+
+ /**
+ * Verifies the following statement.
+ * Modification of a read-only property results in UnsupportedOperationException.
+ * This test case is for modification done through the List API.
+ */
+ public void testModifyReadOnlyUnsupportedOperationExceptionSequence() {
+ Property readOnlyProp = seqDO.getInstanceProperty("readOnlyVal");
+ List properties = seqDO.getInstanceProperties();
+ Property currProp;
+ int readOnlyIndex = -1, i = 0, size = properties.size();
+
+ while (readOnlyIndex < 0 && i < size) {
+ currProp = (Property) properties.get(i);
+ if (currProp.equals(readOnlyProp))
+ readOnlyIndex = i;
+ i++;
+ }
+
+// Not fixed in TUSCANY-578
+// try {
+// Sequence sequence = seqDO.getSequence();
+// sequence.add(readOnlyProp, "New Value");
+// fail("Sequence.add(property, value) should throw an UnsupportedOperationException when the Property represented by property is read-only. No Exception was thrown.");
+// } catch (UnsupportedOperationException e) {
+// // Success - do nothing
+// } catch (Exception e) {
+// fail("Sequence.add(property, value) should throw an UnsupportedOperationException when the Property represented by property is read-only. " + e.getClass().getName() + " was thrown.");
+// }
+ }
+
+ /**
+ * Verifies the following statement.
+ * A ClassCastException results when cannot convert between value and requested Type.
+ */
+
+ public void testCannotConvertClassCastException() {
+ // Attempt conversion from boolean
+
+ try {
+ testDO.getByte("booleanVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getChar("booleanVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getDouble("booleanVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getFloat("booleanVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getInt("booleanVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getLong("booleanVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getShort("booleanVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBytes("booleanVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBigDecimal("booleanVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBigInteger("booleanVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getDate("booleanVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+
+ // Attempt conversion from byte
+ try {
+ testDO.getBoolean("byteVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getChar("byteVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBigDecimal("byteVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBigInteger("byteVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getDate("byteVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBytes("byteVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ // Attempt conversion from character
+ try {
+ testDO.getBoolean("charVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getByte("charVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getDouble("charVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getFloat("charVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getInt("charVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getLong("charVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getShort("charVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBytes("charVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBigDecimal("charVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBigInteger("charVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getDate("charVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+
+// Attempt conversion from double
+ try {
+ testDO.getBoolean("doubleVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getChar("doubleVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBytes("doubleVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getDate("doubleVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+
+// Attempt conversion from float
+ try {
+ testDO.getBoolean("floatVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getChar("floatVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBytes("floatVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getDate("floatVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+
+// Attempt conversion from int
+ try {
+ testDO.getBoolean("intVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getChar("intVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBytes("intVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getDate("intVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+
+// Attempt conversion from long
+ try {
+ testDO.getBoolean("longVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getChar("longVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBytes("longVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+
+// Attempt conversion from short
+ try {
+ testDO.getBoolean("shortVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getChar("shortVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBytes("shortVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBigDecimal("shortVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBigInteger("shortVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getDate("shortVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+
+// Attempt conversion from bytes
+ try {
+ testDO.getBoolean("bytesVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getByte("bytesVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getChar("bytesVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getDouble("bytesVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getFloat("bytesVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getInt("bytesVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getLong("bytesVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getShort("bytesVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBigDecimal("bytesVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getDate("bytesVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+
+// Attempt conversion from decimal
+ try {
+ testDO.getBoolean("decimalVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getByte("decimalVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getChar("decimalVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getShort("decimalVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBytes("decimalVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getDate("decimalVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+
+// Attempt conversion from BigInteger
+ try {
+ testDO.getBoolean("integerVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getByte("integerVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getChar("integerVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getShort("integerVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getDate("integerVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+
+// Attempt conversion from date
+ try {
+ testDO.getBoolean("dateVal");
+ } catch (ClassCastException e) {
+ // success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getByte("dateVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getChar("dateVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getDouble("dateVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getFloat("dateVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getInt("dateVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getShort("dateVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBytes("dateVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBigDecimal("dateVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ try {
+ testDO.getBigInteger("dateVal");
+ } catch (ClassCastException e) {
+// success - do nothing
+ } catch (Exception e) {
+ fail("Attempted implicit unsupported conversion did not throw the correct Exception. Expected: ClassCastException. Received: " + e.getClass().getName());
+ }
+ }
+
+
+ /**
+ * Verifies the following statement.
+ * Mixing single-valued and multi-valued Property access results in
+ * ClassCastException.
+ */
+ public void testMixSingleMultiValueClassCastException() {
+ Property testedProp = testDO.getInstanceProperty("intVal");
+ List properties = testDO.getInstanceProperties();
+ Property currProp;
+ int testedIndex = -1, i = 0, size = properties.size();
+
+ while (testedIndex < 0 && i < size) {
+ currProp = (Property) properties.get(i);
+
+ if (currProp.equals(testedProp))
+ testedIndex = i;
+ i++;
+ }
+
+ try {
+ testDO.getList("intVal");
+ fail("getList(string) should throw a ClassCastException when the property represented by string is single-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getList(string) should throw a ClassCastException when the property represented by string is single-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getList(testedProp);
+ fail("getList(property) should throw a ClassCastException when the property represented by property is single-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getList(property) should throw a ClassCastException when the property represented by property is single-valued. " + e.getClass().getName() + " was thrown.");
+ }
+
+ assertTrue("The test case could not procede because the index of the single-valued Property was not found.", testedIndex > -1);
+
+ try {
+ testDO.getList(testedIndex);
+ fail("getList(index) should throw a ClassCastException when the property represented by index is single-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getList(index) should throw a ClassCastException when the property represented by index is single-valued. " + e.getClass().getName() + " was thrown.");
+ }
+
+ testedProp = testDO.getInstanceProperty("listVal");
+ testedIndex = -1;
+ i = 0;
+ while (testedIndex < 0 && i < size) {
+ currProp = (Property) properties.get(i);
+ if (currProp.equals(testedProp))
+ testedIndex = i;
+ i++;
+ }
+
+ try {
+ testDO.getBoolean("listVal");
+ fail("getBoolean(string) should throw a ClassCastException when the property represented by string is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBoolean(string) should throw a ClassCastException when the property represented by string is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getByte("listVal");
+ fail("getByte(string) should throw a ClassCastException when the property represented by string is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getByte(string) should throw a ClassCastException when the property represented by string is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getChar("listVal");
+ fail("getChar(string) should throw a ClassCastException when the property represented by string is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getChar(string) should throw a ClassCastException when the property represented by string is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDouble("listVal");
+ fail("getDouble(string) should throw a ClassCastException when the property represented by string is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDouble(string) should throw a ClassCastException when the property represented by string is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getFloat("listVal");
+ fail("getFloat(string) should throw a ClassCastException when the property represented by string is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getFloat(string) should throw a ClassCastException when the property represented by string is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getInt("listVal");
+ fail("getInt(string) should throw a ClassCastException when the property represented by string is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getInt(string) should throw a ClassCastException when the property represented by string is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getLong("listVal");
+ fail("getLong(string) should throw a ClassCastException when the property represented by string is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getLong(string) should throw a ClassCastException when the property represented by string is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getShort("listVal");
+ fail("getShort(string) should throw a ClassCastException when the property represented by string is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getShort(string) should throw a ClassCastException when the property represented by string is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBytes("listVal");
+ fail("getBytes(string) should throw a ClassCastException when the property represented by string is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBytes(string) should throw a ClassCastException when the property represented by string is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBigDecimal("listVal");
+ fail("getBigDecimal(string) should throw a ClassCastException when the property represented by string is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBigDecimal(string) should throw a ClassCastException when the property represented by string is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBigInteger("listVal");
+ fail("getBigInteger(string) should throw a ClassCastException when the property represented by string is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBigInteger(string) should throw a ClassCastException when the property represented by string is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDataObject("listVal");
+ fail("getDataObject(string) should throw a ClassCastException when the property represented by string is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDataObject(string) should throw a ClassCastException when the property represented by string is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDate("listVal");
+ fail("getDate(string) should throw a ClassCastException when the property represented by string is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDate(string) should throw a ClassCastException when the property represented by string is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getString("listVal");
+ fail("getString(string) should throw a ClassCastException when the property represented by string is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getString(string) should throw a ClassCastException when the property represented by string is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+
+ try {
+ testDO.getBoolean(testedProp);
+ fail("getBoolean(property) should throw a ClassCastException when the property represented by property is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBoolean(property) should throw a ClassCastException when the property represented by property is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getByte(testedProp);
+ fail("getByte(property) should throw a ClassCastException when the property represented by property is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getByte(property) should throw a ClassCastException when the property represented by property is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getChar(testedProp);
+ fail("getChar(property) should throw a ClassCastException when the property represented by property is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getChar(property) should throw a ClassCastException when the property represented by property is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDouble(testedProp);
+ fail("getDouble(property) should throw a ClassCastException when the property represented by property is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDouble(property) should throw a ClassCastException when the property represented by property is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getFloat(testedProp);
+ fail("getFloat(property) should throw a ClassCastException when the property represented by property is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getFloat(property) should throw a ClassCastException when the property represented by property is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getInt(testedProp);
+ fail("getInt(property) should throw a ClassCastException when the property represented by property is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getInt(property) should throw a ClassCastException when the property represented by property is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getLong(testedProp);
+ fail("getLong(property) should throw a ClassCastException when the property represented by property is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getLong(property) should throw a ClassCastException when the property represented by property is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getShort(testedProp);
+ fail("getShort(property) should throw a ClassCastException when the property represented by property is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getShort(property) should throw a ClassCastException when the property represented by property is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBytes(testedProp);
+ fail("getBytes(property) should throw a ClassCastException when the property represented by property is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBytes(property) should throw a ClassCastException when the property represented by property is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBigDecimal(testedProp);
+ fail("getBigDecimal(property) should throw a ClassCastException when the property represented by property is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBigDecimal(property) should throw a ClassCastException when the property represented by property is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBigInteger(testedProp);
+ fail("getBigInteger(property) should throw a ClassCastException when the property represented by property is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBigInteger(property) should throw a ClassCastException when the property represented by property is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDataObject(testedProp);
+ fail("getDataObject(property) should throw a ClassCastException when the property represented by property is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDataObject(property) should throw a ClassCastException when the property represented by property is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDate(testedProp);
+ fail("getDate(property) should throw a ClassCastException when the property represented by property is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDate(property) should throw a ClassCastException when the property represented by property is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getString(testedProp);
+ fail("getString(property) should throw a ClassCastException when the property represented by property is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getString(property) should throw a ClassCastException when the property represented by property is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+
+ assertTrue("The test case could not procede because the index of the multi-valued Property was not found.", testedIndex > -1);
+
+ try {
+ testDO.getBoolean(testedIndex);
+ fail("getBoolean(index) should throw a ClassCastException when the property represented by index is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBoolean(index) should throw a ClassCastException when the property represented by is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getByte(testedIndex);
+ fail("getByte(index) should throw a ClassCastException when the property represented by index is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getByte(index) should throw a ClassCastException when the property represented by index is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getChar(testedIndex);
+ fail("getChar(index) should throw a ClassCastException when the property represented by index is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getChar(index) should throw a ClassCastException when the property represented by index is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDouble(testedIndex);
+ fail("getDouble(index) should throw a ClassCastException when the property represented by index is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDouble(index) should throw a ClassCastException when the property represented by index is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getFloat(testedIndex);
+ fail("getFloat(index) should throw a ClassCastException when the property represented by index is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getFloat(index) should throw a ClassCastException when the property represented by index is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getInt(testedIndex);
+ fail("getInt(index) should throw a ClassCastException when the property represented by index is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getInt(index) should throw a ClassCastException when the property represented by index is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getLong(testedIndex);
+ fail("getLong(index) should throw a ClassCastException when the property represented by index is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getLong(index) should throw a ClassCastException when the property represented by index is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getShort(testedIndex);
+ fail("getShort(index) should throw a ClassCastException when the property represented by index is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getShort(index) should throw a ClassCastException when the property represented by index is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBytes(testedIndex);
+ fail("getBytes(index) should throw a ClassCastException when the property represented by index is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBytes(index) should throw a ClassCastException when the property represented by index is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBigDecimal(testedIndex);
+ fail("getBigDecimal(index) should throw a ClassCastException when the property represented by index is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBigDecimal(index) should throw a ClassCastException when the property represented by index is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getBigInteger(testedIndex);
+ fail("getBigInteger(index) should throw a ClassCastException when the property represented by index is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getBigInteger(index) should throw a ClassCastException when the property represented by index is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDataObject(testedIndex);
+ fail("getDataObject(index) should throw a ClassCastException when the property represented by index is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDataObject(index) should throw a ClassCastException when the property represented by index is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getDate(testedIndex);
+ fail("getDate(index) should throw a ClassCastException when the property represented by index is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getDate(index) should throw a ClassCastException when the property represented by index is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ try {
+ testDO.getString(testedIndex);
+ fail("getString(index) should throw a ClassCastException when the property represented by index is multi-valued. No Exception was thrown.");
+ } catch (ClassCastException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("getString(index) should throw a ClassCastException when the property represented by index is multi-valued. " + e.getClass().getName() + " was thrown.");
+ }
+ }
+
+ /*
+ /**
+ * Verifies the following statement.
+ * Establishing circular containment results in an IllegalArgumentException.
+ * Note: This test case will not be implemented because it has been determined
+ * that the statement will be removed from the spec.
+ */
+ /*
+ public void testContainmentCycleIllegalArgumentException() {
+ // This test case will not be implemented.
+ }
+ */
+
+ /**
+ * Verifies the following statement.
+ * An empty DataGraph can have a root assigned by the createRootObject() methods.
+ * However, if a previous root DataObject exists than an IllegalStateException is
+ * thrown.
+ */
+ public void testCreateRootObjectAgainIllegalStateException() {
+ DataGraph dataGraph = SDOUtil.createDataGraph();
+ Type type = testDO.getType();
+
+ // verify the initial condition
+ assertNull("The DataGraph should have been created without a root DataObject.", dataGraph.getRootObject());
+ assertNotNull("DataObject.getType() returned null.", type);
+
+ dataGraph.createRootObject(type);
+
+ // verify the pre-condition
+ assertNotNull("The DataGraph.createRootObject() should have created a root DataObject for the DataGraph.", dataGraph.getRootObject());
+
+ try {
+ dataGraph.createRootObject(type);
+ fail("DataGraph.createRootObject(Type) should throw an IllegalStateException a root Object already exists for the DataGraph. No Exception was thrown.");
+ } catch (IllegalStateException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("DataGraph.createRootObject(Type) should throw an IllegalStateException a root Object already exists for the DataGraph. " + e.getClass().getName() + " was thrown.");
+ }
+ }
+
+ /**
+ * Verifies the following statement.
+ * DataFactory.create() throws an IllegalArgumentException if the instanceClass does
+ * not correspond to a Type this factory can instantiate.
+ */
+ public void testDataFactoryCreateIllegalArgumentException() {
+ try {
+ helperContext.getDataFactory().create(java.lang.Object.class);
+ fail("DataFactory.create(Object) should throw an IllegalArgumentException when it cannot instantiate the Type specified. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("DataFactory.create(Object) should throw an IllegalArgumentException when it cannot instantiate the Type specified. " + e.getClass().getName() + " was thrown.");
+ }
+
+ try {
+ helperContext.getDataFactory().create(commonj.sdo.DataObject.class);
+ fail("DataFactory.create(DataObject) should throw an IllegalArgumentException when it cannot instantiate the Type specified. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("DataFactory.create(DataObject) should throw an IllegalArgumentException when it cannot instantiate the Type specified. " + e.getClass().getName() + " was thrown.");
+ }
+
+ try {
+ helperContext.getDataFactory().create(commonj.sdo.ChangeSummary.class);
+ fail("DataFactory.create(ChangeSummary) should throw an IllegalArgumentException when it cannot instantiate the Type specified. No Exception was thrown.");
+ } catch (IllegalArgumentException e) {
+ // Success - do nothing
+ } catch (Exception e) {
+ fail("DataFactory.create(ChangeSummary) should throw an IllegalArgumentException when it cannot instantiate the Type specified. " + e.getClass().getName() + " was thrown.");
+ }
+ }
+
+ /**
+ * Defines the Type the first time through.
+ */
+ public void setUp() {
+ if (!typeDefined) {
+ helperContext = SDOUtil.createHelperContext();
+// createWithXSD(helperContext);
+// createDynamically(helperContext);
+ createStatically(helperContext);
+ typeDefined = true;
+ }
+// testDO = helperContext.getDataFactory().create(TEST_URI, TEST_TYPE_NAME);
+// seqDO = helperContext.getDataFactory().create(TEST_URI, SEQ_TYPE_NAME);
+ testDO = (DataObject) ExpectedExceptionFactory.INSTANCE.createExpectedExceptionType();
+ seqDO = (DataObject) ExpectedExceptionFactory.INSTANCE.createSequenceReadOnlyType();
+ }
+
+ public static void createStatically(HelperContext hc) {
+ ExpectedExceptionFactory.INSTANCE.register(hc);
+ }
+
+ public static void createWithXSD(HelperContext hc) {
+ // Populate the meta data for the test model
+ URL url = ExpectedExceptionsTestCase.class.getResource("/expectedExceptions.xsd");
+ try {
+ InputStream inputStream = url.openStream();
+ hc.getXSDHelper().define(inputStream, url.toString());
+ inputStream.close();
+ } catch(IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * createDynamically() creates the SDO Types using the TypeHelper. This
+ * method should be kept in synch with the XSD used for
+ * createDynamicallyWithStaticResources. The same XSD is used for the static
+ * generation of SDO Types using XSD2JavaGenerator.
+ */
+ public static void createDynamically(HelperContext hc) {
+
+ TypeHelper types = hc.getTypeHelper();
+ Type stringType = types.getType("commonj.sdo", "String");
+ Type intType = types.getType("commonj.sdo", "Int");
+ Type booleanType = types.getType("commonj.sdo", "Boolean");
+ Type byteType = types.getType("commonj.sdo", "Byte");
+ Type decimalType = types.getType("commonj.sdo", "Decimal");
+ Type floatType = types.getType("commonj.sdo", "Float");
+ Type doubleType = types.getType("commonj.sdo", "Double");
+ Type dateType = types.getType("commonj.sdo", "Date");
+ Type shortType = types.getType("commonj.sdo", "Short");
+ Type longType = types.getType("commonj.sdo", "Long");
+ Type bytesType = types.getType("commonj.sdo", "Bytes");
+ Type integerType = types.getType("commonj.sdo", "Integer");
+ Type charType = types.getType("commonj.sdo", "Character");
+
+ DataObject testType = hc.getDataFactory().create("commonj.sdo", "Type");
+ testType.set("uri", TEST_URI);
+ testType.set("name", TEST_TYPE_NAME);
+
+ DataObject stringProperty = testType.createDataObject("property");
+ stringProperty.set("name", "stringVal");
+ stringProperty.set("type", stringType);
+
+ DataObject booleanProperty = testType.createDataObject("property");
+ booleanProperty.set("name", "booleanVal");
+ booleanProperty.set("type", booleanType);
+
+ DataObject byteProperty = testType.createDataObject("property");
+ byteProperty.set("name", "byteVal");
+ byteProperty.set("type", byteType);
+
+ DataObject decimalProperty = testType.createDataObject("property");
+ decimalProperty.set("name", "decimalVal");
+ decimalProperty.set("type", decimalType);
+
+ DataObject intProperty = testType.createDataObject("property");
+ intProperty.set("name", "intVal");
+ intProperty.set("type", intType);
+
+ DataObject floatProperty = testType.createDataObject("property");
+ floatProperty.set("name", "floatVal");
+ floatProperty.set("type", floatType);
+
+ DataObject doubleProperty = testType.createDataObject("property");
+ doubleProperty.set("name", "doubleVal");
+ doubleProperty.set("type", doubleType);
+
+ DataObject dateProperty = testType.createDataObject("property");
+ dateProperty.set("name", "dateVal");
+ dateProperty.set("type", dateType);
+
+ DataObject shortProperty = testType.createDataObject("property");
+ shortProperty.set("name", "shortVal");
+ shortProperty.set("type", shortType);
+
+ DataObject longProperty = testType.createDataObject("property");
+ longProperty.set("name", "longVal");
+ longProperty.set("type", longType);
+
+ DataObject childrenProperty = testType.createDataObject("property");
+ childrenProperty.set("name", "listVal");
+ childrenProperty.setBoolean("many", true);
+ childrenProperty.set("type", stringType);
+
+ DataObject bytesProperty = testType.createDataObject("property");
+ bytesProperty.set("name", "bytesVal");
+ bytesProperty.set("type", bytesType);
+
+ DataObject integerProperty = testType.createDataObject("property");
+ integerProperty.set("name", "integerVal");
+ integerProperty.set("type", integerType);
+
+ DataObject charProperty = testType.createDataObject("property");
+ charProperty.set("name", "charVal");
+ charProperty.set("type", charType);
+
+ DataObject readOnlyProperty = testType.createDataObject("property");
+ readOnlyProperty.set("name", "readOnlyVal");
+ readOnlyProperty.set("type", stringType);
+ readOnlyProperty.setBoolean("readOnly", true);
+
+ DataObject readOnlyListProperty = testType.createDataObject("property");
+ readOnlyListProperty.set("name", "readOnlyListVal");
+ readOnlyListProperty.set("type", stringType);
+ readOnlyListProperty.setBoolean("readOnly", true);
+ readOnlyListProperty.setBoolean("many", true);
+
+ types.define(testType);
+
+ DataObject seqType = hc.getDataFactory().create("commonj.sdo", "Type");
+ seqType.set("uri", TEST_URI);
+ seqType.set("name", SEQ_TYPE_NAME);
+ seqType.setBoolean("sequenced", true);
+
+ DataObject seqROProperty = seqType.createDataObject("property");
+ seqROProperty.set("name", "readOnlyVal");
+ seqROProperty.set("type", stringType);
+ seqROProperty.setBoolean("readOnly", true);
+
+ DataObject seqROListProperty = seqType.createDataObject("property");
+ seqROListProperty.set("name", "readOnlyListVal");
+ seqROListProperty.set("type", stringType);
+ seqROListProperty.setBoolean("readOnly", true);
+ seqROListProperty.setBoolean("many", true);
+
+ DataObject uniqueNameProperty = seqType.createDataObject("property");
+ uniqueNameProperty.set("name", "uniqueName");
+ uniqueNameProperty.set("type", stringType);
+
+ types.define(seqType);
+ }
+}
\ No newline at end of file diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/FormTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/FormTestCase.java new file mode 100644 index 0000000000..e630a8f903 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/FormTestCase.java @@ -0,0 +1,112 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.io.IOException; +import java.io.StringReader; +import java.util.HashMap; +import java.util.Map; + +import junit.framework.TestCase; + +import org.apache.tuscany.sdo.util.SDOUtil; +import org.eclipse.emf.ecore.resource.Resource; + +import commonj.sdo.helper.HelperContext; +import commonj.sdo.helper.XMLHelper; + +public class FormTestCase extends TestCase { + XMLHelper xmlHelper; + Map options; + + protected void setUp() throws Exception { + super.setUp(); + HelperContext hc = SDOUtil.createHelperContext(); + hc.getXSDHelper().define( +"<schema xmlns=\"http://www.w3.org/2001/XMLSchema\" targetNamespace=\"testNS\">"+ + "<element name=\"root\">"+ + "<complexType>"+ + "<sequence>"+ + "<element name=\"unqualifiedElement\" type=\"string\"/>"+ + "<element name=\"qualifiedElement\" form=\"qualified\" type=\"string\"/>"+ + "</sequence>"+ + "<attribute name=\"unqualifiedAttribute\" type=\"string\"/>"+ + "<attribute name=\"qualifiedAttribute\" form=\"qualified\" type=\"string\"/>"+ + "</complexType>"+ + "</element>"+ +"</schema>"); + xmlHelper = hc.getXMLHelper(); + options = new HashMap(); + /* + * turn off default behaviour of tolerating malformed xml + * tests using this option and bad xml should demonstrate failure to load + */ + options.put(SDOUtil.XML_LOAD_LaxForm, new Integer(0)); + } + + void load(String xml, Object options) throws IOException { + assertNotNull(xmlHelper.load(new StringReader(xml), null, options).getRootObject()); + } + + /* + * this malformed xml will load, as it uses the default lax approach + */ + public void testLaxForm() throws IOException { + load( +"<p:root xmlns:p=\"testNS\" p:unqualifiedAttribute=\"u\" qualifiedAttribute=\"q\">"+ + "<p:unqualifiedElement/>"+ + "<qualifiedElement/>"+ +"</p:root>", null); + } + + /* + * any malformed xml through this method will fail to load + * since the options instance member disables lax processing + */ + protected final void load(String xml) throws IOException { + try { + load(xml, options); + fail(); + } catch (Resource.IOWrappedException featureNotFound) { + } + } + + public void testUnqualifiedAttribute() throws IOException { + load("<p:root xmlns:p=\"testNS\" p:unqualifiedAttribute=\"u\"/>"); + } + + public void testQualifiedAttribute() throws IOException { + load("<p:root xmlns:p=\"testNS\" qualifiedAttribute=\"q\"/>"); + } + + public void testUnqualifiedElement() throws IOException { + load( +"<p:root xmlns:p=\"testNS\">"+ + "<p:unqualifiedElement/>"+ +"</p:root>"); + } + + public void testQualifiedElement() throws IOException { + load( +"<p:root xmlns:p=\"testNS\">"+ + "<qualifiedElement/>"+ +"</p:root>"); + } +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/HelperContextTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/HelperContextTestCase.java new file mode 100644 index 0000000000..14e81b6a32 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/HelperContextTestCase.java @@ -0,0 +1,75 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import junit.framework.TestCase; + +import org.apache.tuscany.sdo.util.SDOUtil; + +import commonj.sdo.helper.CopyHelper; +import commonj.sdo.helper.DataFactory; +import commonj.sdo.helper.DataHelper; +import commonj.sdo.helper.EqualityHelper; +import commonj.sdo.helper.HelperContext; +import commonj.sdo.helper.TypeHelper; +import commonj.sdo.helper.XMLHelper; +import commonj.sdo.helper.XSDHelper; +import commonj.sdo.impl.HelperProvider; + +public class HelperContextTestCase extends TestCase { + + public void testDefaultHelperContext() { + HelperContext defaultHelperContext = HelperProvider.getDefaultContext(); + + assertNotNull(defaultHelperContext.getCopyHelper()); + assertEquals(defaultHelperContext.getCopyHelper(), CopyHelper.INSTANCE); + assertNotNull(defaultHelperContext.getDataFactory()); + assertEquals(defaultHelperContext.getDataFactory(), DataFactory.INSTANCE); + assertNotNull(defaultHelperContext.getDataHelper()); + assertEquals(defaultHelperContext.getDataHelper(), DataHelper.INSTANCE); + assertNotNull(defaultHelperContext.getEqualityHelper()); + assertEquals(defaultHelperContext.getEqualityHelper(), EqualityHelper.INSTANCE); + assertNotNull(defaultHelperContext.getTypeHelper()); + assertEquals(defaultHelperContext.getTypeHelper(), TypeHelper.INSTANCE); + assertNotNull(defaultHelperContext.getXMLHelper()); + assertEquals(defaultHelperContext.getXMLHelper(), XMLHelper.INSTANCE); + assertNotNull(defaultHelperContext.getXSDHelper()); + assertEquals(defaultHelperContext.getXSDHelper(), XSDHelper.INSTANCE); + + } + + public void testCreateHelperContext() { + HelperContext hc = SDOUtil.createHelperContext(); + assertNotNull(hc.getCopyHelper()); + assertNotNull(hc.getDataFactory()); + assertNotNull(hc.getDataHelper()); + assertNotNull(hc.getEqualityHelper()); + assertNotNull(hc.getTypeHelper()); + assertNotNull(hc.getXMLHelper()); + assertNotNull(hc.getXSDHelper()); + + assertNotSame(hc.getDataFactory(), DataFactory.INSTANCE); + assertNotSame(hc.getTypeHelper(), TypeHelper.INSTANCE); + assertNotSame(hc.getXMLHelper(), XMLHelper.INSTANCE); + assertNotSame(hc.getXSDHelper(), XSDHelper.INSTANCE); + // the other "stateless" helpers may be the same as the singletons + } + +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/IsManyTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/IsManyTestCase.java new file mode 100644 index 0000000000..1eef4ea657 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/IsManyTestCase.java @@ -0,0 +1,65 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.io.InputStream; +import java.net.URL; + +import org.apache.tuscany.sdo.util.SDOUtil; + +import junit.framework.TestCase; + +import commonj.sdo.*; +import commonj.sdo.helper.*; + +public class IsManyTestCase extends TestCase { + private final String TEST_MODEL = "/open.xsd"; + private final String TEST_MODEL1ANY = "/open1any.xsd"; + private final String TEST_NAMESPACE = "http://www.example.com/open"; + private final String TEST_NAMESPACE1ANY = "http://www.example.com/open1any"; + + public void testIsMany() { + Property priceProperty = XSDHelper.INSTANCE.getGlobalProperty(TEST_NAMESPACE, "price", true); + + Type quoteType = TypeHelper.INSTANCE.getType(TEST_NAMESPACE, "OpenQuote"); + DataObject quote = DataFactory.INSTANCE.create(quoteType); + assertTrue( SDOUtil.isMany(priceProperty, quote)); + + quoteType = TypeHelper.INSTANCE.getType(TEST_NAMESPACE1ANY, "OpenQuote"); + quote = DataFactory.INSTANCE.create(quoteType); + assertFalse( SDOUtil.isMany(priceProperty, quote)); + } + + protected void setUp() throws Exception { + super.setUp(); + + // Populate the meta data for the test (Stock Quote) model + URL url = getClass().getResource(TEST_MODEL); + InputStream inputStream = url.openStream(); + XSDHelper.INSTANCE.define(inputStream, url.toString()); + inputStream.close(); + + // Populate the meta data for the test (Stock Quote) model with maxOccurs=1 <any> + url = getClass().getResource(TEST_MODEL1ANY); + inputStream = url.openStream(); + XSDHelper.INSTANCE.define(inputStream, url.toString()); + inputStream.close(); + } +}
\ No newline at end of file diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/JavaSerializeDeserializeTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/JavaSerializeDeserializeTestCase.java new file mode 100644 index 0000000000..56a293cde0 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/JavaSerializeDeserializeTestCase.java @@ -0,0 +1,297 @@ +/**
+ *
+ * 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.
+ */
+package org.apache.tuscany.sdo.test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.DataGraph;
+import commonj.sdo.DataObject;
+import commonj.sdo.Type;
+import commonj.sdo.helper.DataFactory;
+import commonj.sdo.helper.HelperContext;
+import commonj.sdo.helper.TypeHelper;
+
+public class JavaSerializeDeserializeTestCase extends TestCase
+{
+
+ public void testScopeDefinedSerializeDeserializeOfDataObject()
+ {
+ HelperContext hc = SDOUtil.createHelperContext();
+ Object originalDataObject = createDynamically(hc,true);
+
+ runSerializeDeserialize((DataObject)originalDataObject, hc);
+ }
+
+ public void testScopeDefinedSerializeDeserializeOfDataGraph()
+ {
+ HelperContext hc = SDOUtil.createHelperContext();
+ DataGraph testDO = (DataGraph)createDynamically(hc,false);
+
+ runSerializeDeserializeWithDataGraph(testDO, hc);
+ }
+
+ private String xsdString = "<xsd:schema targetNamespace=\"http://www.example.com/simple\" " +
+ "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " +
+ "xmlns:simple=\"http://www.example.com/simple\">" +
+ "<xsd:element name=\"company\" type=\"simple:Company\"/>" +
+ "<xsd:complexType name=\"Company\">" +
+ "<xsd:sequence>" +
+ "<xsd:element name=\"symbol\" type=\"xsd:string\"/>" +
+ "<xsd:element name=\"companyName\" type=\"xsd:string\"/>" +
+ "<xsd:element name=\"employees\" type=\"simple:Employee\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>" +
+ "</xsd:sequence>" +
+ "</xsd:complexType>" +
+
+ "<xsd:complexType name=\"Employee\">" +
+ "<xsd:sequence>" +
+ "<xsd:element name=\"employeeID\" type=\"xsd:string\"/>" +
+ "<xsd:element name=\"employeeName\" type=\"xsd:string\"/>" +
+ "</xsd:sequence>" +
+ "</xsd:complexType>" +
+ "</xsd:schema>";
+
+ public void testLargePayload()
+ {
+ HelperContext hc = SDOUtil.createHelperContext();
+ hc.getXSDHelper().define(xsdString);
+ DataObject company = hc.getDataFactory().create("http://www.example.com/simple", "Company");
+ company.setString("symbol", "EXAMPLE");
+ company.setString("companyName", "Example Inc.");
+ List employees = company.getList("employees");
+ DataObject employee;
+ for (int i=0; i<1000; i++) {
+ employee = hc.getDataFactory().create("http://www.example.com/simple", "Employee");
+ employee.setString("employeeID", "ID #" + i);
+ employee.setString("employeeName", "Empoyee #" + i);
+ employees.add(employee);
+ }
+ try {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = SDOUtil.createObjectOutputStream(bos, hc);
+ oos.writeObject(company);
+ oos.flush();
+ byte[] bytes = bos.toByteArray();
+ oos.close();
+ bos.close();
+
+ ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
+ ObjectInputStream ois = SDOUtil.createObjectInputStream(bis, hc);
+ ois.readObject();
+ ois.close();
+ bis.close();
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ fail("An Exception occurred while deserializing the output of the serialization: " + e.toString());
+ }
+ }
+
+
+ /**
+ * Serialize the DataObject then Deserialize the output.
+ * to testDO.
+ * @param testDO
+ * @param scope
+ */
+
+ public void runSerializeDeserialize(DataObject originalDataObject, HelperContext hc)
+ {
+
+ populateFields(originalDataObject);
+ DataObject tempDO = null;
+ ByteArrayOutputStream baos = null;
+
+ try
+ {
+ baos = serialize(originalDataObject, hc);
+
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ fail("An Exception occurred while serializing the DataObject: " + e.toString());
+ }
+
+ try
+ {
+ tempDO = deserialize(baos, hc);
+
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ fail("An Exception occurred while deserializing the output of the serialization: " + e.toString());
+ }
+
+ assertNotNull("Deserialization returned a null value.", tempDO);
+
+ assertSame(tempDO.getType(), originalDataObject.getType());
+
+
+ }
+
+ /**
+ * Serialize the DataGraph
+ * @param dataGraph
+ * @param scope
+ */
+ public void runSerializeDeserializeWithDataGraph(DataGraph dataGraph, HelperContext hc)
+ {
+ DataObject originalDataObject = dataGraph.getRootObject();
+ populateFields(originalDataObject);
+ DataObject tempDO = null;
+ ByteArrayOutputStream baos = null;
+
+ try
+ {
+ baos = serialize(dataGraph, hc);
+
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ fail("An Exception occurred while serializing the DataObject: " + e.toString());
+ }
+
+ try
+ {
+ tempDO = deserialize(baos, hc);
+
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ fail("An Exception occurred while deserializing the output of the serialization: " + e.toString());
+ }
+
+ assertNotNull("Deserialization returned a null value.", tempDO);
+
+ assertSame(tempDO.getType(), originalDataObject.getType());
+
+
+
+ }
+
+ /**
+ * serializeDataObject is a private method to be called by the other methods
+ * in the ScrenarioLibrary
+ *
+ * @param dataObject
+ * @param fileName
+ * @throws IOException
+ */
+ public ByteArrayOutputStream serialize(Object object, HelperContext hc) throws IOException
+ {
+ //FileOutputStream fos = new FileOutputStream("temp");
+ ByteArrayOutputStream byteArrayOutput = new ByteArrayOutputStream();
+ ObjectOutputStream out = SDOUtil.createObjectOutputStream(byteArrayOutput, hc);
+ out.writeObject(object);
+ out.close();
+ return byteArrayOutput;
+ }
+
+ /**
+ * deserializeDataObject is a private method to be called by the other
+ * methods in the ScrenarioLibrary
+ *
+ * @param fileName
+ * @return
+ * @throws IOException
+ * @throws ClassNotFoundException
+ */
+ public DataObject deserialize(ByteArrayOutputStream baos, HelperContext hc) throws IOException, ClassNotFoundException
+ {
+ //FileInputStream fis = new FileInputStream("temp");
+ ObjectInputStream input = null;
+ ByteArrayInputStream byteArrayInput = new ByteArrayInputStream(baos.toByteArray());
+
+ input = SDOUtil.createObjectInputStream(byteArrayInput, hc);
+
+ Object object = input.readObject();
+ input.close();
+ if(object instanceof DataGraph)
+ return ((DataGraph)object).getRootObject();
+ else
+ return (DataObject)object;
+ }
+
+ /**
+ * populateFields uses set<Type> to set each of the fields in the
+ * DataObject. It is used to ensure a known set of expected values that are
+ * not other than the default values for the various fields.
+ *
+ * @param testDO
+ * @throws ExpectedConditionError
+ */
+ public static void populateFields(DataObject testDO)
+ {
+
+ testDO.setString("stringVal", "Testing");
+
+ }
+ /**
+ * createDynamically() creates the SDO Types using the TypeHelper. This method should be kept in
+ * synch with the XSD used for createDynamicallyWithStaticResources. The same XSD is used for
+ * the static generation of SDO Types using XSD2JavaGenerator.
+ */
+ public Object createDynamically(HelperContext hc, boolean createDataObject)
+ {
+
+ TypeHelper types = hc.getTypeHelper();
+ DataFactory dataFactory = hc.getDataFactory();
+
+ Type stringType = types.getType("commonj.sdo", "String");
+
+ DataObject testType = dataFactory.create("commonj.sdo", "Type");
+ testType.set("uri", "http://www.example.com/api_test");
+ testType.set("name", "APITest");
+
+ DataObject stringProperty = testType.createDataObject("property");
+ stringProperty.set("name", "stringVal");
+ stringProperty.set("type", stringType);
+
+
+ List types2Define = new ArrayList();
+ types2Define.add(testType);
+ List apiXSD = types.define(types2Define);
+ Type apiXSDType = (Type) apiXSD.get(0);
+
+ if(createDataObject)
+ return dataFactory.create(apiXSDType);;
+
+ // Create an empty DataGraph and attach the document root to it. Otherwise, where is the documentRoot ?
+ DataGraph dataGraph = SDOUtil.createDataGraph();
+ /*DataObject testDO =*/ dataGraph.createRootObject(apiXSDType);
+
+
+ return dataGraph;
+
+ }
+}
diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/JiraTestCases.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/JiraTestCases.java new file mode 100644 index 0000000000..66138495ce --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/JiraTestCases.java @@ -0,0 +1,184 @@ +/** + * + * 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. + * + */ +package org.apache.tuscany.sdo.test; + +import java.util.List; + +import junit.framework.TestCase; +import commonj.sdo.*; +import commonj.sdo.helper.*; + +import org.apache.tuscany.sdo.util.SDOUtil; +import java.util.HashMap; + +/** + * The follow test cases are based upon code snipets in the SDO specification. + * They are also implemented as working samples in the sample-sdo artifact + * + * @author Robbie Minshall + * + */ +public class JiraTestCases extends TestCase { + + /** + * Bogus company namespace + */ + public static final String COMPANY_NAMESPACE = "company.xsd"; + + /** + * previously defined XSD file used + */ + public static final String COMPANY_XSD = "/company.xsd"; + + /** + * XML file containing DataGraph representing a company. This xml file + * conforms to the company model defined in 'Complete DataGraph for Company + * Example' section of the SDO specification + */ + public static final String COMPANY_DATAGRAPH_XML = "/companyDataGraphGenerated.xml"; + + /** + * Generated DataGraph + * {@link org.apache.tuscany.samples.sdo.company.CreateCompany} + */ + public static final String COMPANY_DATAOBJECT_XML = "/companyGenerated.xml"; + + /** + * Defines xsd resource contained within jar file for PurchaseOrder + * DataObject + */ + public static final String PO_XSD_RESOURCE = "/po.xsd"; + + /** + * Defines xml resource contained within jar file that is used to populate + * PurchaseOrder DataObjects + */ + public static final String PO_XML_RESOURCE = "/po.xml"; + + /** + * previously created XSD file used + */ + public static final String LETTER_XSD = "/letter.xsd"; + + /** + * JIRA Details : Add a method to SDOUtil to return all Types associated + * with a specific URI + */ + public void test_TUSCANY583() { + + // define some types + try { + XSDHelper.INSTANCE.define(getClass().getResourceAsStream( + PO_XSD_RESOURCE), null); + + XSDHelper.INSTANCE.define(getClass().getResourceAsStream( + COMPANY_XSD), null); + + createDynamicType(); + + String[] expectedPoTypeNames = {"item", "Items", + "PurchaseOrderType", "quantity", "SKU", "USAddress"}; + + String[] expectedCompanyTypeNames = {"EmployeeType", "DepartmentType", "CompanyType"}; + + String[] expectedCustomerTypeNames = {"Customer"}; + + confirmTypes("http://www.example.com/PO", expectedPoTypeNames); + confirmTypes("company.xsd", expectedCompanyTypeNames); + confirmTypes("http://example.com/customer", + expectedCustomerTypeNames); + + } catch (Exception e) { + fail("Unexpected error " + e.toString()); + e.printStackTrace(); + } + + } + + /** + * Dynamically define customer Type + */ + public static void createDynamicType() { + // get an instance of the type helper + TypeHelper typeH = TypeHelper.INSTANCE; + Type intType = typeH.getType("commonj.sdo", "Int"); + Type stringType = typeH.getType("commonj.sdo", "String"); + + // create a new Type for Customers + DataObject customerType = DataFactory.INSTANCE.create("commonj.sdo", + "Type"); + + customerType.set("uri", "http://example.com/customer"); + customerType.set("name", "Customer"); + + // create a customer number property + DataObject custNumProperty = customerType.createDataObject("property"); + custNumProperty.set("name", "custNum"); + custNumProperty.set("type", intType); + + // create a last name property + DataObject lastNameProperty = customerType.createDataObject("property"); + lastNameProperty.set("name", "lastName"); + lastNameProperty.set("type", stringType); + + // create a first name property + DataObject firstNameProperty = customerType + .createDataObject("property"); + firstNameProperty.set("name", "firstName"); + firstNameProperty.set("type", stringType); + + // now define the Customer type so that customers can be made + typeH.define(customerType); + } + + private void confirmTypes(String uri, String[] expectedTypeNames) { + + try { + + List actualTypes = SDOUtil.getTypes(TypeHelper.INSTANCE, uri); + assertNotNull("Testing that list of types for " + uri + + " is not null", actualTypes); + + // test the number of Types + assertEquals("Testing number of types for " + uri, + expectedTypeNames.length, actualTypes.size()); + + // put into a HashMap for easy lookup + HashMap typeLookup = new HashMap(); + for (int i = 0; i < actualTypes.size(); i++) { + Type type = (Type) actualTypes.get(i); + typeLookup.put(type.getName(), type); + } + + // check that we have the same types + for (int i = 0; i < expectedTypeNames.length; i++) { + assertTrue("testing that type " + expectedTypeNames[i] + + "was returned for " + uri, typeLookup + .containsKey(expectedTypeNames[i])); + } + + } catch (Exception e) { + fail("Exception caught comparing expected types to actual types for uri " + + uri + ":" + e.toString()); + e.printStackTrace(); + } + } +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/MetadataInstancePropertiesTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/MetadataInstancePropertiesTestCase.java new file mode 100644 index 0000000000..360ffe3cab --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/MetadataInstancePropertiesTestCase.java @@ -0,0 +1,220 @@ +/**
+ *
+ * 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.
+ */
+package org.apache.tuscany.sdo.test;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sdo.api.SDOUtil;
+
+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.XSDHelper;
+
+
+public class MetadataInstancePropertiesTestCase extends TestCase
+{
+ private final String TEST_MODEL = "/TypePropertyMetadataInfo.xsd";
+ private final String TEST_NAMESPACE = "http://www.example.com/metadata/retrievaltest";
+ private final String DYNAMIC_TEST_NAMESPACE = "http://www.example.com/metadata/dynamicmetadata";
+
+ private HelperContext helperContext;
+ private TypeHelper typeHelper;
+ private XSDHelper xsdHelper;
+ private DataFactory dataFactory;
+
+ public void testXSDTypeProperties()
+ {
+ // Note: We won't check the actual value of XSD instance properties yet since they're not defined
+ // in the SDO spec yet.
+
+ //displayInstanceProperties(TEST_NAMESPACE);
+
+ Type type = typeHelper.getType(TEST_NAMESPACE, "Example");
+ assertTrue(getInstanceProperty(type, "appinfo") != null);
+ assertTrue(getInstanceProperty(type, "foo") == null);
+
+ Property property = type.getProperty("number");
+ assertTrue(getInstanceProperty(property, "appinfo") != null);
+ assertTrue(getInstanceProperty(property, "foo") == null);
+
+ property = type.getProperty("Exampletype");
+ assertTrue(getInstanceProperty(property, "appinfo") != null);
+ assertTrue(getInstanceProperty(property, "foo") == null);
+
+ type = typeHelper.getType(TEST_NAMESPACE, "ExampleNumber");
+ assertTrue(getInstanceProperty(type, "appinfo") != null);
+ assertTrue(getInstanceProperty(type, "minInclusive") != null);
+ assertTrue(getInstanceProperty(type, "maxInclusive") != null);
+ assertTrue(getInstanceProperty(type, "foo") == null);
+
+ type = typeHelper.getType(TEST_NAMESPACE, "ExampleRating");
+ assertTrue(getInstanceProperty(type, "enumeration") != null);
+ assertTrue(getInstanceProperty(type, "foo") == null);
+
+ type = typeHelper.getType(TEST_NAMESPACE, "PhoneNumber");
+ assertTrue(getInstanceProperty(type, "appinfo") != null);
+ assertTrue(getInstanceProperty(type, "length") != null);
+ assertTrue(getInstanceProperty(type, "pattern") != null);
+ assertTrue(getInstanceProperty(type, "foo") == null);
+ }
+
+ public void testDynamicTypeProperties()
+ {
+ // Create dynamic model
+ Type intType = typeHelper.getType("commonj.sdo", "Int");
+ Type stringType = typeHelper.getType("commonj.sdo", "String");
+
+ Property openContentProperty = typeHelper.getOpenContentProperty("commonj.sdo/xml", "xmlElement");
+
+ // create a new Type for Customers
+ DataObject customerType = dataFactory.create("commonj.sdo", "Type");
+ customerType.set("uri", DYNAMIC_TEST_NAMESPACE);
+ customerType.set("name", "Customer");
+ customerType.set(openContentProperty, Boolean.TRUE);
+
+ // create a customer number property
+ DataObject custNumProperty = customerType.createDataObject("property");
+ custNumProperty.set("name", "custNum");
+ custNumProperty.set("type", intType);
+
+ // create a first name property
+ DataObject firstNameProperty =
+ customerType.createDataObject("property");
+ firstNameProperty.set("name", "firstName");
+ firstNameProperty.set("type", stringType);
+ firstNameProperty.set(openContentProperty, Boolean.FALSE);
+
+ // create a last name property
+ DataObject lastNameProperty = customerType.createDataObject("property");
+ lastNameProperty.set("name", "lastName");
+ lastNameProperty.set("type", stringType);
+
+ // now define the Customer type so that customers can be made
+ typeHelper.define(customerType);
+
+ //displayInstanceProperties(DYNAMIC_TEST_NAMESPACE);
+
+ Type type = typeHelper.getType(DYNAMIC_TEST_NAMESPACE, "Customer");
+ assertTrue(getInstanceProperty(type, "xmlElement") == openContentProperty);
+ assertTrue(type.get(openContentProperty) == Boolean.TRUE);
+ assertTrue(getInstanceProperty(type, "foo") == null);
+
+ Property property = type.getProperty("custNum");
+ assertTrue(getInstanceProperty(property, "xmlElement") == null);
+ assertTrue(getInstanceProperty(property, "foo") == null);
+
+ property = type.getProperty("firstName");
+ assertTrue(getInstanceProperty(property, "xmlElement") == openContentProperty);
+ assertTrue(property.get(openContentProperty) == Boolean.FALSE);
+ assertTrue(getInstanceProperty(property, "foo") == null);
+
+ property = type.getProperty("lastName");
+ assertTrue(getInstanceProperty(property, "xmlElement") == null);
+ assertTrue(getInstanceProperty(property, "foo") == null);
+ }
+
+ public void setUp() throws Exception
+ {
+ super.setUp();
+
+ helperContext = SDOUtil.createHelperContext();
+
+ typeHelper = helperContext.getTypeHelper();
+ xsdHelper = helperContext.getXSDHelper();
+ dataFactory = helperContext.getDataFactory();
+
+ URL url = getClass().getResource(TEST_MODEL);
+ InputStream inputStream = url.openStream();
+
+ xsdHelper.define(inputStream, url.toString());
+ inputStream.close();
+ }
+
+ public Property getInstanceProperty(Type type, String propertyName)
+ {
+ return getInstanceProperty(type.getInstanceProperties(), propertyName);
+ }
+
+ public Property getInstanceProperty(Property property, String propertyName)
+ {
+ return getInstanceProperty(property.getInstanceProperties(), propertyName);
+ }
+
+ private Property getInstanceProperty(List instProps, String propertyName)
+ {
+ for (int i = 0; i < instProps.size(); i++)
+ {
+ Property prop = (Property)instProps.get(i);
+ if (propertyName.equals(prop.getName()))
+ return prop;
+ }
+ return null;
+ }
+
+ private void displayInstanceProperties(Type type)
+ {
+ System.out.println("Type's name: " + type.getName());
+ List instProps = type.getInstanceProperties();
+ for (int i = 0; i < instProps.size(); i++)
+ {
+ Property prop = (Property)instProps.get(i);
+ System.out.println("\tType's instance property name: " + prop.getName());
+ System.out.println("\tType's instance property value: \"" + type.get(prop) + "\"");
+ }
+ }
+
+ private void displayInstanceProperties(Property prop)
+ {
+ System.out.println("\tProperty's name: " + prop.getName());
+ List propsInstProps = prop.getInstanceProperties();
+ for (int j = 0; j < propsInstProps.size(); j++)
+ {
+ Property propsInstProp = (Property)propsInstProps.get(j);
+ System.out.println("\t\tProperty's instance property name: " + propsInstProp.getName());
+ System.out.println("\t\tProperty's instance property value: \"" + prop.get(propsInstProp) + "\"");
+ }
+ }
+
+ public void displayInstanceProperties(String namespace)
+ {
+ List types = SDOUtil.getTypes(helperContext, namespace);
+ for (int i = 0; i < types.size(); i++)
+ {
+ Type type = (Type)types.get(i);
+ displayInstanceProperties(type);
+ List properties = type.getProperties();
+ for (int j = 0; j < properties.size(); j++)
+ {
+ Property property = (Property)properties.get(j);
+ displayInstanceProperties(property);
+ }
+ System.out.println("**************************************");
+ }
+ }
+
+}
diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/MixedTypeTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/MixedTypeTestCase.java new file mode 100644 index 0000000000..806662a83c --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/MixedTypeTestCase.java @@ -0,0 +1,89 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.net.URL; + +import commonj.sdo.DataObject; +import commonj.sdo.Sequence; +import commonj.sdo.Type; +import commonj.sdo.helper.DataFactory; +import commonj.sdo.helper.TypeHelper; +import commonj.sdo.helper.XMLHelper; +import commonj.sdo.helper.XSDHelper; +import junit.framework.TestCase; + + +public class MixedTypeTestCase extends TestCase { + private final String TEST_MODEL = "/mixed.xsd"; + private final String TEST_NAMESPACE = "http://www.example.com/mixed"; + private final String TEST_DATA = "/mixed.xml"; + + /** + * Sequenced type SDO 2 test. + */ + public void testSequencedType() throws IOException { + Type quoteType = TypeHelper.INSTANCE.getType(TEST_NAMESPACE, "MixedQuote"); + DataObject quote = DataFactory.INSTANCE.create(quoteType); + + Sequence sequence = quote.getSequence(); + + sequence.add("\n "); + + quote.setString("symbol", "fbnt"); + + sequence.add("\n "); + + quote.setString("companyName", "FlyByNightTechnology"); + + sequence.add("\n some text\n "); + + DataObject child = quote.createDataObject("quotes"); + child.setBigDecimal("price", new BigDecimal("2000.0")); + + sequence.add("\n more text\n "); + + // quote.setBigDecimal("price", new BigDecimal("1000.0")); + sequence.add("price", new BigDecimal("1000.0")); + + sequence.add("\n"); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + XMLHelper.INSTANCE.save(quote, TEST_NAMESPACE, "mixedStockQuote", baos); + + assertTrue(TestUtil.equalXmlFiles(new ByteArrayInputStream(baos.toByteArray()), getClass().getResource(TEST_DATA))); + } + + protected void setUp() throws Exception { + super.setUp(); + + // Populate the meta data for the test (Stock Quote) model + URL url = getClass().getResource(TEST_MODEL); + InputStream inputStream = url.openStream(); + XSDHelper.INSTANCE.define(inputStream, url.toString()); + inputStream.close(); + } +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/NeverStaleChangeSummaryTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/NeverStaleChangeSummaryTestCase.java new file mode 100644 index 0000000000..69c8e447df --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/NeverStaleChangeSummaryTestCase.java @@ -0,0 +1,76 @@ +/**
+ *
+ * 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.
+ */
+package org.apache.tuscany.sdo.test;
+
+import java.io.InputStream;
+import java.net.URL;
+
+import junit.framework.TestCase;
+
+import commonj.sdo.ChangeSummary;
+import commonj.sdo.DataObject;
+import commonj.sdo.Type;
+import commonj.sdo.helper.DataFactory;
+import commonj.sdo.helper.TypeHelper;
+import commonj.sdo.helper.XSDHelper;
+
+public class NeverStaleChangeSummaryTestCase extends TestCase {
+ private final String TEST_MODEL = "/simpleWithChangeSummary.xsd";
+ private final String TEST_NAMESPACE = "http://www.example.com/simpleCS";
+
+ /**
+ * Simple ChangeSummary test.
+ */
+ public void testChangeSummary() throws Exception {
+ Type quoteType = TypeHelper.INSTANCE.getType(TEST_NAMESPACE, "RootQuote");
+ DataObject quote = DataFactory.INSTANCE.create(quoteType);
+
+ ChangeSummary cs = quote.getChangeSummary();
+
+ // Begin logging changes
+ //
+ cs.beginLogging();
+
+ DataObject child = quote.createDataObject("quotes");
+ cs.isCreated(child);
+ child = quote.createDataObject("quotes");
+ assertTrue(cs.isCreated(child));
+
+ // Stop logging changes and print the resulting data graph to stdout
+ //
+ cs.endLogging();
+
+ cs.isCreated(child);
+
+ cs.undoChanges();
+
+ assertFalse(cs.isCreated(child));
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ // Populate the meta data for the test (Stock Quote) model
+ URL url = getClass().getResource(TEST_MODEL);
+ InputStream inputStream = url.openStream();
+ XSDHelper.INSTANCE.define(inputStream, url.toString());
+ inputStream.close();
+ }
+}
\ No newline at end of file diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/OpenTypeTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/OpenTypeTestCase.java new file mode 100644 index 0000000000..74570d3b43 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/OpenTypeTestCase.java @@ -0,0 +1,110 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.net.URL; +import java.util.Iterator; + +import org.apache.tuscany.sdo.util.SDOUtil; + +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.XMLHelper; +import commonj.sdo.helper.XSDHelper; +import junit.framework.TestCase; + + +public class OpenTypeTestCase extends TestCase { + private HelperContext hc; + private TypeHelper th; + private XSDHelper xsdh; + private XMLHelper xmlh; + private DataFactory df; + private final String TEST_MODEL = "/open.xsd"; + private final String TEST_NAMESPACE = "http://www.example.com/open"; + private final String TEST_DATA = "/open.xml"; + + /** + * Open content SDO 2 test. + */ + public void testOpenType() throws IOException { + Type quoteType = th.getType(TEST_NAMESPACE, "OpenQuote"); + DataObject quote = df.create(quoteType); + + quote.setString("symbol", "s1"); + + for (Iterator iter = quote.getInstanceProperties().iterator(); iter.hasNext();) { + Property property = (Property) iter.next(); + } + + Property companyProperty = xsdh.getGlobalProperty(TEST_NAMESPACE, "company", true); + DataObject company = quote.createDataObject(companyProperty); + company.setString("name", "FlyByNightTechnology"); + + Property priceProperty = xsdh.getGlobalProperty(TEST_NAMESPACE, "price", true); + quote.getList(priceProperty).add(new BigDecimal("1000.0")); + + for (Iterator iter = quote.getInstanceProperties().iterator(); iter.hasNext();) { + Property property = (Property) iter.next(); + } + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + xmlh.save(quote, TEST_NAMESPACE, "openStockQuote", baos); + + assertTrue(TestUtil.equalXmlFiles(new ByteArrayInputStream(baos.toByteArray()), getClass().getResource(TEST_DATA))); + } + + + public void testOpenType_Tuscany_396() throws IOException { + Type quoteType = th.getType(TEST_NAMESPACE, "OpenQuote2"); + DataObject quote = df.create(quoteType); + + Property priceProperty = xsdh.getGlobalProperty(TEST_NAMESPACE, "price", true); + // the importance of this is that the maxOccurs=1 attribute on the xsd:any + // allows is to use the !isMany getters and setters for open content + quote.set(priceProperty, new BigDecimal("1000.0")); + + } + + protected void setUp() throws Exception { + super.setUp(); + + // Populate the meta data for the test (Stock Quote) model + URL url = getClass().getResource(TEST_MODEL); + InputStream inputStream = url.openStream(); + hc = SDOUtil.createHelperContext(); + th = hc.getTypeHelper(); + xsdh = hc.getXSDHelper(); + df = hc.getDataFactory(); + xmlh = hc.getXMLHelper(); + hc.getXSDHelper().define(inputStream, url.toString()); + inputStream.close(); + } +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SchemaLocationTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SchemaLocationTestCase.java new file mode 100644 index 0000000000..eaec327007 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SchemaLocationTestCase.java @@ -0,0 +1,48 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.io.IOException; +import java.util.*; + +import org.apache.tuscany.sdo.SDOPackage; +import org.apache.tuscany.sdo.util.SDOUtil; + +import junit.framework.TestCase; + +import commonj.sdo.helper.*; + +public class SchemaLocationTestCase extends TestCase { + private final String TEST_XML_DOCUMENT = "/SchemaLocationTestCase.xml"; + + /** + * This method will load an xml document consisting of a xsi:schemaLocation and xsi:noNamespaceSchemaLocation defined. It will then use the + * XMLDocument API to get and set the schemaLocation property. + * + * @throws IOException + */ + public void testSchemaLocation() throws IOException { + // load the xml document which has xsi:noNamespaceSchemaLocation and xsi:schemaLocation defined + Map options = new HashMap(); + options.put(SDOUtil.XML_LOAD_SCHEMA, Boolean.TRUE); + XMLDocument doc = XMLHelper.INSTANCE.load(getClass().getResourceAsStream(TEST_XML_DOCUMENT), "whatever", options); + assertNotSame(doc.getRootObject().getType(), SDOPackage.eINSTANCE.getAnyTypeDataObject()); + } +}
\ No newline at end of file diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SequenceTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SequenceTestCase.java new file mode 100644 index 0000000000..b547f45d1c --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SequenceTestCase.java @@ -0,0 +1,100 @@ +/**
+ *
+ * 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.
+ */
+package org.apache.tuscany.sdo.test;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+import commonj.sdo.Sequence;
+import commonj.sdo.Type;
+import commonj.sdo.helper.HelperContext;
+import commonj.sdo.helper.XSDHelper;
+
+public class SequenceTestCase extends TestCase {
+ HelperContext hc;
+ Type type;
+ Property localA, choiceX, choiceY, localB, open;
+
+ String xml = "<schema xmlns=\"http://www.w3.org/2001/XMLSchema\" targetNamespace=\"testNS\" xmlns:tns=\"testNS\">"+
+ "<element name=\"open\" type=\"string\"/>"+
+ "<complexType name=\"Sequenced\">"+
+ "<sequence>"+
+ "<element name=\"localA\" type=\"string\" maxOccurs=\"unbounded\"/>"+
+ "<choice maxOccurs=\"unbounded\">"+
+ "<element name=\"choiceX\" type=\"string\"/>"+
+ "<element name=\"choiceY\" type=\"string\"/>"+
+ "</choice>"+
+ "<element name=\"localB\" type=\"string\"/>"+
+ "<any namespace=\"##any\" maxOccurs=\"unbounded\"/>"+
+ "</sequence>"+
+ "<anyAttribute/>"+
+ "</complexType>"+
+ "</schema>";
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ hc = SDOUtil.createHelperContext();
+ hc.getXSDHelper().define(xml);
+ type = hc.getTypeHelper().getType("testNS", "Sequenced");
+ localA = type.getProperty("localA");
+ choiceX = type.getProperty("choiceX");
+ choiceY = type.getProperty("choiceY");
+ localB = type.getProperty("localB");
+ XSDHelper xsdHelper = hc.getXSDHelper();
+ open = xsdHelper.getGlobalProperty("testNS", "open", true);
+ }
+
+ public void testSequenced() {
+ DataObject dataObject = hc.getDataFactory().create(type);
+ Sequence sequence = dataObject.getSequence();
+
+ sequence.add(choiceX, "x1");
+ sequence.add(0, localA, "a");
+ sequence.add(choiceY, "y1");
+ sequence.add(choiceX, "x2");
+ sequence.add(localB, "b");
+ sequence.add(open, "open");
+
+ List list = dataObject.getList(localA);
+ assertEquals(list.size(), 1);
+ assertEquals(list.get(0), "a");
+
+ assertEquals(dataObject.getString(localB), "b");
+
+ list = dataObject.getList(choiceX);
+ assertEquals(list.size(), 2);
+ assertEquals(list.get(0), "x1");
+ assertEquals(list.get(1), "x2");
+
+ list = dataObject.getList(choiceY);
+ assertEquals(list.size(), 1);
+ assertEquals(list.get(0), "y1");
+
+ list = dataObject.getList(open);
+ assertEquals(list.size(), 1);
+ assertEquals(list.get(0), "open");
+ }
+
+}
diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SerializeTypesTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SerializeTypesTestCase.java new file mode 100644 index 0000000000..7fe1196eb6 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SerializeTypesTestCase.java @@ -0,0 +1,190 @@ +/**
+ *
+ * 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.
+ */
+package org.apache.tuscany.sdo.test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sdo.api.SDOUtil;
+
+import commonj.sdo.DataGraph;
+import commonj.sdo.DataObject;
+import commonj.sdo.Type;
+import commonj.sdo.helper.DataFactory;
+import commonj.sdo.helper.HelperContext;
+import commonj.sdo.helper.TypeHelper;
+import commonj.sdo.helper.XMLDocument;
+
+public class SerializeTypesTestCase extends TestCase {
+
+ HelperContext hc;
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ hc = SDOUtil.createHelperContext();
+ }
+
+ public void testSerializeTypesRoundTrip() throws Exception {
+ TypeHelper types = hc.getTypeHelper();
+ DataFactory factory = hc.getDataFactory();
+
+ Type intType = types.getType("commonj.sdo", "Int");
+ Type stringType = types.getType("commonj.sdo", "String");
+
+ // create a new Type for Addresses
+ DataObject addressType = factory.create("commonj.sdo", "Type");
+ addressType.set("uri", "http://example.com/address");
+ addressType.set("name", "Address");
+
+ // create a address street property
+ DataObject addrStProperty = addressType.createDataObject("property");
+ addrStProperty.set("name", "addrSt");
+ addrStProperty.set("type", stringType);
+
+ // create a new Type for Customers
+ DataObject customerType = factory.create("commonj.sdo", "Type");
+ customerType.set("uri", "http://example.com/customer");
+ customerType.set("name", "Customer");
+
+ // create a customer number property
+ DataObject custNumProperty = customerType.createDataObject("property");
+ custNumProperty.set("name", "custNum");
+ custNumProperty.set("type", intType);
+
+ // create a first name property
+ DataObject firstNameProperty = customerType.createDataObject("property");
+ firstNameProperty.set("name", "firstName");
+ firstNameProperty.set("type", stringType);
+
+ // create a last name property
+ DataObject lastNameProperty = customerType.createDataObject("property");
+ lastNameProperty.set("name", "lastName");
+ lastNameProperty.set("type", stringType);
+
+ // create an address property
+ DataObject addressProperty = customerType.createDataObject("property");
+ addressProperty.set("name", "address");
+ addressProperty.set("type", addressType);
+ addressProperty.setBoolean("containment", true);
+
+ // now define the Address and Customer type so that addresses and customers can be made
+ List types2define = new ArrayList();
+ types2define.add(addressType);
+ types2define.add(customerType);
+ List typesDefined = types.define(types2define);
+
+ // Create an empty data graph and add a root object, an instance of customerType
+ //
+
+ DataGraph dataGraph = SDOUtil.createDataGraph();
+ Type customerTypeDefined = (Type) typesDefined.get(1);
+ DataObject customer1 = dataGraph.createRootObject(customerTypeDefined);
+
+ customer1.setInt("custNum", 1);
+ customer1.set("firstName", "John");
+ customer1.set("lastName", "Adams");
+ DataObject address = customer1.createDataObject("address");
+ address.set("addrSt", "577 Airport Blvd");
+
+ SDOUtil.registerDataGraphTypes(dataGraph, typesDefined);
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ SDOUtil.saveDataGraph(dataGraph, baos, null);
+ //SDOUtil.saveDataGraph(dataGraph, System.out, null);
+
+ byte[] serialized = baos.toByteArray();
+ ByteArrayInputStream bais = new ByteArrayInputStream(serialized);
+ DataGraph loadedDataGraph = SDOUtil.loadDataGraph(bais, null, hc);
+
+ DataObject loadedRootObject = loadedDataGraph.getRootObject();
+ assertNotSame(loadedRootObject.getType(), customer1.getType());
+
+ // EqualityHelper requires same Type
+ assertEquals(loadedRootObject.getInt("custNum"), customer1.getInt("custNum"));
+ assertEquals(loadedRootObject.get("firstName"), customer1.get("firstName"));
+ assertEquals(loadedRootObject.get("lastName"), customer1.get("lastName"));
+ DataObject loadedAddress = loadedRootObject.getDataObject("address");
+ assertEquals(loadedAddress.get("addrSt"), address.get("addrSt"));
+ }
+
+ private String xsdString =
+ "<xsd:schema targetNamespace=\"http://www.example.com/simple\" " +
+ "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " +
+ "xmlns:simple=\"http://www.example.com/simple\"> " +
+ "<xsd:element name=\"bytesTypeTest\" type=\"simple:BytesTypeTest\"/> " +
+ "<xsd:complexType name=\"BytesTypeTest\"> " +
+ "<xsd:sequence> " +
+ "<xsd:element name=\"base64Binary\" type=\"xsd:base64Binary\"/> " +
+ "<xsd:element name=\"hexBinary\" type=\"xsd:hexBinary\"/> " +
+ "</xsd:sequence> " +
+ "</xsd:complexType> " +
+ "</xsd:schema>";
+
+
+ private String testString = "Hello World";
+ private String testStringInBase64 = "SGVsbG8gV29ybGQ=";
+ private String testStringInHex = "48656C6C6F20576F726C64";
+
+ public void testSerializeXSDBase64BinaryRoundTrip() throws Exception {
+ hc.getXSDHelper().define(xsdString);
+
+ DataObject typeTest = hc.getDataFactory().create("http://www.example.com/simple", "BytesTypeTest");
+ typeTest.setBytes("base64Binary", testString.getBytes());
+
+ String output = hc.getXMLHelper().save(typeTest, typeTest.getType().getURI(), "bytesTypeTest");
+
+ String startTag = "<base64Binary>";
+ String endTag = "</base64Binary>";
+ int start = output.indexOf(startTag) + startTag.length();
+ int end = output.indexOf(endTag);
+
+ String value = output.substring(start, end);
+ assertEquals(testStringInBase64, value);
+
+ XMLDocument xmlDoc = hc.getXMLHelper().load(output);
+ typeTest = xmlDoc.getRootObject();
+ assertEquals(testString, new String(typeTest.getBytes("base64Binary")));
+ }
+
+ public void testSerializeXSDHexBinaryRoundTrip() throws Exception {
+ hc.getXSDHelper().define(xsdString);
+
+ DataObject typeTest = hc.getDataFactory().create("http://www.example.com/simple", "BytesTypeTest");
+ typeTest.setBytes("hexBinary", testString.getBytes());
+
+ String output = hc.getXMLHelper().save(typeTest, typeTest.getType().getURI(), "bytesTypeTest");
+
+ String startTag = "<hexBinary>";
+ String endTag = "</hexBinary>";
+ int start = output.indexOf(startTag) + startTag.length();
+ int end = output.indexOf(endTag);
+
+ String value = output.substring(start, end);
+ assertEquals(testStringInHex, value);
+
+ XMLDocument xmlDoc = hc.getXMLHelper().load(output);
+ typeTest = xmlDoc.getRootObject();
+ assertEquals(testString, new String(typeTest.getBytes("hexBinary")));
+ }
+}
diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SimpleCopyTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SimpleCopyTestCase.java new file mode 100644 index 0000000000..36f038d779 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SimpleCopyTestCase.java @@ -0,0 +1,71 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +import commonj.sdo.DataObject; +import commonj.sdo.helper.CopyHelper; +import commonj.sdo.helper.XMLDocument; +import commonj.sdo.helper.XMLHelper; +import commonj.sdo.helper.XSDHelper; +import junit.framework.TestCase; + +public class SimpleCopyTestCase extends TestCase { + + private final String TEST_MODEL = "/simple.xsd"; + private final String TEST_NAMESPACE = "http://www.example.com/simple"; + private final String QUOTE_XML = "/quote.xml"; + private final String SHALLOW_QUOTE_XML = "/shallowquote.xml"; + + public void testSimpleCopy() throws IOException { + XMLDocument doc = XMLHelper.INSTANCE.load(getClass().getResourceAsStream(QUOTE_XML)); + DataObject sdo = doc.getRootObject(); + + DataObject copiedSdo = CopyHelper.INSTANCE.copyShallow(sdo); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + XMLHelper.INSTANCE.save(copiedSdo, TEST_NAMESPACE, "stockQuote", baos); + assertTrue(TestUtil.equalXmlFiles(new ByteArrayInputStream(baos.toByteArray()), getClass().getResource(SHALLOW_QUOTE_XML))); + assertFalse(TestUtil.equalXmlFiles(new ByteArrayInputStream(baos.toByteArray()), getClass().getResource(QUOTE_XML))); + + copiedSdo = CopyHelper.INSTANCE.copy(sdo); + + baos.reset(); + XMLHelper.INSTANCE.save(copiedSdo, TEST_NAMESPACE, "stockQuote", baos); + assertFalse(TestUtil.equalXmlFiles(new ByteArrayInputStream(baos.toByteArray()), getClass().getResource(SHALLOW_QUOTE_XML))); + assertTrue(TestUtil.equalXmlFiles(new ByteArrayInputStream(baos.toByteArray()), getClass().getResource(QUOTE_XML))); + } + + protected void setUp() throws Exception { + super.setUp(); + + // Populate the meta data for the test (Stock Quote) model + URL url = getClass().getResource(TEST_MODEL); + InputStream inputStream = url.openStream(); + XSDHelper.INSTANCE.define(inputStream, url.toString()); + inputStream.close(); + } + +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SimpleDynamicTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SimpleDynamicTestCase.java new file mode 100644 index 0000000000..55aae9d396 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SimpleDynamicTestCase.java @@ -0,0 +1,123 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.net.URL; + +import junit.framework.TestCase; + +import org.apache.tuscany.sdo.util.SDOUtil; + +import commonj.sdo.DataObject; +import commonj.sdo.Type; +import commonj.sdo.helper.HelperContext; +import commonj.sdo.helper.TypeHelper; + + +public class SimpleDynamicTestCase extends TestCase { + private final String TEST_MODEL = "/simple.xsd"; + private final String TEST_NAMESPACE = "http://www.example.com/simple"; + private final String QUOTE_XML = "/quote.xml"; + + //private final String TEST_MODEL2 = "/simple2.xsd"; + //private final String TEST_NAMESPACE2 = "http://www.example.com/simple2"; + //private final String QUOTE_XML2 = "/quote2.xml"; + + HelperContext hc; + TypeHelper th; + + /** + * Simple Dynamic SDO 2 test. + */ + public void testDynamic() throws IOException { + Type quoteType = th.getType(TEST_NAMESPACE, "Quote"); + DataObject quote = hc.getDataFactory().create(quoteType); + + quote.setString("symbol", "fbnt"); + quote.setString("companyName", "FlyByNightTechnology"); + quote.setBigDecimal("price", new BigDecimal("1000.0")); + quote.setBigDecimal("open1", new BigDecimal("1000.0")); + quote.setBigDecimal("high", new BigDecimal("1000.0")); + quote.setBigDecimal("low", new BigDecimal("1000.0")); + quote.setDouble("volume", 1000); + quote.setDouble("change1", 1000); + + DataObject child = quote.createDataObject("quotes"); + child.setBigDecimal("price", new BigDecimal("2000.0")); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + hc.getXMLHelper().save(quote, TEST_NAMESPACE, "stockQuote", baos); + + assertFalse(quote.isSet("undefined")); + assertSame(quote.get("undefined"), null); + + assertTrue(TestUtil.equalXmlFiles(new ByteArrayInputStream(baos.toByteArray()), getClass().getResource(QUOTE_XML))); + } + + /* + public void dontTestResolveXSDWithoutSchemaLocation() throws IOException { + + URL url = getClass().getResource(TEST_MODEL2); + InputStream inputStream = url.openStream(); + hc.getXSDHelper().define(inputStream, null); + inputStream.close(); + + Type quote2Type = th.getType(TEST_NAMESPACE2, "Quote2"); + DataObject quote2 = hc.getDataFactory().create(quote2Type); + + quote2.setString("symbol", "fbnt"); + quote2.setString("companyName", "FlyByNightTechnology"); + quote2.setBigDecimal("price", new BigDecimal("1000.0")); + quote2.setBigDecimal("open1", new BigDecimal("1000.0")); + quote2.setBigDecimal("high", new BigDecimal("1000.0")); + quote2.setBigDecimal("low", new BigDecimal("1000.0")); + quote2.setDouble("volume", 1000); + quote2.setDouble("change1", 1000); + + DataObject child = quote2.createDataObject("quotes"); + child.setBigDecimal("price", new BigDecimal("2000.0")); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + hc.getXMLHelper().save(quote2, TEST_NAMESPACE2, "stockQuote", System.out); + } + */ + + protected void setUp() throws Exception { + super.setUp(); + + hc = SDOUtil.createHelperContext(); + th = hc.getTypeHelper(); + + // Populate the meta data for the test (Stock Quote) model + URL url = getClass().getResource(TEST_MODEL); + InputStream inputStream = url.openStream(); + hc.getXSDHelper().define(inputStream, url.toString()); + inputStream.close(); + + + } + +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SimpleEqualityTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SimpleEqualityTestCase.java new file mode 100644 index 0000000000..c3fffa4f10 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SimpleEqualityTestCase.java @@ -0,0 +1,63 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +import commonj.sdo.DataObject; +import commonj.sdo.helper.EqualityHelper; +import commonj.sdo.helper.XMLDocument; +import commonj.sdo.helper.XMLHelper; +import commonj.sdo.helper.XSDHelper; +import junit.framework.TestCase; + +public class SimpleEqualityTestCase extends TestCase { + private static final String TEST_MODEL = "/simple.xsd"; + private static final String QUOTE_XML = "/quote.xml"; + private static final String SHALLOW_QUOTE_XML = "/shallowquote.xml"; + + public void testEquality() throws IOException { + + XMLDocument doc = XMLHelper.INSTANCE.load(getClass().getResourceAsStream(QUOTE_XML)); + DataObject sdo = doc.getRootObject(); + + doc = XMLHelper.INSTANCE.load(getClass().getResourceAsStream(SHALLOW_QUOTE_XML)); + DataObject shallowSdo = doc.getRootObject(); + + boolean result = EqualityHelper.INSTANCE.equalShallow(sdo, shallowSdo); + assertTrue(result); + + result = EqualityHelper.INSTANCE.equal(sdo, shallowSdo); + assertFalse(result); + } + + + protected void setUp() throws Exception { + super.setUp(); + + // Populate the meta data for the test (Stock Quote) model + URL url = getClass().getResource(TEST_MODEL); + InputStream inputStream = url.openStream(); + XSDHelper.INSTANCE.define(inputStream, url.toString()); + inputStream.close(); + } +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SubstitutionValuesTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SubstitutionValuesTestCase.java new file mode 100644 index 0000000000..b473503122 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/SubstitutionValuesTestCase.java @@ -0,0 +1,47 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.io.IOException; +import java.net.URL; + +import junit.framework.TestCase; + +import org.apache.tuscany.sdo.util.SDOUtil; + +import commonj.sdo.DataObject; +import commonj.sdo.Type; +import commonj.sdo.helper.DataFactory; +import commonj.sdo.helper.XSDHelper; + +public final class SubstitutionValuesTestCase extends TestCase +{ + public void test() throws IOException + { + URL url = getClass().getResource("/SubstitutionValues.xsd"); + XSDHelper.INSTANCE.define(url.openStream(), url.toString()); + + final DataObject object = DataFactory.INSTANCE.create("http://www.apache.org/tuscany/SubstitutionValues", "TestObject"); + final Type type = object.getType(); + + assertNotNull( SDOUtil.getSubstitutionValues(object, type.getProperty("groupHead"))); + assertNull( SDOUtil.getSubstitutionValues(object, type.getProperty("nonGroupHead"))); + } +}
\ No newline at end of file diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/TestUtil.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/TestUtil.java new file mode 100644 index 0000000000..a7ab3f954a --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/TestUtil.java @@ -0,0 +1,285 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.FactoryConfigurationError; +import javax.xml.parsers.ParserConfigurationException; + +import org.w3c.dom.Document; +import org.w3c.dom.DocumentType; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +public class TestUtil +{ + private static void getAllNodes(NodeList nodeList, List nodes) + { + int length = nodeList.getLength(); + if (length == 0) + { + return; + } + + for (int i=0; i<length; i++) + { + Node node = nodeList.item(i); + nodes.add(node); + getAllNodes(node.getChildNodes(), nodes); + } // for + } + + private static boolean equalNamedNodeMap(NamedNodeMap mapA, NamedNodeMap mapB) { + if (mapA == null) { + if (mapB == null) { + return true; + } + return false; + } + if (mapA.getLength() != mapB.getLength()) { + return false; + } + for (int i = 0; i < mapA.getLength(); i++) { + Node trialNode = mapA.item(i); + if (trialNode == null) { + return false; + } + Node checkNode = mapB.getNamedItem(trialNode.getNodeName()); + if (checkNode == null) { + return false; + } + if (!equalNode(trialNode, checkNode)) { + return false; + } + } + return true; + } + + private static boolean equalNode(Node nodeA, Node nodeB) { + if (nodeA == null) { + if (nodeB == null) { + return true; + } + return false; + } + // following is intended to provide same function as 1.5 isEqualNode() + if (nodeA.getNodeType() != nodeB.getNodeType()) { + return false; + } + if (!equalString(nodeA.getNodeName(), nodeB.getNodeName())) { + return false; + } + if (!equalString(nodeA.getLocalName(), nodeB.getLocalName())) { + return false; + } + if (!equalString(nodeA.getNamespaceURI(), nodeB.getNamespaceURI())) { + return false; + } + if (!equalString(nodeA.getNamespaceURI(), nodeB.getNamespaceURI())) { + return false; + } + if (!equalString(nodeA.getPrefix(), nodeB.getPrefix())) { + return false; + } + if (!equalString(nodeA.getNodeValue(), nodeB.getNodeValue())) { + return false; + } + if (!equalNamedNodeMap(nodeA.getAttributes(), nodeB.getAttributes())) { + return false; + } + if (!equalNodeList(nodeA.getChildNodes(), nodeB.getChildNodes())) { + return false; + } + if (nodeA.getNodeType() == Node.DOCUMENT_TYPE_NODE) { + DocumentType documentTypeA = (DocumentType) nodeA; + DocumentType documentTypeB = (DocumentType) nodeB; + if (!equalString(documentTypeA.getPublicId(), documentTypeB.getPublicId())) { + return false; + } + if (!equalString(documentTypeA.getSystemId(), documentTypeB.getSystemId())) { + return false; + } + if (!equalString(documentTypeA.getInternalSubset(), documentTypeB.getInternalSubset())) { + return false; + } + if (!equalNamedNodeMap(documentTypeA.getEntities(), documentTypeB.getEntities())) { + return false; + } + if (!equalNamedNodeMap(documentTypeA.getNotations(), documentTypeB.getNotations())) { + return false; + } + } + return true; + } + + private static boolean equalNodeList(NodeList nodeListA, NodeList nodeListB) { + if (nodeListA == null) { + if (nodeListB == null) { + return true; + } + return false; + } + return equalNodes(nodeListA, nodeListB); + } + + private static boolean equalString(String stringA, String stringB) { + if (stringA == null) { + if (stringB == null) { + return true; + } + return false; + } + return stringA.equals(stringB); + } + + private static boolean equalNodes(NodeList sourceNodeList, NodeList targetNodeList) + { + ArrayList sourceNodes = new ArrayList(); + ArrayList targetNodes = new ArrayList(); + + getAllNodes(sourceNodeList, sourceNodes); + getAllNodes(targetNodeList, targetNodes); + + int sourceLength = sourceNodes.size(); + int targetLength = targetNodes.size(); + + if (sourceLength != targetLength) + { + return false; + } + + for (int i=0; i<sourceLength; i++) + { + Node sourceNode = (Node)sourceNodes.get(i); + Node targetNode = (Node)targetNodes.get(i); + + /* remove comment when migrated to Java 1.5 + if (!sourceNode.isEqualNode(targetNode)) + { + return false; + } + */ + // following is intended as 1.4 equivalent of isEqualNode() + if (!equalNode(sourceNode, targetNode)) + { + return false; + } + } // for + + return true; + } + + public static boolean equalXmlFiles(URL source, URL target) + { + try { + return equalXmlFiles(source.openStream(), target.openStream()); + } + catch (IOException e) + { + return false; + } + } + + public static boolean equalXmlFiles(InputStream sourceStream, URL target) + { + try { + return equalXmlFiles(sourceStream, target.openStream()); + } + catch (IOException e) + { + return false; + } + } + + public static boolean equalXmlFiles(URL source, InputStream targetStream) + { + try { + return equalXmlFiles(source.openStream(), targetStream); + } + catch (IOException e) + { + return false; + } + } + + public static boolean equalXmlFiles(InputStream sourceStream, InputStream targetStream) + { + DocumentBuilder builder; + Document sourceDocument; + Document targetDocument; + + try { + builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + sourceDocument = builder.parse(sourceStream); + targetDocument = builder.parse(targetStream); + } + catch (FactoryConfigurationError fce) { + return false; + } + catch (ParserConfigurationException ce) { + return false; + } + catch (SAXException se) + { + return false; + } + catch (IOException ie) + { + return false; + } + + sourceDocument.normalize(); + targetDocument.normalize(); + + /* remove comment when migrated to Java 1.5 + if (!sourceDocument.getXmlVersion().equals(targetDocument.getXmlVersion())) + { + return false; + } + + String sourceXmlEncoding = sourceDocument.getXmlEncoding(); + String targetXmlEncoding = targetDocument.getXmlEncoding(); + + if (sourceXmlEncoding != null && targetXmlEncoding != null && + sourceXmlEncoding.equalsIgnoreCase(targetXmlEncoding)) + { + // continue + } + else + { + return false; + } + */ + + NodeList sourceNodes = sourceDocument.getChildNodes(); + NodeList targetNodes = targetDocument.getChildNodes(); + + return equalNodes(sourceNodes, targetNodes); + } +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/TypeConversionTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/TypeConversionTestCase.java new file mode 100644 index 0000000000..98c1d3e51b --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/TypeConversionTestCase.java @@ -0,0 +1,892 @@ +/** + * + * 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. + */ + +package org.apache.tuscany.sdo.test; + +import junit.framework.TestCase; + + +import java.io.InputStream; +import java.lang.reflect.Method; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.Comparator; +import java.util.Date; +import java.util.TimeZone; + +import org.apache.tuscany.sdo.util.DataObjectUtil; + +import commonj.sdo.DataObject; +import commonj.sdo.Property; +import commonj.sdo.Type; +import commonj.sdo.helper.DataFactory; +import commonj.sdo.helper.TypeHelper; +import commonj.sdo.helper.XSDHelper; + +public class TypeConversionTestCase extends TestCase +{ + // The following constants are used to get Types from XSDs + + private static final String TEST_MODEL = "/api_test.xsd"; + private static final String TEST_NAMESPACE = "http://www.example.com/api_test"; + + // The following constants describe the index for the fields in api_test.xsd. + + private static final int STRING_VAL_INDEX = 0; + private static final int BOOLEAN_VAL_INDEX = 1; + private static final int BYTE_VAL_INDEX = 3; + private static final int DECIMAL_VAL_INDEX = 5; + private static final int INT_VAL_INDEX = 7; + private static final int FLOAT_VAL_INDEX = 8; + private static final int DOUBLE_VAL_INDEX = 9; + private static final int DATE_VAL_INDEX = 10; + private static final int SHORT_VAL_INDEX = 11; + private static final int LONG_VAL_INDEX = 12; + private static final int BYTES_VAL_INDEX = 14; + private static final int INTEGER_VAL_INDEX = 15; + private static final int CHAR_VAL_INDEX = 16; + + // The following variables are Method arrays. Each array refers to a specific get<Type>, but within + // the array exist the get<Type>(index), get<Type>(property), and get<Type>(path). Rather than + // referring to each of the three in every circumstance, the more compact array appears. + + private static ConversionType TO_BOOLEAN = new ConversionType("getBoolean"); + private static ConversionType TO_BYTE = new ConversionType("getByte"); + private static ConversionType TO_CHAR = new ConversionType("getChar"); + private static ConversionType TO_DOUBLE = new ConversionType("getDouble"); + private static ConversionType TO_FLOAT = new ConversionType("getFloat"); + private static ConversionType TO_INT = new ConversionType("getInt"); + private static ConversionType TO_LONG = new ConversionType("getLong"); + private static ConversionType TO_SHORT = new ConversionType("getShort"); + private static ConversionType TO_BYTES = new ConversionType("getBytes"); + private static ConversionType TO_BIGDECIMAL = new ConversionType("getBigDecimal"); + private static ConversionType TO_BIGINTEGER = new ConversionType("getBigInteger"); + private static ConversionType TO_DATAOBJECT = new ConversionType("getDataObject"); + private static ConversionType TO_DATE = new ConversionType("getDate"); + private static ConversionType TO_STRING = new ConversionType("getString"); + private static ConversionType TO_LIST = new ConversionType("getList"); + private static ConversionType TO_SEQUENCE = new ConversionType("getSequence"); + + private static GeneralComparator COMPARE_ANY; + + // There will be several instances where a Property must be passed as a parameter. Have available the Type + // to call getProperty() as needed. + + private static Type API_TEST_TYPE; + + // The default constructor establishes each of the Method and Method[] variables. + + public TypeConversionTestCase() throws Exception + { + COMPARE_ANY = new GeneralComparator(); + + // Populate the meta data for the test model + URL url = getClass().getResource(TEST_MODEL); + InputStream inputStream = url.openStream(); + XSDHelper.INSTANCE.define(inputStream, url.toString()); + inputStream.close(); + + API_TEST_TYPE = TypeHelper.INSTANCE.getType(TEST_NAMESPACE, "APITest"); + } + + private static class ConversionType + { + // The following constants are used because the getMethod function requires an Class + // array describing the parameters to the functions. + + private static final Class[] INT_CLASS_ARRAY = {int.class}; + private static final Class[] PROPERTY_CLASS_ARRAY = {Property.class}; + private static final Class[] STRING_CLASS_ARRAY = {String.class}; + + Method index_method; + Method property_method; + Method path_method; + + public ConversionType (String method_name) + { + try + { + this.index_method = DataObject.class.getMethod(method_name, INT_CLASS_ARRAY); + this.property_method = DataObject.class.getMethod(method_name, PROPERTY_CLASS_ARRAY); + this.path_method = DataObject.class.getMethod(method_name, STRING_CLASS_ARRAY); + } + catch (NoSuchMethodException e) + { + this.index_method = null; + this.property_method = null; + this.path_method = null; + } + } + + public Method getIndexMethod() + { + return this.index_method; + } + + public Method getPropertyMethod() + { + return this.property_method; + } + + public Method getPathMethod() + { + return this.path_method; + } + } + + // Each instance of Test describes a convert-from type. The index, property and path parms + // will refer to the same field, which is a field of the convert-from type. + + private static class Test + { + DataObject test_obj; + Object[] index_parm; + Object[] property_parm; + Object[] path_parm; + Object expected_value; + String from_type; + + // The constructor prepares a test DataObject and determines how to access the field + // in three different ways - index, property, and path. + + Test(String path, int index) + { + this.test_obj = DataFactory.INSTANCE.create(API_TEST_TYPE); + this.index_parm = new Object[] {new Integer(index)}; + this.property_parm = new Object[] {API_TEST_TYPE.getProperty(path)}; + this.path_parm = new Object[] {path}; + this.expected_value = null; + } + + // The initialize() function establishes the initial value of the test field. + + public void initialize(Class type, String type_name, Object initial_value) throws Exception + { + Class[] classArray = {int.class, type}; + Object[] initValueArray = new Object[] {this.index_parm[0], initial_value}; + + Method setter = DataObject.class.getMethod("set" + type_name, classArray); + setter.invoke(test_obj, initValueArray); + this.expected_value = initial_value; + this.from_type = type_name; + } + + // Attempts the conversion to the specified type, using DataObject.get____(). + // The get___() function can be called with an index, path, and property. attemptConversion() + // calls each of those three. + + public void attemptConversion(ConversionType to_type) throws Exception + { + performConversion(to_type.getIndexMethod(), this.index_parm); + performConversion(to_type.getPathMethod(), this.path_parm); + performConversion(to_type.getPropertyMethod(), this.property_parm); + } + + public void checkConversionException(ConversionType to_type, Class expected_exception) throws Exception + { + boolean index_err, path_err, property_err, consistency_err = false; + + index_err = executeExceptionCase(to_type.getIndexMethod(), this.index_parm, expected_exception); + path_err = executeExceptionCase(to_type.getPathMethod(), this.path_parm, expected_exception); + property_err = executeExceptionCase(to_type.getPropertyMethod(), this.property_parm, expected_exception); + + if (index_err != path_err || path_err != property_err) + consistency_err = true; + else if (index_err == false) + attemptConversion(to_type); + + assertFalse("An exception inconsistency exists for " + to_type.getPathMethod().getName() + " when called " + + "for a " + this.from_type + " property.", consistency_err); + } + + private void performConversion (Method convert, Object[] parm) throws Exception + { + try + { + assertTrue("Conversion did not yield expected value for " + convert.getName() + " on a " + this.from_type + " property.", + COMPARE_ANY.compare(convert.invoke(test_obj, parm), this.expected_value) == 0); + } + catch (Exception e) + { + Throwable cause = e.getCause(); + if (cause == null) + { + System.err.println("An exception of type " + e.getClass() + " occurred while performing " + convert.getName() + + " on a " + this.from_type + " property."); + } + else + { + System.err.println("An exception of type " + cause.getClass() + " occurred while performing " + convert.getName() + + " on a " + this.from_type + " property."); + } + + throw e; + } + + } + + private boolean executeExceptionCase (Method convert, Object[] parm, Class expected_exception) throws Exception + { + boolean exception_thrown = false; + try + { + convert.invoke(test_obj, parm); + } + catch (Exception e) + { + exception_thrown = true; + Throwable cause = e.getCause(); + if (cause == null) + { + assertEquals("An unexpected exception occurred while performing " + convert.getName() + + " on a " + this.from_type + " property.", expected_exception, e.getClass()); + } + else + { + assertEquals("An unexpected exception occurred while performing " + convert.getName() + + " on a " + this.from_type + " property.", expected_exception, cause.getClass()); + } + } + + return exception_thrown; + } + } + + private static class GeneralComparator implements Comparator + { + public int compare(Object obj1, Object obj2) + { + if (obj1.getClass() == obj2.getClass()) + { + if (obj1.equals(obj2)) + return 0; + else + return 1; + } + + else if (obj1.getClass() == Date.class) + { + if (obj2.getClass() == String.class) + { + try + { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy'-'MM'-'dd'T'H':'mm':'ss.S"); + + sdf.setTimeZone(TimeZone.getTimeZone("UTC")); + obj2 = sdf.parse((String) obj2); + + if (obj1.equals(obj2)) + return 0; + } + catch (Exception e) + { + System.out.println(e.getMessage()); + } + + return 1; + } + + else + { + Date temp = (Date) obj1; + + return compare(new Long(temp.getTime()), obj2); + } + + } + + else if (obj2.getClass() == Date.class) + { + return compare(obj2, obj1); + } + + else if (obj1.getClass() == Boolean.class) + { + Boolean temp = (Boolean) obj1; + + if (temp.booleanValue()) + { + if (obj2.toString().equalsIgnoreCase("true")) + return 0; + else + return 1; + } + + else + { + if (obj2.toString().equalsIgnoreCase("true")) + return 1; + else + return 0; + } + } + + else if (obj2.getClass() == Boolean.class) + return compare(obj2, obj1); + + else if (obj1.getClass() == Byte.class || obj2.getClass() == Byte.class) + { + byte b1 = (Double.valueOf(obj1.toString())).byteValue(); + byte b2 = (Double.valueOf(obj2.toString())).byteValue(); + + if (b1 == b2) + return 0; + else if (b1 < b2) + return -1; + else + return 1; + } + + else if (obj1.getClass().toString().charAt(6) == '[') + { + long result = 0; + long multiplier = 1; + + byte[] array = (byte[]) obj1; + for (int i = 0; i < array.length; i++) + { + result += array[array.length - i - 1] * multiplier; + multiplier *= 256; + } + + return compare(obj2, new Long(result)); + } + + else if (obj2.getClass().toString().charAt(6) == '[') + { + return compare(obj2, obj1); + } + + else if (obj1.getClass() == Short.class || obj2.getClass() == Short.class) + { + short s1 = (Double.valueOf(obj1.toString())).shortValue(); + short s2 = (Double.valueOf(obj2.toString())).shortValue(); + + if (s1 == s2) + return 0; + else if (s1 < s2) + return -1; + else + return 1; + } + + else if (obj1.getClass() == Integer.class || obj2.getClass() == Integer.class) + { + int i1 = (Double.valueOf(obj1.toString())).intValue(); + int i2 = (Double.valueOf(obj2.toString())).intValue(); + + if (i1 == i2) + return 0; + else if (i1 < i2) + return -1; + else + return 1; + } + + else if ( obj1.getClass() == Long.class || obj2.getClass() == Long.class + || obj1.getClass() == BigInteger.class || obj2.getClass() == BigInteger.class) + { + long l1 = (Double.valueOf(obj1.toString())).longValue(); + long l2 = (Double.valueOf(obj2.toString())).longValue(); + + if (l1 == l2) + return 0; + else if (l1 < l2) + return -1; + else + return 1; + } + + else if (obj1.getClass() == Float.class || obj2.getClass() == Float.class) + { + float f1 = (Double.valueOf(obj1.toString())).floatValue(); + float f2 = (Double.valueOf(obj2.toString())).floatValue(); + + if (f1 == f2) + return 0; + else if (f1 < f2) + return -1; + else + return 1; + } + + else if (obj1.getClass() == Double.class || obj2.getClass() == Double.class) + { + Double b1 = Double.valueOf(obj1.toString()); + Double b2 = Double.valueOf(obj2.toString()); + + return b1.compareTo(b2); + } + + else if (obj1.getClass() == BigDecimal.class || obj2.getClass() == BigDecimal.class) + { + BigDecimal b1 = new BigDecimal(obj1.toString()); + BigDecimal b2 = new BigDecimal(obj2.toString()); + + return b1.compareTo(b2); + } + + else + { + if (obj1.toString().equals(obj2.toString())) + return 0; + else + return 1; + } + } + + } + + /********************************************************** + * In the following test cases, several instances are commented out. + * For these cases, the test case currently fails. A JIRA issue (TUSCANY-581) has + * been opened to either correct the behavior (then uncomment the lines) or to + * alter the specification against which the test cases were designed (and then + * remove the lines - assuming the alteration is to remove stating the + * nature of the exception). + */ + + public void testBooleanConversion() throws Exception + { + Test FromBoolean = new Test("booleanVal", BOOLEAN_VAL_INDEX); + + FromBoolean.initialize(boolean.class, "Boolean", Boolean.valueOf(true)); + + FromBoolean.attemptConversion(TO_BOOLEAN); + FromBoolean.attemptConversion(TO_STRING); + } + + public void testBooleanExceptions() throws Exception + { + Test FromBoolean = new Test("booleanVal", BOOLEAN_VAL_INDEX); + + FromBoolean.initialize(boolean.class, "Boolean", Boolean.valueOf(true)); + +// FromBoolean.checkConversionException(TO_BYTE, ClassCastException.class); +// FromBoolean.checkConversionException(TO_CHAR, ClassCastException.class); +// FromBoolean.checkConversionException(TO_DOUBLE, ClassCastException.class); +// FromBoolean.checkConversionException(TO_FLOAT, ClassCastException.class); +// FromBoolean.checkConversionException(TO_INT, ClassCastException.class); +// FromBoolean.checkConversionException(TO_LONG, ClassCastException.class); +// FromBoolean.checkConversionException(TO_SHORT, ClassCastException.class); +// FromBoolean.checkConversionException(TO_BYTES, ClassCastException.class); +// FromBoolean.checkConversionException(TO_BIGDECIMAL, ClassCastException.class); +// FromBoolean.checkConversionException(TO_BIGINTEGER, ClassCastException.class); + FromBoolean.checkConversionException(TO_DATAOBJECT, ClassCastException.class); +// FromBoolean.checkConversionException(TO_DATE, ClassCastException.class); + FromBoolean.checkConversionException(TO_LIST, ClassCastException.class); + FromBoolean.checkConversionException(TO_SEQUENCE, ClassCastException.class); + } + + public void testByteConversion() throws Exception + { + Test FromByte = new Test("byteVal", BYTE_VAL_INDEX); + + FromByte.initialize(byte.class, "Byte", Byte.valueOf("-127")); + + FromByte.attemptConversion(TO_BYTE); + FromByte.attemptConversion(TO_DOUBLE); + FromByte.attemptConversion(TO_FLOAT); + FromByte.attemptConversion(TO_INT); + FromByte.attemptConversion(TO_LONG); + FromByte.attemptConversion(TO_SHORT); + FromByte.attemptConversion(TO_STRING); + } + + public void testByteExceptions() throws Exception + { + Test FromByte = new Test("byteVal", BYTE_VAL_INDEX); + + FromByte.initialize(byte.class, "Byte", Byte.valueOf("-127")); + +// FromByte.checkConversionException(TO_BOOLEAN, ClassCastException.class); +// FromByte.checkConversionException(TO_CHAR, ClassCastException.class); +// FromByte.checkConversionException(TO_BYTES, ClassCastException.class); + FromByte.checkConversionException(TO_BIGDECIMAL, ClassCastException.class); + FromByte.checkConversionException(TO_BIGINTEGER, ClassCastException.class); + FromByte.checkConversionException(TO_DATAOBJECT, ClassCastException.class); +// FromByte.checkConversionException(TO_DATE, ClassCastException.class); + FromByte.checkConversionException(TO_LIST, ClassCastException.class); + FromByte.checkConversionException(TO_SEQUENCE, ClassCastException.class); + } + + public void testCharConversion() throws Exception + { + Test FromChar = new Test("charVal", CHAR_VAL_INDEX); + + FromChar.initialize(char.class, "Char", new Character('?')); + + FromChar.attemptConversion(TO_CHAR); + FromChar.attemptConversion(TO_STRING); + } + + public void testCharExceptions() throws Exception + { + Test FromChar = new Test("charVal", CHAR_VAL_INDEX); + + FromChar.initialize(char.class, "Char", new Character('?')); + +// FromChar.checkConversionException(TO_BOOLEAN, ClassCastException.class); +// FromChar.checkConversionException(TO_BYTE, ClassCastException.class); +// FromChar.checkConversionException(TO_DOUBLE, ClassCastException.class); +// FromChar.checkConversionException(TO_FLOAT, ClassCastException.class); +// FromChar.checkConversionException(TO_INT, ClassCastException.class); +// FromChar.checkConversionException(TO_LONG, ClassCastException.class); +// FromChar.checkConversionException(TO_SHORT, ClassCastException.class); +// FromChar.checkConversionException(TO_BYTES, ClassCastException.class); +// FromChar.checkConversionException(TO_BIGDECIMAL, ClassCastException.class); +// FromChar.checkConversionException(TO_BIGINTEGER, ClassCastException.class); + FromChar.checkConversionException(TO_DATAOBJECT, ClassCastException.class); +// FromChar.checkConversionException(TO_DATE, ClassCastException.class); + FromChar.checkConversionException(TO_LIST, ClassCastException.class); + FromChar.checkConversionException(TO_SEQUENCE, ClassCastException.class); + } + + public void testDoubleConversion() throws Exception + { + Test FromDouble = new Test("doubleVal", DOUBLE_VAL_INDEX); + + FromDouble.initialize(double.class, "Double", new Double(Double.MAX_VALUE)); + + FromDouble.attemptConversion(TO_BYTE); + FromDouble.attemptConversion(TO_DOUBLE); + FromDouble.attemptConversion(TO_FLOAT); + FromDouble.attemptConversion(TO_INT); + FromDouble.attemptConversion(TO_LONG); + FromDouble.attemptConversion(TO_SHORT); + FromDouble.attemptConversion(TO_BIGDECIMAL); + FromDouble.attemptConversion(TO_BIGINTEGER); + FromDouble.attemptConversion(TO_STRING); + } + + public void testDoubleExceptions() throws Exception + { + Test FromDouble = new Test("doubleVal", DOUBLE_VAL_INDEX); + + FromDouble.initialize(double.class, "Double", new Double(Double.MAX_VALUE)); + +// FromDouble.checkConversionException(TO_BOOLEAN, ClassCastException.class); +// FromDouble.checkConversionException(TO_CHAR, ClassCastException.class); +// FromDouble.checkConversionException(TO_BYTES, ClassCastException.class); + FromDouble.checkConversionException(TO_DATAOBJECT, ClassCastException.class); +// FromDouble.checkConversionException(TO_DATE, ClassCastException.class); + FromDouble.checkConversionException(TO_LIST, ClassCastException.class); + FromDouble.checkConversionException(TO_SEQUENCE, ClassCastException.class); + } + + public void testFloatConversion() throws Exception + { + Test FromFloat = new Test("floatVal", FLOAT_VAL_INDEX); + + FromFloat.initialize(float.class, "Float", new Float(Float.MIN_VALUE)); + + FromFloat.attemptConversion(TO_BYTE); + FromFloat.attemptConversion(TO_DOUBLE); + FromFloat.attemptConversion(TO_FLOAT); + FromFloat.attemptConversion(TO_INT); + FromFloat.attemptConversion(TO_LONG); + FromFloat.attemptConversion(TO_SHORT); + FromFloat.attemptConversion(TO_BIGDECIMAL); + FromFloat.attemptConversion(TO_BIGINTEGER); + FromFloat.attemptConversion(TO_STRING); + } + + public void testFloatExceptions() throws Exception + { + Test FromFloat = new Test("floatVal", FLOAT_VAL_INDEX); + + FromFloat.initialize(float.class, "Float", new Float(Float.MIN_VALUE)); + +// FromFloat.checkConversionException(TO_BOOLEAN, ClassCastException.class); +// FromFloat.checkConversionException(TO_CHAR, ClassCastException.class); +// FromFloat.checkConversionException(TO_BYTES, ClassCastException.class); + FromFloat.checkConversionException(TO_DATAOBJECT, ClassCastException.class); +// FromFloat.checkConversionException(TO_DATE, ClassCastException.class); + FromFloat.checkConversionException(TO_LIST, ClassCastException.class); + FromFloat.checkConversionException(TO_SEQUENCE, ClassCastException.class); + } + + public void testIntConversion() throws Exception + { + Test FromInt = new Test("intVal", INT_VAL_INDEX); + + FromInt.initialize(int.class, "Int", new Integer(5)); + + FromInt.attemptConversion(TO_BYTE); + FromInt.attemptConversion(TO_DOUBLE); + FromInt.attemptConversion(TO_FLOAT); + FromInt.attemptConversion(TO_INT); + FromInt.attemptConversion(TO_LONG); + FromInt.attemptConversion(TO_SHORT); + FromInt.attemptConversion(TO_BIGDECIMAL); + FromInt.attemptConversion(TO_BIGINTEGER); + FromInt.attemptConversion(TO_STRING); + } + + public void testIntExceptions() throws Exception + { + Test FromInt = new Test("intVal", INT_VAL_INDEX); + + FromInt.initialize(int.class, "Int", new Integer(5)); + +// FromInt.checkConversionException(TO_BOOLEAN, ClassCastException.class); +// FromInt.checkConversionException(TO_CHAR, ClassCastException.class); +// FromInt.checkConversionException(TO_BYTES, ClassCastException.class); + FromInt.checkConversionException(TO_DATAOBJECT, ClassCastException.class); +// FromInt.checkConversionException(TO_DATE, ClassCastException.class); + FromInt.checkConversionException(TO_LIST, ClassCastException.class); + FromInt.checkConversionException(TO_SEQUENCE, ClassCastException.class); + } + + public void testLongConversion() throws Exception + { + Test FromLong = new Test("longVal", LONG_VAL_INDEX); + + FromLong.initialize(long.class, "Long", new Long(7000L)); + + FromLong.attemptConversion(TO_BYTE); + FromLong.attemptConversion(TO_DOUBLE); + FromLong.attemptConversion(TO_FLOAT); + FromLong.attemptConversion(TO_INT); + FromLong.attemptConversion(TO_LONG); + FromLong.attemptConversion(TO_SHORT); + FromLong.attemptConversion(TO_BIGDECIMAL); + FromLong.attemptConversion(TO_BIGINTEGER); + FromLong.attemptConversion(TO_DATE); + FromLong.attemptConversion(TO_STRING); + } + + public void testLongExceptions() throws Exception + { + Test FromLong = new Test("longVal", LONG_VAL_INDEX); + + FromLong.initialize(long.class, "Long", new Long(7000L)); + +// FromLong.checkConversionException(TO_BOOLEAN, ClassCastException.class); +// FromLong.checkConversionException(TO_CHAR, ClassCastException.class); +// FromLong.checkConversionException(TO_BYTES, ClassCastException.class); + FromLong.checkConversionException(TO_DATAOBJECT, ClassCastException.class); + FromLong.checkConversionException(TO_LIST, ClassCastException.class); + FromLong.checkConversionException(TO_SEQUENCE, ClassCastException.class); + } + + public void testShortConversion() throws Exception + { + Test FromShort = new Test("shortVal", SHORT_VAL_INDEX); + + FromShort.initialize(short.class, "Short", new Short("-8000")); + + FromShort.attemptConversion(TO_BYTE); + FromShort.attemptConversion(TO_DOUBLE); + FromShort.attemptConversion(TO_FLOAT); + FromShort.attemptConversion(TO_INT); + FromShort.attemptConversion(TO_LONG); + FromShort.attemptConversion(TO_SHORT); + FromShort.attemptConversion(TO_STRING); + } + + public void testShortExceptions() throws Exception + { + Test FromShort = new Test("shortVal", SHORT_VAL_INDEX); + + FromShort.initialize(short.class, "Short", new Short("-8000")); + +// FromShort.checkConversionException(TO_BOOLEAN, ClassCastException.class); +// FromShort.checkConversionException(TO_CHAR, ClassCastException.class); +// FromShort.checkConversionException(TO_BYTES, ClassCastException.class); + FromShort.checkConversionException(TO_BIGDECIMAL, ClassCastException.class); + FromShort.checkConversionException(TO_BIGINTEGER, ClassCastException.class); + FromShort.checkConversionException(TO_DATAOBJECT, ClassCastException.class); +// FromShort.checkConversionException(TO_DATE, ClassCastException.class); + FromShort.checkConversionException(TO_LIST, ClassCastException.class); + FromShort.checkConversionException(TO_SEQUENCE, ClassCastException.class); + } + + public void testStringConversion() throws Exception + { + Test FromString = new Test("stringVal", STRING_VAL_INDEX); + + FromString.initialize(String.class, "String", "5"); + + FromString.attemptConversion(TO_BOOLEAN); + FromString.attemptConversion(TO_BYTE); + FromString.attemptConversion(TO_CHAR); + FromString.attemptConversion(TO_DOUBLE); + FromString.attemptConversion(TO_FLOAT); + FromString.attemptConversion(TO_INT); + FromString.attemptConversion(TO_LONG); + FromString.attemptConversion(TO_SHORT); + FromString.attemptConversion(TO_BIGDECIMAL); + FromString.attemptConversion(TO_BIGINTEGER); + FromString.attemptConversion(TO_STRING); + + FromString.initialize(String.class, "String", "1999-07-25T8:50:14.33Z"); + FromString.attemptConversion(TO_DATE); + } + + public void testStringExceptions() throws Exception + { + Test FromString = new Test("stringVal", STRING_VAL_INDEX); + + FromString.initialize(String.class, "String", "5"); + +// FromString.checkConversionException(TO_BYTES, ClassCastException.class); + FromString.checkConversionException(TO_DATAOBJECT, ClassCastException.class); + FromString.checkConversionException(TO_LIST, ClassCastException.class); + FromString.checkConversionException(TO_SEQUENCE, ClassCastException.class); + } + + public void testBytesConversion() throws Exception + { + Test FromBytes = new Test("bytesVal", BYTES_VAL_INDEX); + + FromBytes.initialize(byte[].class, "Bytes", new byte[] {10,100}); + + FromBytes.attemptConversion(TO_BYTES); + FromBytes.attemptConversion(TO_BIGINTEGER); + } + + public void testBytesExceptions() throws Exception + { + Test FromBytes = new Test("bytesVal", BYTES_VAL_INDEX); + + FromBytes.initialize(byte[].class, "Bytes", new byte[] {10,100}); + +// FromBytes.checkConversionException(TO_BOOLEAN, ClassCastException.class); +// FromBytes.checkConversionException(TO_BYTE, ClassCastException.class); +// FromBytes.checkConversionException(TO_CHAR, ClassCastException.class); +// FromBytes.checkConversionException(TO_DOUBLE, ClassCastException.class); +// FromBytes.checkConversionException(TO_FLOAT, ClassCastException.class); +// FromBytes.checkConversionException(TO_INT, ClassCastException.class); +// FromBytes.checkConversionException(TO_LONG, ClassCastException.class); +// FromBytes.checkConversionException(TO_SHORT, ClassCastException.class); +// FromBytes.checkConversionException(TO_BIGDECIMAL, ClassCastException.class); + FromBytes.checkConversionException(TO_DATAOBJECT, ClassCastException.class); +// FromBytes.checkConversionException(TO_DATE, ClassCastException.class); +// FromBytes.checkConversionException(TO_STRING, ClassCastException.class); + FromBytes.checkConversionException(TO_LIST, ClassCastException.class); + FromBytes.checkConversionException(TO_SEQUENCE, ClassCastException.class); + } + + public void testBigDecimalConversion() throws Exception + { + Test FromBigDecimal = new Test("decimalVal", DECIMAL_VAL_INDEX); + + FromBigDecimal.initialize(BigDecimal.class, "BigDecimal", new BigDecimal("-3")); + + FromBigDecimal.attemptConversion(TO_DOUBLE); + FromBigDecimal.attemptConversion(TO_FLOAT); + FromBigDecimal.attemptConversion(TO_INT); + FromBigDecimal.attemptConversion(TO_LONG); + FromBigDecimal.attemptConversion(TO_BIGDECIMAL); + FromBigDecimal.attemptConversion(TO_BIGINTEGER); + FromBigDecimal.attemptConversion(TO_STRING); + } + + public void testBigDecimalExceptions() throws Exception + { + Test FromBigDecimal = new Test("decimalVal", DECIMAL_VAL_INDEX); + + FromBigDecimal.initialize(BigDecimal.class, "BigDecimal", new BigDecimal("-3")); + +// FromBigDecimal.checkConversionException(TO_BOOLEAN, ClassCastException.class); +// FromBigDecimal.checkConversionException(TO_BYTE, ClassCastException.class); +// FromBigDecimal.checkConversionException(TO_CHAR, ClassCastException.class); +// FromBigDecimal.checkConversionException(TO_SHORT, ClassCastException.class); +// FromBigDecimal.checkConversionException(TO_BYTES, ClassCastException.class); + FromBigDecimal.checkConversionException(TO_DATAOBJECT, ClassCastException.class); +// FromBigDecimal.checkConversionException(TO_DATE, ClassCastException.class); + FromBigDecimal.checkConversionException(TO_LIST, ClassCastException.class); + FromBigDecimal.checkConversionException(TO_SEQUENCE, ClassCastException.class); + } + + public void testBigIntegerConversion() throws Exception + { + Test FromBigInteger = new Test("integerVal", INTEGER_VAL_INDEX); + + FromBigInteger.initialize(BigInteger.class, "BigInteger", new BigInteger("31500")); + + FromBigInteger.attemptConversion(TO_DOUBLE); + FromBigInteger.attemptConversion(TO_FLOAT); + FromBigInteger.attemptConversion(TO_INT); + FromBigInteger.attemptConversion(TO_LONG); + FromBigInteger.attemptConversion(TO_SHORT); + FromBigInteger.attemptConversion(TO_BYTES); + FromBigInteger.attemptConversion(TO_BIGDECIMAL); + FromBigInteger.attemptConversion(TO_BIGINTEGER); + FromBigInteger.attemptConversion(TO_STRING); + } + + public void testBigIntegerExceptions() throws Exception + { + Test FromBigInteger = new Test("integerVal", INTEGER_VAL_INDEX); + + FromBigInteger.initialize(BigInteger.class, "BigInteger", new BigInteger("31500")); + +// FromBigInteger.checkConversionException(TO_BOOLEAN, ClassCastException.class); +// FromBigInteger.checkConversionException(TO_BYTE, ClassCastException.class); +// FromBigInteger.checkConversionException(TO_CHAR, ClassCastException.class); + FromBigInteger.checkConversionException(TO_DATAOBJECT, ClassCastException.class); +// FromBigInteger.checkConversionException(TO_DATE, ClassCastException.class); + FromBigInteger.checkConversionException(TO_LIST, ClassCastException.class); + FromBigInteger.checkConversionException(TO_SEQUENCE, ClassCastException.class); + } + + public void testDateConversion() throws Exception + { + Test FromDate = new Test("dateVal", DATE_VAL_INDEX); + + FromDate.initialize(Date.class, "Date", new Date(System.currentTimeMillis())); + + FromDate.attemptConversion(TO_LONG); + FromDate.attemptConversion(TO_DATE); + FromDate.attemptConversion(TO_STRING); + } + + public void testDateExceptions() throws Exception + { + Test FromDate = new Test("dateVal", DATE_VAL_INDEX); + + FromDate.initialize(Date.class, "Date", new Date(System.currentTimeMillis())); + +// FromDate.checkConversionException(TO_BOOLEAN, ClassCastException.class); +// FromDate.checkConversionException(TO_BYTE, ClassCastException.class); +// FromDate.checkConversionException(TO_CHAR, ClassCastException.class); +// FromDate.checkConversionException(TO_DOUBLE, ClassCastException.class); +// FromDate.checkConversionException(TO_FLOAT, ClassCastException.class); +// FromDate.checkConversionException(TO_INT, ClassCastException.class); +// FromDate.checkConversionException(TO_SHORT, ClassCastException.class); +// FromDate.checkConversionException(TO_BYTES, ClassCastException.class); +// FromDate.checkConversionException(TO_BIGDECIMAL, ClassCastException.class); +// FromDate.checkConversionException(TO_BIGINTEGER, ClassCastException.class); + FromDate.checkConversionException(TO_DATAOBJECT, ClassCastException.class); + FromDate.checkConversionException(TO_LIST, ClassCastException.class); + FromDate.checkConversionException(TO_SEQUENCE, ClassCastException.class); + } + + public void testTuscany_836() { + if (System.getProperty("java.version").indexOf("1.4") == -1) { + // Work around a bug in SUN and IBM 1.4 JDKs + assertEquals(DataObjectUtil.getBigDecimal(new Long(Long.MAX_VALUE)).longValue(), Long.MAX_VALUE); + } + } +}
\ No newline at end of file diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/TypeHelperTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/TypeHelperTestCase.java new file mode 100644 index 0000000000..8fad877d4b --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/TypeHelperTestCase.java @@ -0,0 +1,45 @@ +/**
+ *
+ * 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.
+ */
+package org.apache.tuscany.sdo.test;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sdo.api.SDOUtil;
+
+import commonj.sdo.helper.HelperContext;
+
+
+public class TypeHelperTestCase extends TestCase {
+
+
+ HelperContext hc;
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ hc = SDOUtil.createHelperContext();
+ }
+
+ public void testGetType() {
+ assertTrue(hc.getTypeHelper().getType(List.class) == null );
+ }
+
+}
diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/TypeRoundTripTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/TypeRoundTripTestCase.java new file mode 100644 index 0000000000..f718a3f330 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/TypeRoundTripTestCase.java @@ -0,0 +1,147 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +import junit.framework.TestCase; + +import org.apache.tuscany.sdo.util.SDOUtil; + +import commonj.sdo.Type; +import commonj.sdo.helper.DataHelper; +import commonj.sdo.helper.TypeHelper; + +public class TypeRoundTripTestCase extends TestCase { + + private static class Test { + Type type; + String value; + Object obj; + Comparator comp; + + Test(Type type, String value, Object obj) { + this.type = type; + this.value = value; + this.obj = obj; + } + + Test(Type type, String value, Object obj, Comparator comp) { + this.type = type; + this.value = value; + this.obj = obj; + this.comp = comp; + } + } + + private static class ListComparator implements Comparator { + public int compare(Object list1, Object list2) { + int answer = 1; + if (list1 instanceof List && list2 instanceof List) { + List l1 = (List) list1; + List l2 = (List) list2; + if (l1.size() == l2.size()) { + for (int n = 0; n < l1.size(); n++) { + if (!l1.get(n).equals(l2.get(n))) { + answer = 0; + break; + } + } + } else { + answer = 0; + } + } else { + answer = 0; + } + return answer; + } + } + + private static class BytesComparator implements Comparator { + public int compare(Object o1, Object o2) { + o2 = new String((byte[])o2); + if (o1.equals(o2)) return 1; + else return 0; + } + } + + public void testTypeRoundTrips() throws Exception { + String URI = "commonj.sdo"; + TypeHelper types = TypeHelper.INSTANCE; + + List list = new ArrayList(); + list.add("foo"); + list.add("bar"); + list.add("test"); + Test[] tests = { + new Test(types.getType(URI, "Boolean"), "true", new Boolean(true)), + new Test(types.getType(URI, "Byte"), "49", new Byte((byte)49)), + new Test(types.getType(URI, "Bytes"), "666F6F", "foo", new BytesComparator()), + new Test(types.getType(URI, "Character"), "a", new Character('a')), + new Test(types.getType(URI, "Date"), "2005-12-12T12:12:12.012Z", DataHelper.INSTANCE.toDate("2005-12-12T12:12:12.012Z")), + new Test(types.getType(URI, "DateTime"), "2005-12-12T12:12:12zz", "2005-12-12T12:12:12zz"), + new Test(types.getType(URI, "Day"), "---12", "---12"), + new Test(types.getType(URI, "Decimal"), "12.12", new BigDecimal("12.12")), + new Test(types.getType(URI, "Double"), "12.12", new Double(12.12)), + new Test(types.getType(URI, "Duration"), "P5Y2M10D", "P5Y2M10D"), + new Test(types.getType(URI, "Float"), "12.12", new Float(12.12f)), + new Test(types.getType(URI, "Int"), "12", new Integer(12)), + new Test(types.getType(URI, "Integer"), "12", new BigInteger("12")), + new Test(types.getType(URI, "Long"), "12", new Long(12l)), + new Test(types.getType(URI, "Month"), "--12", "--12"), + new Test(types.getType(URI, "MonthDay"), "--12-12", "--12-12"), + new Test(types.getType(URI, "Object"), "test", "test"), + new Test(types.getType(URI, "Short"), "12", new Short((short)12)), + new Test(types.getType(URI, "String"), "test", "test"), + new Test(types.getType(URI, "Strings"), "foo bar test", list, new ListComparator()), + new Test(types.getType(URI, "Time"), "12:12:12.12", "12:12:12.12"), + new Test(types.getType(URI, "URI"), "http://example.org", "http://example.org"), + new Test(types.getType(URI, "Year"), "2005", "2005"), + new Test(types.getType(URI, "YearMonth"), "2005-12", "2005-12"), + new Test(types.getType(URI, "YearMonthDay"), "2005-12-12", "2005-12-12") + }; + + for (int n = 0; n < tests.length; n++) { + assertEquals( + SDOUtil.convertToString(tests[n].type, SDOUtil.createFromString(tests[n].type, tests[n].value)), + tests[n].value + ); + + //System.out.print("."); + + if (tests[n].comp == null) { + assertEquals( + SDOUtil.createFromString(tests[n].type, SDOUtil.convertToString(tests[n].type, tests[n].obj)), + tests[n].obj + ); + } else { + String o1 = SDOUtil.convertToString(tests[n].type, tests[n].obj); + Object o2 = SDOUtil.createFromString(tests[n].type, o1); + assertEquals(tests[n].comp.compare(tests[n].obj, o2), 1); + } + } + + } + +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLDocumentTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLDocumentTestCase.java new file mode 100644 index 0000000000..1cf59757ef --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLDocumentTestCase.java @@ -0,0 +1,110 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + + +import java.io.IOException; + +import junit.framework.TestCase; + +import commonj.sdo.helper.XMLDocument; +import commonj.sdo.helper.XMLHelper; + + +public class XMLDocumentTestCase extends TestCase +{ + private final String TEST_XML_DOCUMENT = "/XMLDocumentTestCase.xml"; + + // remember that NS1... and NS2... items are expected in sorted order by name + private final String NS1_SCHEMA_NAME = "http://www.example.com/open"; + + private final String NS1_SCHEMA_LOCATION = "/open.xsd"; + + private final String NS2_SCHEMA_NAME = "http://www.example.com/xmlDocumentSchemaLocation"; + + private final String NS2_SCHEMA_LOCATION = "/XMLDocumentSchemaLocation.xsd"; + + private final String NS_SET_NAME_LOCATION = "namespace schemaLocation"; + + //private final String NNS_SCHEMA_LOCATION = "http://www.example.com/XMLDocumentNoNamespaceSchemaLocation.xsd"; + private final String NNS_SCHEMA_LOCATION = "/XMLDocumentNoNamespaceSchemaLocation.xsd"; + + private final String NNS_SET_LOCATION = "noNamespaceSchemaLocation"; + + /** + * This method will load an xml document consisting of a xsi:schemaLocation and + * xsi:noNamespaceSchemaLocation defined. It will then use the XMLDocument API to get and + * set the schemaLocation property. + * + * @throws IOException + */ + public void testSchemaLocation() throws IOException + { + // load the xml document which has xsi:noNamespaceSchemaLocation and xsi:schemaLocation defined + XMLDocument doc = XMLHelper.INSTANCE.load(getClass().getResourceAsStream(TEST_XML_DOCUMENT)); + + // get the schemaLocation + assertEquals(NS1_SCHEMA_NAME + " " + NS1_SCHEMA_LOCATION + " " + NS2_SCHEMA_NAME + " " + NS2_SCHEMA_LOCATION, doc.getSchemaLocation()); + + // set the schemaLocation to another value and test to see if the value was set + doc.setSchemaLocation(NS_SET_NAME_LOCATION); + assertEquals(NS_SET_NAME_LOCATION, doc.getSchemaLocation()); + + // remove the schemaLocation and ensure it returns null + doc.setSchemaLocation(null); + assertNull(doc.getSchemaLocation()); + + // ensure changes to schemaLocation have not changed noNamespaceSchemaLocation + assertEquals(NNS_SCHEMA_LOCATION, doc.getNoNamespaceSchemaLocation()); + } + + /** + * This method will load an xml document consisting of a xsi:schemaLocation and + * xsi:noNamespaceSchemaLocation defined. It will then use the XMLDocument API to get and + * set the noNamespaceSchemaLocation property. + * + * @throws IOException + */ + public void testNoNamespaceSchemaLocation() throws IOException + { + // load the xml document which has xsi:noNamespaceSchemaLocation and xsi:schemaLocation defined + XMLDocument doc = XMLHelper.INSTANCE.load(getClass().getResourceAsStream(TEST_XML_DOCUMENT)); + + // get the noNamespaceSchemaLocation + assertEquals(NNS_SCHEMA_LOCATION, doc.getNoNamespaceSchemaLocation()); + + // set the noNameSpaceSchemaLocation to another value and test to see if the value was set + doc.setNoNamespaceSchemaLocation(NNS_SET_LOCATION); + assertEquals(NNS_SET_LOCATION, doc.getNoNamespaceSchemaLocation()); + + // remove the noNameSpaceSchemaLocation and ensure it returns null + doc.setNoNamespaceSchemaLocation(null); + assertNull(doc.getNoNamespaceSchemaLocation()); + + // ensure changes to noNameSpaceSchemaLocation have not changed schemaLocation + assertEquals(NS1_SCHEMA_NAME + " " + NS1_SCHEMA_LOCATION + " " + NS2_SCHEMA_NAME + " " + NS2_SCHEMA_LOCATION, doc.getSchemaLocation()); + } + + protected void setUp() throws Exception + { + super.setUp(); + } + +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLHelperTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLHelperTestCase.java new file mode 100644 index 0000000000..fb1cf79300 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLHelperTestCase.java @@ -0,0 +1,214 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.dom.DOMSource; + +import junit.framework.TestCase; + +import org.apache.tuscany.sdo.util.SDOUtil; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +import commonj.sdo.helper.HelperContext; +import commonj.sdo.helper.XMLDocument; +import commonj.sdo.helper.XMLHelper; +import commonj.sdo.helper.XSDHelper; + +public class XMLHelperTestCase extends TestCase { + + HelperContext hc; + private XSDHelper xsdHelper; + XMLHelper xmlh; + static final String INDENT = " ", MARGIN = " ", LINE_BREAK = "\n\n"; + + void define(String model) throws Exception { + // Populate the meta data for the test model + URL url = getClass().getResource(model); + xsdHelper.define(url.openStream(), url.toString()); + } + + protected void setUp() throws Exception { + super.setUp(); + hc = SDOUtil.createHelperContext(); + xsdHelper = hc.getXSDHelper(); + xmlh = hc.getXMLHelper(); + + // Populate the meta data for the test (Stock Quote) model + define("/simpleWithChangeSummary.xsd"); + + define("/SequenceChangeSummary.xsd"); + + define("/simple.xsd"); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + public void testLoadInputStreamStringObject() throws IOException { + + } + + protected final void format(String xml,String formatted) throws IOException { + XMLDocument doc = xmlh.load(getClass().getResource(xml).openStream()); + Map options = new HashMap(); + + options.put(SDOUtil.XML_SAVE_INDENT, INDENT); + options.put(SDOUtil.XML_SAVE_MARGIN, MARGIN); + options.put(SDOUtil.XML_SAVE_LineBreak, LINE_BREAK); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + // doc declares NameSpaces at root + xmlh.save(xmlh.createDocument(doc.getRootObject(), doc.getRootElementURI(), doc.getRootElementName()), baos, options); + //xmlh.save(xmlh.createDocument(doc.getRootObject(), doc.getRootElementURI(), doc.getRootElementName()), System.out, options); + + assertEquals(formatted, baos.toString()); + } + + public void testSaveXMLDocumentOutputStreamObject() throws IOException { + format("/simpleWithChangeSummary.xml", +MARGIN+ "<?xml version=\"1.0\" encoding=\"ASCII\"?>" +LINE_BREAK+ +MARGIN+ "<cs:stockQuote xmlns:cs=\"http://www.example.com/simpleCS\">" +LINE_BREAK+ +MARGIN+INDENT+ "<symbol>FBNT</symbol>" +LINE_BREAK+ +MARGIN+INDENT+ "<companyName>FlyByNightTechnology</companyName>" +LINE_BREAK+ +MARGIN+INDENT+ "<price>999.0</price>" +LINE_BREAK+ +MARGIN+INDENT+ "<volume>1000.0</volume>" +LINE_BREAK+ +MARGIN+INDENT+ "<quotes>" +LINE_BREAK+ +MARGIN+INDENT+INDENT+ "<price>1500.0</price>" +LINE_BREAK+ +MARGIN+INDENT+ "</quotes>" +LINE_BREAK+ +MARGIN+INDENT+ "<quotes>" +LINE_BREAK+ +MARGIN+INDENT+INDENT+ "<price>2500.0</price>" +LINE_BREAK+ +MARGIN+INDENT+ "</quotes>" +LINE_BREAK+ +MARGIN+INDENT+ "<quotes>" +LINE_BREAK+ +MARGIN+INDENT+INDENT+ "<price>3000.0</price>" +LINE_BREAK+ +MARGIN+INDENT+ "</quotes>" +LINE_BREAK+ +MARGIN+INDENT+ "<quotes>" +LINE_BREAK+ +MARGIN+INDENT+INDENT+ "<price>4000.0</price>" +LINE_BREAK+ +MARGIN+INDENT+ "</quotes>" +LINE_BREAK+ +MARGIN+INDENT+ "<changes create=\"#//quotes[3] #//quotes[4]\" delete=\"#//changes/stockQuote[1]/quotes[2]\" logging=\"false\" xmlns:sdo=\"commonj.sdo\">" +LINE_BREAK+ +MARGIN+INDENT+INDENT+ "<cs:stockQuote sdo:ref=\"#/stockQuote\" sdo:unset=\"volume\">" +LINE_BREAK+ +MARGIN+INDENT+INDENT+INDENT+ "<symbol>fbnt</symbol>" +LINE_BREAK+ +MARGIN+INDENT+INDENT+INDENT+ "<price>1000.0</price>" +LINE_BREAK+ +MARGIN+INDENT+INDENT+INDENT+ "<quotes sdo:ref=\"#//quotes[1]\" />" +LINE_BREAK+ +MARGIN+INDENT+INDENT+INDENT+ "<quotes><price>2000.0</price><quotes><price>2000.99</price></quotes></quotes>" +LINE_BREAK+ +MARGIN+INDENT+INDENT+INDENT+ "<quotes sdo:ref=\"#//quotes[2]\" />" +LINE_BREAK+ +MARGIN+INDENT+INDENT+ "</cs:stockQuote>" +LINE_BREAK+ +MARGIN+INDENT+ "</changes>" +LINE_BREAK+ +MARGIN+ "</cs:stockQuote>"); + } + + public void testSaveMixedOutputStreamObject() throws IOException { + format("/mixedChangeSummary.xml", +MARGIN+ "<?xml version=\"1.0\" encoding=\"ASCII\"?>" +LINE_BREAK+ +MARGIN+ "<cs:stockQuote xmlns:cs=\"http://www.example.com/sequenceCS\"><changes create=\"#//quotes[3] #//quotes[4]\" delete=\"#//changes/stockQuote[1]/quotes[2]\" logging=\"false\" xmlns:sdo=\"commonj.sdo\">" +LINE_BREAK+ +INDENT+ "<cs:stockQuote sdo:ref=\"#/stockQuote\">" +LINE_BREAK+ +INDENT+INDENT+ "<symbol>fbnt</symbol>" +LINE_BREAK+ +INDENT+INDENT+ "<companyName>FlyByNightTechnology</companyName>" +LINE_BREAK+ +INDENT+INDENT+ "<price>1000.0</price>" +LINE_BREAK+ +INDENT+INDENT+ "<quotes sdo:ref=\"#//quotes[1]\" />" +LINE_BREAK+ +INDENT+INDENT+ "<quotes><price>2000.0</price><quotes><price>2000.99</price></quotes></quotes>" +LINE_BREAK+ +INDENT+INDENT+ "<quotes sdo:ref=\"#//quotes[2]\" />" +LINE_BREAK+ +INDENT+ "</cs:stockQuote>" +LINE_BREAK+ +"</changes><symbol>FBNT</symbol><companyName>FlyByNightTechnology</companyName><price>999.0</price><quotes><price>1500.0</price></quotes><quotes><price>2500.0</price></quotes><volume>1000.0</volume><quotes><price>3000.0</price></quotes><quotes><price>4000.0</price></quotes></cs:stockQuote>"); + } + + public void testOpenMixedOutputStreamObject() throws IOException { + format("/openChangeSummary.xml", +MARGIN+ "<?xml version=\"1.0\" encoding=\"ASCII\"?>" +LINE_BREAK+ +MARGIN+ "<cs:openQuote xmlns:cs=\"http://www.example.com/sequenceCS\" xmlns:open=\"http://www.example.com/open\">" +LINE_BREAK+ +MARGIN+INDENT+ "<symbol>FBNT</symbol>" +LINE_BREAK+ +MARGIN+INDENT+ "<open:openStockQuote>" +LINE_BREAK+ +MARGIN+INDENT+INDENT+ "<symbol>1500.0</symbol>" +LINE_BREAK+ +MARGIN+INDENT+ "</open:openStockQuote>" +LINE_BREAK+ +MARGIN+INDENT+ "<open:openStockQuote>" +LINE_BREAK+ +MARGIN+INDENT+INDENT+ "<symbol>2500.0</symbol>" +LINE_BREAK+ +MARGIN+INDENT+ "</open:openStockQuote>" +LINE_BREAK+ +MARGIN+INDENT+ "<open:openStockQuote>" +LINE_BREAK+ +MARGIN+INDENT+INDENT+ "<symbol>3000.0</symbol>" +LINE_BREAK+ +MARGIN+INDENT+ "</open:openStockQuote>" +LINE_BREAK+ +MARGIN+INDENT+ "<open:openStockQuote>" +LINE_BREAK+ +MARGIN+INDENT+INDENT+ "<symbol>4000.0</symbol>" +LINE_BREAK+ +MARGIN+INDENT+ "</open:openStockQuote>" +LINE_BREAK+ +MARGIN+INDENT+ "<changes create=\"#//open:openStockQuote[3] #//open:openStockQuote[4]\" delete=\"#//changes/openQuote[1]/open:openStockQuote[2]\" logging=\"false\" xmlns:sdo=\"commonj.sdo\">" +LINE_BREAK+ +MARGIN+INDENT+INDENT+ "<cs:openQuote sdo:ref=\"#/openQuote\">" +LINE_BREAK+ +MARGIN+INDENT+INDENT+INDENT+ "<symbol>fbnt</symbol>" +LINE_BREAK+ +MARGIN+INDENT+INDENT+INDENT+ "<open:openStockQuote sdo:ref=\"#//open:openStockQuote[1]\" />" +LINE_BREAK+ +MARGIN+INDENT+INDENT+INDENT+ "<open:openStockQuote><symbol>2000.0</symbol><open:openStockQuote><symbol>2000.99</symbol></open:openStockQuote></open:openStockQuote>" +LINE_BREAK+ +MARGIN+INDENT+INDENT+INDENT+ "<open:openStockQuote sdo:ref=\"#//open:openStockQuote[2]\" />" +LINE_BREAK+ +MARGIN+INDENT+INDENT+ "</cs:openQuote>" +LINE_BREAK+ +MARGIN+INDENT+ "</changes>" +LINE_BREAK+ +MARGIN+ "</cs:openQuote>"); + } + + private String quoteXML = + "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + + "<simple:stockQuote xmlns:simple=\"http://www.example.com/simple\">" + + "<symbol>fbnt</symbol>" + + "<companyName>FlyByNightTechnology</companyName>" + + "<price>1000.0</price>" + + "<open1>1000.0</open1>" + + "<high>1000.0</high>" + + "<low>1000.0</low>" + + "<volume>1000.0</volume>" + + "<change1>1000.0</change1>" + + "<quotes>" + + "<price>2000.0</price>" + + "</quotes>" + + "</simple:stockQuote>"; + + public void dontTestLoadDOMSource() throws IOException, ParserConfigurationException, SAXException + { + //TODO Enable this test when we move to EMF 2.2.3 + + DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); + dFactory.setNamespaceAware(true); + + DocumentBuilder dBuilder = dFactory.newDocumentBuilder(); + Document document = dBuilder.parse(new ByteArrayInputStream(quoteXML.getBytes())); + + DOMSource domSource = new DOMSource(document); + + XMLDocument xmlDocument = hc.getXMLHelper().load(domSource, null, null); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + Map options = new HashMap(); + options.put(SDOUtil.XML_SAVE_INDENT, ""); + options.put(SDOUtil.XML_SAVE_MARGIN, ""); + options.put(SDOUtil.XML_SAVE_LineBreak, ""); + + hc.getXMLHelper().save(xmlDocument, baos, options); + + boolean isEqual = TestUtil.equalXmlFiles(new ByteArrayInputStream(quoteXML.getBytes()), new ByteArrayInputStream(baos.toByteArray())); + assertTrue(isEqual); + } +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLLoadOptionsTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLLoadOptionsTestCase.java new file mode 100644 index 0000000000..ac8d04b683 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLLoadOptionsTestCase.java @@ -0,0 +1,192 @@ +/**
+ *
+ * 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.
+ */
+package org.apache.tuscany.sdo.test;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sdo.SDOPackage;
+import org.apache.tuscany.sdo.api.SDOHelper;
+import org.apache.tuscany.sdo.api.SDOUtil;
+import org.apache.tuscany.sdo.api.XMLStreamHelper;
+import org.eclipse.emf.ecore.resource.Resource;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.helper.HelperContext;
+import commonj.sdo.helper.XMLDocument;
+import commonj.sdo.helper.XMLHelper;
+
+public class XMLLoadOptionsTestCase extends TestCase {
+ XMLHelper xmlHelper;
+ Map options;
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ //SDOUtil->SDOHelper->SDOHelperImpl->HelperContextImpl->XMLHelperImpl
+ public void testXMLOptionsSchema1() throws IOException{
+ final String TEST_XML_DOCUMENT = "/SchemaLocationTestCase.xml";
+
+ options = new HashMap();
+ options.put(SDOHelper.XMLOptions.XML_LOAD_SCHEMA, Boolean.TRUE);
+
+ final XMLHelper xmlHelper = SDOUtil.createHelperContext(true, options).getXMLHelper();
+
+ final XMLDocument xmlDoc = xmlHelper.load(getClass().getResourceAsStream(TEST_XML_DOCUMENT), "whatever", null);
+ final DataObject root = xmlDoc.getRootObject();
+ assertNotSame(root.getType(), SDOPackage.eINSTANCE.getAnyTypeDataObject());
+ }
+
+// SDOUtil->SDOHelper->SDOHelperImpl->HelperContextImpl->XMLHelperImpl
+ public void testXMLOptionsSchema2() throws IOException{
+ final String TEST_XML_DOCUMENT = "/SchemaLocationTestCase.xml";
+
+ options = new HashMap();
+ options.put(SDOHelper.XMLOptions.XML_LOAD_SCHEMA, Boolean.FALSE);
+ final XMLHelper xmlHelper = SDOUtil.createHelperContext(true, options).getXMLHelper();
+ final XMLDocument xmlDoc = xmlHelper.load(getClass().getResourceAsStream(TEST_XML_DOCUMENT), "whatever", null);
+ final DataObject root = xmlDoc.getRootObject();
+ assertSame(root.getType(), SDOPackage.eINSTANCE.getAnyTypeDataObject());
+ }
+
+ public void testXMLOptionsLax1() throws IOException{
+ options = new HashMap();
+ /*
+ * turn off default behaviour of tolerating malformed xml
+ * tests using this option and bad xml should demonstrate failure to load
+ */
+ options.put(SDOHelper.XMLOptions.XML_LOAD_LAX_FORM, new Integer(0));
+ final HelperContext hc = SDOUtil.createHelperContext(true, options);
+ hc.getXSDHelper().define(
+ "<schema xmlns=\"http://www.w3.org/2001/XMLSchema\" targetNamespace=\"testNS\">"+
+ "<element name=\"root\">"+
+ "<complexType>"+
+ "<sequence>"+
+ "<element name=\"unqualifiedElement\" type=\"string\"/>"+
+ "<element name=\"qualifiedElement\" form=\"qualified\" type=\"string\"/>"+
+ "</sequence>"+
+ "<attribute name=\"unqualifiedAttribute\" type=\"string\"/>"+
+ "<attribute name=\"qualifiedAttribute\" form=\"qualified\" type=\"string\"/>"+
+ "</complexType>"+
+ "</element>"+
+ "</schema>");
+
+ final String xml="<p:root xmlns:p=\"testNS\">"+
+ "<p:unqualifiedElement/>"+
+"</p:root>";
+
+ /*
+ * this malformed xml will not load, as lax is forced OFF
+ * changing p:unqualifiedElement to unqualifiedElement
+ * will work */
+ try{
+ hc.getXMLHelper().load(new StringReader(xml), null, null);
+ fail();
+ } catch (final Resource.IOWrappedException featureNotFound) {
+ assertTrue(true);
+ }
+
+ }
+
+ public void testXMLOptionsLax2() throws IOException{
+ options = new HashMap();
+ /*
+ * turn on default behaviour of tolerating malformed xml
+ * tests using this option and bad xml will load
+ */
+ options.put(SDOHelper.XMLOptions.XML_LOAD_LAX_FORM, new Integer(1));
+ final HelperContext hc = SDOUtil.createHelperContext(true, options);
+ hc.getXSDHelper().define(
+ "<schema xmlns=\"http://www.w3.org/2001/XMLSchema\" targetNamespace=\"testNS\">"+
+ "<element name=\"root\">"+
+ "<complexType>"+
+ "<sequence>"+
+ "<element name=\"unqualifiedElement\" type=\"string\"/>"+
+ "<element name=\"qualifiedElement\" form=\"qualified\" type=\"string\"/>"+
+ "</sequence>"+
+ "<attribute name=\"unqualifiedAttribute\" type=\"string\"/>"+
+ "<attribute name=\"qualifiedAttribute\" form=\"qualified\" type=\"string\"/>"+
+ "</complexType>"+
+ "</element>"+
+ "</schema>");
+
+ final String xml="<p:root xmlns:p=\"testNS\" p:unqualifiedAttribute=\"u\" qualifiedAttribute=\"q\">"+
+ "<p:unqualifiedElement/>"+
+ "<qualifiedElement/>"+
+ "</p:root>";
+
+ /*
+ * this malformed xml will load, as lax is forced ON
+ */
+ assertNotNull(hc.getXMLHelper().load(new StringReader(xml), null, null).getRootObject());
+ }
+
+ //SDOUtil->SDOHelper->SDOHelperImpl->XMLStreamHelperImpl->XMLDocumentImpl
+ public void testXMLStreamHelper() throws IOException, XMLStreamException{
+ options = new HashMap();
+ /*
+ * turn off default behaviour of tolerating malformed xml
+ * tests using this option and bad xml will load
+ */
+ options.put(SDOHelper.XMLOptions.XML_LOAD_LAX_FORM, new Integer(1));
+ final HelperContext hc = SDOUtil.createHelperContext(false, options);
+ final XMLStreamHelper streamHelper = SDOUtil.createXMLStreamHelper(hc);
+ hc.getXSDHelper().define(
+ "<schema xmlns=\"http://www.w3.org/2001/XMLSchema\" targetNamespace=\"testNS\">"+
+ "<element name=\"root\">"+
+ "<complexType>"+
+ "<sequence>"+
+ "<element name=\"unqualifiedElement\" type=\"string\"/>"+
+ "<element name=\"qualifiedElement\" form=\"qualified\" type=\"string\"/>"+
+ "</sequence>"+
+ "<attribute name=\"unqualifiedAttribute\" type=\"string\"/>"+
+ "<attribute name=\"qualifiedAttribute\" form=\"qualified\" type=\"string\"/>"+
+ "</complexType>"+
+ "</element>"+
+ "</schema>");
+
+ final String xml="<p:root xmlns:p=\"testNS\" p:unqualifiedAttribute=\"u\" qualifiedAttribute=\"q\">"+
+ "<p:unqualifiedElement/>"+
+ "<qualifiedElement/>"+
+ "</p:root>";
+
+ final XMLInputFactory inputFactory = XMLInputFactory.newInstance();
+ final XMLStreamReader reader1 = inputFactory.createXMLStreamReader(new StringReader(xml));
+ int event = reader1.getEventType();
+ while (!(event == XMLStreamConstants.START_ELEMENT)){
+ event = reader1.next();
+ }
+ final DataObject dataObject = streamHelper.loadObject(reader1);
+ /*
+ * this malformed xml will load, as lax is forced ON
+ */
+ assertNotNull(dataObject);
+ }
+}
diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLSaveOptionsTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLSaveOptionsTestCase.java new file mode 100644 index 0000000000..50c32a8023 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLSaveOptionsTestCase.java @@ -0,0 +1,147 @@ +/**
+ *
+ * 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.
+ */
+package org.apache.tuscany.sdo.test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.net.URL;
+import java.util.HashMap;
+
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamWriter;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sdo.api.SDOHelper;
+import org.apache.tuscany.sdo.api.SDOUtil;
+import org.apache.tuscany.sdo.api.XMLStreamHelper;
+
+import commonj.sdo.helper.HelperContext;
+import commonj.sdo.helper.XMLDocument;
+import commonj.sdo.helper.XMLHelper;
+import commonj.sdo.helper.XSDHelper;
+
+public class XMLSaveOptionsTestCase extends TestCase {
+ HelperContext hc;
+ private XSDHelper xsdHelper;
+ XMLHelper xmlh;
+ XMLStreamHelper xmlStreamHelper;
+ static final String INDENT = " ", MARGIN = " ", LINE_BREAK = "\n";
+ String formatted1 = MARGIN+ "<?xml version=\"1.0\" encoding=\"ASCII\"?>" +LINE_BREAK+
+ MARGIN+ "<cs:stockQuote xmlns:cs=\"http://www.example.com/simpleCS\">" +LINE_BREAK+
+ MARGIN+INDENT+ "<symbol>FBNT</symbol>" +LINE_BREAK+
+ MARGIN+INDENT+ "<companyName>FlyByNightTechnology</companyName>" +LINE_BREAK+
+ MARGIN+INDENT+ "<price>999.0</price>" +LINE_BREAK+
+ MARGIN+INDENT+ "<volume>1000.0</volume>" +LINE_BREAK+
+ MARGIN+INDENT+ "<quotes>" +LINE_BREAK+
+ MARGIN+INDENT+INDENT+ "<price>1500.0</price>" +LINE_BREAK+
+ MARGIN+INDENT+ "</quotes>" +LINE_BREAK+
+ MARGIN+INDENT+ "<quotes>" +LINE_BREAK+
+ MARGIN+INDENT+INDENT+ "<price>2500.0</price>" +LINE_BREAK+
+ MARGIN+INDENT+ "</quotes>" +LINE_BREAK+
+ MARGIN+INDENT+ "<quotes>" +LINE_BREAK+
+ MARGIN+INDENT+INDENT+ "<price>3000.0</price>" +LINE_BREAK+
+ MARGIN+INDENT+ "</quotes>" +LINE_BREAK+
+ MARGIN+INDENT+ "<quotes>" +LINE_BREAK+
+ MARGIN+INDENT+INDENT+ "<price>4000.0</price>" +LINE_BREAK+
+ MARGIN+INDENT+ "</quotes>" +LINE_BREAK+
+ MARGIN+INDENT+ "<changes create=\"#//quotes[3] #//quotes[4]\" delete=\"#//changes/stockQuote[1]/quotes[2]\" logging=\"false\" xmlns:sdo=\"commonj.sdo\">" +LINE_BREAK+
+ MARGIN+INDENT+INDENT+ "<cs:stockQuote sdo:ref=\"#/stockQuote\" sdo:unset=\"volume\">" +LINE_BREAK+
+ MARGIN+INDENT+INDENT+INDENT+ "<symbol>fbnt</symbol>" +LINE_BREAK+
+ MARGIN+INDENT+INDENT+INDENT+ "<price>1000.0</price>" +LINE_BREAK+
+ MARGIN+INDENT+INDENT+INDENT+ "<quotes sdo:ref=\"#//quotes[1]\" />" +LINE_BREAK+
+ MARGIN+INDENT+INDENT+INDENT+ "<quotes><price>2000.0</price><quotes><price>2000.99</price></quotes></quotes>" +LINE_BREAK+
+ MARGIN+INDENT+INDENT+INDENT+ "<quotes sdo:ref=\"#//quotes[2]\" />" +LINE_BREAK+
+ MARGIN+INDENT+INDENT+ "</cs:stockQuote>" +LINE_BREAK+
+ MARGIN+INDENT+ "</changes>" +LINE_BREAK+
+ MARGIN+ "</cs:stockQuote>";
+
+ String formatted2 =
+ //MARGIN+ "<?xml version=\"1.0\" encoding=\"ASCII\"?>" +LINE_BREAK+
+ MARGIN+ "<p0:stockQuote xmlns:p0=\"http://www.example.com/simple\">" +LINE_BREAK+
+ MARGIN+INDENT+"<symbol>fbnt</symbol>" +LINE_BREAK+
+ MARGIN+INDENT+"<companyName>FlyByNightTechnology</companyName>" +LINE_BREAK+
+ MARGIN+INDENT+"<price>1000.0</price>" +LINE_BREAK+
+ MARGIN+INDENT+"<open1>1000.0</open1>" +LINE_BREAK+
+ MARGIN+INDENT+"<high>1000.0</high>" +LINE_BREAK+
+ MARGIN+INDENT+"<low>1000.0</low>" +LINE_BREAK+
+ MARGIN+INDENT+"<volume>1000.0</volume>" +LINE_BREAK+
+ MARGIN+INDENT+"<change1>1000.0</change1>" +LINE_BREAK+
+ MARGIN+"</p0:stockQuote>" +LINE_BREAK;
+
+ void define(final String model) throws IOException {
+ // Populate the meta data for the test model
+ final URL url = getClass().getResource(model);
+ xsdHelper.define(url.openStream(), url.toString());
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ //use XMLHelper
+ public void testSaveXMLDocumentXMLHelper() throws IOException {
+ final HashMap options = new HashMap();
+ options.put(org.apache.tuscany.sdo.api.SDOHelper.XMLOptions.XML_SAVE_INDENT, INDENT);
+ options.put(org.apache.tuscany.sdo.api.SDOHelper.XMLOptions.XML_SAVE_MARGIN, MARGIN);
+ options.put(org.apache.tuscany.sdo.api.SDOHelper.XMLOptions.XML_SAVE_LINE_BREAK, LINE_BREAK);
+ hc = SDOUtil.createHelperContext(false,options);
+ xsdHelper = hc.getXSDHelper();
+ xmlh = hc.getXMLHelper();
+
+ // Populate the meta data for the test (Stock Quote) model
+ define("/simpleWithChangeSummary.xsd");
+ final XMLDocument doc = xmlh.load(getClass().getResource("/simpleWithChangeSummary.xml").openStream());
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ xmlh.save(xmlh.createDocument(doc.getRootObject(), doc.getRootElementURI(), doc.getRootElementName()), baos, null);
+ assertEquals(formatted1, baos.toString());
+ }
+
+ //use XMLStreamHelper
+ public void testSaveXMLDocumentXMLStreamHelper() throws Exception {
+ final HashMap options = new HashMap();
+ options.put(SDOHelper.XMLOptions.XML_LOAD_SCHEMA, Boolean.FALSE);
+ options.put(org.apache.tuscany.sdo.api.SDOHelper.XMLOptions.XML_SAVE_INDENT, INDENT);
+ options.put(org.apache.tuscany.sdo.api.SDOHelper.XMLOptions.XML_SAVE_MARGIN, MARGIN);
+ options.put(org.apache.tuscany.sdo.api.SDOHelper.XMLOptions.XML_SAVE_LINE_BREAK, LINE_BREAK);
+ final HelperContext hc = SDOUtil.createHelperContext(false, options);
+ xmlStreamHelper = SDOUtil.createXMLStreamHelper(hc);
+
+ xsdHelper = hc.getXSDHelper();
+ define("/simple.xsd");
+
+ final InputStream inStrm = getClass().getResourceAsStream("/shallowquote.xml");
+ final XMLDocument document = hc.getXMLHelper().load(inStrm, null, null);
+
+ final XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
+ final StringWriter writer = new StringWriter();
+ final XMLStreamWriter streamWriter = outputFactory.createXMLStreamWriter(writer);
+
+ xmlStreamHelper.save(document, streamWriter, null);
+ streamWriter.flush();
+ assertEquals(formatted2, writer.toString());
+ }
+}
diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLStreamHelperPerformanceTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLStreamHelperPerformanceTestCase.java new file mode 100644 index 0000000000..ef701059c4 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLStreamHelperPerformanceTestCase.java @@ -0,0 +1,91 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + + +import java.io.*; +import java.math.BigDecimal; +import java.net.URL; + +import javax.xml.stream.*; + +import org.apache.tuscany.sdo.api.XMLStreamHelper; +import org.apache.tuscany.sdo.api.SDOUtil; + +import junit.framework.TestCase; + +import commonj.sdo.*; +import commonj.sdo.helper.*; + + +public class XMLStreamHelperPerformanceTestCase extends TestCase { + private final String TEST_MODEL = "/XMLStreamHelper.xsd"; + private final String TEST_NAMESPACE = "http://www.example.com/simple"; + + HelperContext hc; + + /** + * Simple Dynamic SDO 2 test. + */ + public void testDynamic() throws Exception { + final TypeHelper typeHelper = hc.getTypeHelper(); + final Type quoteType = typeHelper.getType(TEST_NAMESPACE, "Quote"); + final DataObject quote = hc.getDataFactory().create(quoteType); + + quote.setString("symbol", "fbnt"); + quote.setString("companyName", "FlyByNightTechnology"); + quote.setBigDecimal("price", new BigDecimal("1000.0")); + quote.setBigDecimal("open1", new BigDecimal("1000.0")); + quote.setBigDecimal("high", new BigDecimal("1000.0")); + quote.setBigDecimal("low", new BigDecimal("1000.0")); + quote.setDouble("volume", 1000); + quote.setDouble("change1", 1000); + + final DataObject child = quote.createDataObject("quotes"); + child.setBigDecimal("price", new BigDecimal("2000.0")); + + final DataObject quote3 = quote.createDataObject("quotes3"); + quote3.setString("symbol3", "IBM"); + quote3.setString("company3", "IBM Corp."); + + final XMLStreamHelper streamHelper = SDOUtil.createXMLStreamHelper(hc); + final XMLOutputFactory outputFactory = XMLOutputFactory.newInstance(); + final StringWriter writer = new StringWriter(); + final XMLStreamWriter streamWriter = outputFactory.createXMLStreamWriter(writer); + + final XMLDocument doc = hc.getXMLHelper().createDocument(quote, TEST_NAMESPACE, "stockQuote"); + streamHelper.save(doc, streamWriter); + streamWriter.flush(); + assertEquals("<p0:stockQuote xmlns:p0=\"http://www.example.com/simple\" xmlns:p1=\"http://www.example.com/simple3\"><p0:symbol>fbnt</p0:symbol><p0:companyName>FlyByNightTechnology</p0:companyName><p0:price>1000.0</p0:price><p0:open1>1000.0</p0:open1><p0:high>1000.0</p0:high><p0:low>1000.0</p0:low><p0:volume>1000.0</p0:volume><p0:change1>1000.0</p0:change1><p0:quotes><p0:price>2000.0</p0:price></p0:quotes><p0:quotes3><p1:symbol3>IBM</p1:symbol3><p1:company3>IBM Corp.</p1:company3></p0:quotes3></p0:stockQuote>",writer.toString()); + } + + protected void setUp() throws Exception { + super.setUp(); + hc = SDOUtil.createHelperContext(); + + // Populate the meta data for the test (Stock Quote) model + final URL url = getClass().getResource(TEST_MODEL); + final InputStream inputStream = url.openStream(); + hc.getXSDHelper().define(inputStream, url.toString()); + inputStream.close(); + + } + +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLStreamHelperTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLStreamHelperTestCase.java new file mode 100644 index 0000000000..35df4909ba --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLStreamHelperTestCase.java @@ -0,0 +1,169 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.io.*; +import java.net.URL; +import java.util.*; + +import javax.xml.namespace.QName; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLOutputFactory; +import javax.xml.stream.XMLStreamConstants; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import org.apache.tuscany.sdo.api.XMLStreamHelper; +import org.apache.tuscany.sdo.api.SDOUtil; +import commonj.sdo.DataObject; +import commonj.sdo.helper.*; + +public class XMLStreamHelperTestCase extends TestCase { + + private HelperContext hc; + + private XMLStreamHelper streamHelper; + + private XMLInputFactory inputFactory; + + private XMLOutputFactory outputFactory; + + private final QName module = new QName("http://foo", "module"); + + private final QName name = new QName("http://bar", "implementation.mock"); + + private final String testName = "foo-ext"; + // private String testName = "complex"; + + private String xml; + + // = "<module name=\"m\" xmlns=\"http://foo\" xmlns:bar=\"http://bar\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" + // xsi:schemaLocation=\"http://bar foo-ext.xsd http://foo foo.xsd \"><component name=\"c\"><bar:implementation.mock + // myAttr=\"helloworld.HelloWorldImpl\" listAttr=\"1 2\">1<bar:myElement>Dummy</bar:myElement>2</bar:implementation.mock></component></module>"; + + protected void setUp() throws Exception { + super.setUp(); + + hc = SDOUtil.createHelperContext(); + streamHelper = SDOUtil.createXMLStreamHelper(hc); + + URL url = getClass().getClassLoader().getResource(testName + ".xsd"); + hc.getXSDHelper().define(url.openStream(), url.toExternalForm()); + url = getClass().getResource("/mixed.xsd"); + hc.getXSDHelper().define(url.openStream(), url.toString()); + + inputFactory = XMLInputFactory.newInstance(); + outputFactory = XMLOutputFactory.newInstance(); + + url = getClass().getClassLoader().getResource(testName + ".xml"); + final InputStreamReader reader = new InputStreamReader(url.openStream()); + final StringBuffer stringBuffer = new StringBuffer(); + final char buf[] = new char[1024]; + int size; + while ((size = reader.read(buf)) != -1) { + stringBuffer.append(buf, 0, size); + } + xml = stringBuffer.toString(); + reader.close(); + } + + public void testLoadObject() throws Exception { + final XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(xml)); + int event = reader.getEventType(); + while (!((event == XMLStreamConstants.START_ELEMENT) && reader.getName().equals(name)) && reader.hasNext()) { + event = reader.next(); + } + final DataObject dataObject = streamHelper.loadObject(reader); + Assert.assertNotNull(dataObject); + Assert.assertTrue(dataObject.getString("myAttr").equals("helloworld.HelloWorldImpl")); + } + + public void testLoadUnqualifiedObject() throws Exception { + final XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(xml.replaceAll("bar:", ""))); + int event = reader.getEventType(); + while (!((event == XMLStreamConstants.START_ELEMENT) && reader.getName().getLocalPart().equals(name.getLocalPart())) && reader.hasNext()) { + event = reader.next(); + } + final Map options = new HashMap(); + options.put(XMLStreamHelper.OPTION_DEFAULT_ROOT_TYPE, hc.getTypeHelper().getType(name.getNamespaceURI(), "MockImplementation")); + final DataObject dataObject = streamHelper.loadObject(reader, options); + Assert.assertNotNull(dataObject); + Assert.assertTrue(dataObject.getString("myAttr").equals("helloworld.HelloWorldImpl")); + } + + public void testLoad() throws Exception { + final XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(xml)); + final XMLDocument document = streamHelper.load(reader); + Assert.assertNotNull(document); + Assert.assertEquals(document.getRootElementURI(), module.getNamespaceURI()); + Assert.assertEquals(document.getRootElementName(), module.getLocalPart()); + final DataObject moduleObject = document.getRootObject(); + final List components = moduleObject.getList("component"); + final DataObject componentObject = (DataObject) components.get(0); + final DataObject implObject = componentObject.getDataObject("implementation.mock"); + Assert.assertTrue(implObject.getString("myAttr").equals("helloworld.HelloWorldImpl")); + } + + public void testSave() throws XMLStreamException { + final XMLDocument document = hc.getXMLHelper().load(xml); + final StringWriter writer = new StringWriter(); + final XMLStreamWriter streamWriter = outputFactory.createXMLStreamWriter(writer); + streamHelper.save(document, streamWriter); + streamWriter.flush(); + final String xmlStr = writer.toString(); + //System.out.println(xmlStr); + Assert.assertTrue(xmlStr.indexOf("myAttr=\"helloworld.HelloWorldImpl\"")!=-1); + } + + public void testSaveObject() throws XMLStreamException { + final XMLDocument document = hc.getXMLHelper().load(xml); + final DataObject moduleObject = document.getRootObject(); + final List components = moduleObject.getList("component"); + final DataObject componentObject = (DataObject) components.get(0); + final StringWriter writer = new StringWriter(); + final XMLStreamWriter streamWriter = outputFactory.createXMLStreamWriter(writer); + streamHelper.saveObject(componentObject, streamWriter); + streamWriter.flush(); + Assert.assertTrue(writer.toString().indexOf("myAttr=\"helloworld.HelloWorldImpl\"")!=-1); + } + + public void testSaveSequence() throws IOException, XMLStreamException { + final DataObject quote = hc.getDataFactory().create("http://www.example.com/mixed", "MixedQuote"); + quote.setString("symbol", "fbnt"); + quote.getSequence().addText(0, "testing"); + quote.getSequence().addText("more testing"); + + final StringWriter writer = new StringWriter(); + final XMLStreamWriter streamWriter = outputFactory.createXMLStreamWriter(writer); + streamHelper.saveObject(quote, streamWriter); + streamWriter.flush(); + //System.out.println(writer); + assertTrue(writer.toString().indexOf("<symbol>fbnt</symbol>") != -1); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLUnknownPropertiesTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLUnknownPropertiesTestCase.java new file mode 100644 index 0000000000..63e92503c1 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLUnknownPropertiesTestCase.java @@ -0,0 +1,132 @@ +/**
+ *
+ * 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.
+ */
+package org.apache.tuscany.sdo.test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sdo.SDOPackage;
+import org.apache.tuscany.sdo.api.SDOHelper;
+import org.apache.tuscany.sdo.api.SDOUtil;
+import commonj.sdo.DataObject;
+import commonj.sdo.helper.HelperContext;
+import commonj.sdo.helper.XMLDocument;
+import commonj.sdo.helper.XMLHelper;
+
+public class XMLUnknownPropertiesTestCase extends TestCase {
+ XMLHelper xmlHelper;
+ Map options;
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ // SDOUtil->SDOHelper->SDOHelperImpl->HelperContextImpl->XMLHelperImpl
+ public void testOptionUnknownProperties() throws IOException {
+ options = new HashMap();
+ options.put(SDOHelper.XMLOptions.XML_LOAD_UNKNOWN_PROPERTIES, Boolean.TRUE);
+
+ final HelperContext hc = SDOUtil.createHelperContext(true);
+ hc
+ .getXSDHelper()
+ .define("<schema xmlns=\"http://www.w3.org/2001/XMLSchema\" targetNamespace=\"testNS\">" + "<element name=\"root\">"
+ + "<complexType>"
+ + "<sequence>"
+ + "<element name=\"unqualifiedElement\" type=\"string\"/>"
+ + "<element name=\"qualifiedElement\" form=\"qualified\" type=\"string\"/>"
+ + "</sequence>"
+ + "<attribute name=\"unqualifiedAttribute\" type=\"string\"/>"
+ + "<attribute name=\"qualifiedAttribute\" form=\"qualified\" type=\"string\"/>"
+ + "</complexType>"
+ + "</element>"
+ + "</schema>");
+
+ final String xml =
+ "<p:root xmlns:p=\"testNS\">" + "<unqualifiedElement/>"
+ + "<telem>my test data0</telem>"
+ + "<zap>my test data1</zap>"
+ + "</p:root>";
+
+ try {
+ final XMLDocument xmlDoc = hc.getXMLHelper().load(new StringReader(xml), null, options);// pass
+ // during
+ // invoke
+
+ final DataObject root = xmlDoc.getRootObject();
+ assertNotSame(root.getType(), SDOPackage.eINSTANCE.getAnyTypeDataObject());
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ hc.getXMLHelper().save(xmlDoc, baos, null);
+ assertTrue(baos.toString().indexOf("<telem>my test data0</telem>") != -1);
+ assertTrue(baos.toString().indexOf("<zap>my test data1</zap>") != -1);
+ } catch (final Exception e) {// (Resource.IOWrappedException featureNotFound)
+ e.printStackTrace();
+ }
+ }
+
+ public void testOptionUnknownProperties2() throws IOException {
+ options = new HashMap();
+ options.put(SDOHelper.XMLOptions.XML_LOAD_UNKNOWN_PROPERTIES, Boolean.FALSE);
+
+ final HelperContext hc = SDOUtil.createHelperContext(true);
+ hc
+ .getXSDHelper()
+ .define("<schema xmlns=\"http://www.w3.org/2001/XMLSchema\" targetNamespace=\"testNS\">" + "<element name=\"root\">"
+ + "<complexType>"
+ + "<sequence>"
+ + "<element name=\"unqualifiedElement\" type=\"string\"/>"
+ + "<element name=\"qualifiedElement\" form=\"qualified\" type=\"string\"/>"
+ + "</sequence>"
+ + "<attribute name=\"unqualifiedAttribute\" type=\"string\"/>"
+ + "<attribute name=\"qualifiedAttribute\" form=\"qualified\" type=\"string\"/>"
+ + "</complexType>"
+ + "</element>"
+ + "</schema>");
+
+ final String xml =
+ "<p:root xmlns:p=\"testNS\">" + "<unqualifiedElement/>"
+ + "<telem>my test data</telem>"
+ + "<telem1>my test data</telem1>"
+ + "</p:root>";
+
+ try {
+ final XMLDocument xmlDoc = hc.getXMLHelper().load(new StringReader(xml), null, options);// pass
+ // on
+ // invokation
+ final DataObject root = xmlDoc.getRootObject();
+ assertNotSame(root.getType(), SDOPackage.eINSTANCE.getAnyTypeDataObject());
+ fail();
+ } catch (final Exception e) {// (Resource.IOWrappedException featureNotFound)
+ // e.printStackTrace();
+ if (e.getMessage().indexOf("telem") != -1) {
+ Assert.assertTrue(true);
+ }
+ }
+ }
+}
diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XPathTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XPathTestCase.java new file mode 100644 index 0000000000..45f92a73b2 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XPathTestCase.java @@ -0,0 +1,125 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +import junit.framework.TestCase; + +import org.apache.tuscany.sdo.util.SDOUtil; + +import commonj.sdo.DataObject; +import commonj.sdo.helper.HelperContext; +import commonj.sdo.helper.XMLDocument; +import commonj.sdo.helper.XMLHelper; +import commonj.sdo.helper.XSDHelper; + +public class XPathTestCase extends TestCase { + + HelperContext hc; + + protected void setUp() throws Exception { + super.setUp(); + hc = SDOUtil.createHelperContext(); + } + + private final String TEST_MODEL = "/xpath.xsd"; + private final String XPATH_XML = "/xpath.xml"; + + /** + * The presence or absence of the @ sign in a path has no meaning. + * Properties are always matched by name independent of their XML representation. + * @throws IOException + */ + public void testAtSignProperty() throws IOException { + XSDHelper xsdHelper = hc.getXSDHelper(); + XMLHelper xmlHelper = hc.getXMLHelper(); + + URL url = getClass().getResource(TEST_MODEL); + InputStream inputStream = url.openStream(); + xsdHelper.define(inputStream, url.toString()); + + inputStream.close(); + + XMLDocument doc = xmlHelper.load(getClass().getResourceAsStream(XPATH_XML)); + + DataObject drive = doc.getRootObject(); + DataObject folder1 = (DataObject) drive.get("Folder.1"); + String value = folder1.getString("@creation_date"); + + assertEquals(value, "2000-03-23"); + } + + public void testListIndexing() throws Exception { + XSDHelper xsdHelper = hc.getXSDHelper(); + XMLHelper xmlHelper = hc.getXMLHelper(); + + URL url = getClass().getResource(TEST_MODEL); + InputStream inputStream = url.openStream(); + xsdHelper.define(inputStream, url.toString()); + + inputStream.close(); + + XMLDocument doc = xmlHelper.load(getClass().getResourceAsStream(XPATH_XML)); + + DataObject root = doc.getRootObject(); + DataObject folder1 = root.getDataObject("Folder[1]"); + assertNotNull(folder1); + DataObject folder1a = root.getDataObject("Folder.0"); + assertEquals(folder1, folder1a); + folder1a = root.getDataObject("Folder[FolderName=Folder00000000000]"); + assertEquals(folder1, folder1a); + + DataObject noFolder = null; + + try { + noFolder = root.getDataObject("Folder[3]"); + assertNull(noFolder); + } catch (Exception e) { + assertFalse("bad indexing generated exception" + e, true); + } + + try { + noFolder = root.getDataObject("Folder[0]"); + assertNull(noFolder); + } catch (Exception e) { + assertFalse("bad indexing generated exception" + e, true); + } + + try { + noFolder = root.getDataObject("Folder.2"); + assertNull(noFolder); + } catch (Exception e) { + assertFalse("bad indexing generated exception" + e, true); + } + + try { + noFolder = root.getDataObject("Folder.-1"); + assertNull(noFolder); + } catch (Exception e) { + assertFalse("bad indexing generated exception" + e, true); + } + + noFolder = root.getDataObject("Folder[FolderName=foo]"); + assertNull(noFolder); + } +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XSDHelperTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XSDHelperTestCase.java new file mode 100644 index 0000000000..b8d3402172 --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XSDHelperTestCase.java @@ -0,0 +1,224 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.io.IOException; +import java.net.URL; +import java.util.Hashtable; +import java.util.List; +import java.util.Vector; + +import junit.framework.TestCase; + +import org.apache.tuscany.sdo.util.SDOUtil; + +import com.example.simple.SimpleFactory; +import commonj.sdo.DataObject; +import commonj.sdo.Type; +import commonj.sdo.helper.DataFactory; +import commonj.sdo.helper.HelperContext; +import commonj.sdo.helper.TypeHelper; +import commonj.sdo.helper.XSDHelper; + +/** + * @version $Rev$ $Date$ + */ +public class XSDHelperTestCase extends TestCase { + private static final String TEST_MODEL = "/simple.xsd"; + private static final String TEST_MODEL2 = "/xsdCorners.xsd"; + private URL modelURL; + private URL xsdCornersURL; + + HelperContext hc; + + protected void setUp() throws Exception { + super.setUp(); + hc = SDOUtil.createHelperContext(); + modelURL = getClass().getResource(TEST_MODEL); + xsdCornersURL = getClass().getResource(TEST_MODEL2); + } + + public void testDefineWithLocation() throws IOException { + XSDHelper xsdHelper = hc.getXSDHelper(); + List types = xsdHelper.define(modelURL.openStream(), modelURL.toString()); + assertEquals(2, types.size()); + } + + public void testDefineWithNoLocation() { + XSDHelper xsdHelper = hc.getXSDHelper(); + List types = xsdHelper.define(getClass().getResourceAsStream(TEST_MODEL), null); + assertEquals(2, types.size()); + } + + public void testDuplicateDefineWithLocation() throws IOException { + XSDHelper xsdHelper = hc.getXSDHelper(); + List types = xsdHelper.define(modelURL.openStream(), modelURL.toString()); + assertEquals(2, types.size()); + + List types2 = xsdHelper.define(modelURL.openStream(), modelURL.toString()); + assertEquals(0, types2.size()); + } + + public void testXSDGeneration_staticSDOType() throws IOException + { + //test for static sdo type. The test succeeds if the IllegalArgumentException is thrown + //by XSDHelper.generate method in which case the string xsd must be null; + + SimpleFactory.INSTANCE.register(hc); + XSDHelper xsdHelper = hc.getXSDHelper(); + DataObject quoteSDO = (DataObject)SimpleFactory.INSTANCE.createQuote(); + List typeList = new Vector(); + typeList.add(quoteSDO.getType()); + String xsd = null; + + try + { + xsd = xsdHelper.generate(typeList); + xsd = ""; + } + catch ( IllegalArgumentException e ) + { + } + assertNull(xsd); + } + + public void testXSDGeneration_DynamicSDOType() throws IOException + { + //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 = hc.getXSDHelper(); + DataObject quoteType = DataFactory.INSTANCE.create("commonj.sdo", "Type"); + quoteType.set("uri", "http://www.example.com/dynamic"); + quoteType.set("name", "DynamicQuote"); + + DataObject aProperty = quoteType.createDataObject("property"); + aProperty.set("name", "symbol"); + aProperty.set("type", TypeHelper.INSTANCE.getType("commonj.sdo", "String")); + + aProperty = quoteType.createDataObject("property"); + aProperty.set("name", "price"); + aProperty.set("type", TypeHelper.INSTANCE.getType("commonj.sdo", "Decimal")); + + aProperty = quoteType.createDataObject("property"); + aProperty.set("name", "volume"); + aProperty.set("type", TypeHelper.INSTANCE.getType("commonj.sdo", "Double")); + + TypeHelper.INSTANCE.define(quoteType); + + Type dynamicQuoteType = + TypeHelper.INSTANCE.getType("http://www.example.com/dynamic", "DynamicQuote"); + + Vector types = new Vector(); + types.add(dynamicQuoteType); + String xsd = null; + + try + { + xsd = xsdHelper.generate(types); + //System.out.println(xsd); + } + catch ( IllegalArgumentException e ) + { + } + assertNotNull(xsd); + + } + + public void testXSDGeneration_DynamicWithNestedStaticSDOType() throws IOException + { + //testing static SDO with XSD Model being contained in a Dynamic SDO not having an XSD Model. + //the schema must be generated with imports / includes for the XSD corresponding to the static + //sdo types. + TypeHelper typeHelper = hc.getTypeHelper(); + XSDHelper xsdHelper = hc.getXSDHelper(); + + SimpleFactory.INSTANCE.register(hc); + DataObject quoteSDO = (DataObject)SimpleFactory.INSTANCE.createQuote(); + + + DataObject quoteType = DataFactory.INSTANCE.create("commonj.sdo", "Type"); + quoteType.set("uri", "http://www.example.com/dynamic"); + quoteType.set("name", "DynamicQuote"); + + DataObject aProperty = quoteType.createDataObject("property"); + aProperty.set("name", "symbol"); + aProperty.set("type", typeHelper.getType("commonj.sdo", "String")); + + aProperty = quoteType.createDataObject("property"); + aProperty.set("name", "price"); + aProperty.set("type", typeHelper.getType("commonj.sdo", "Decimal")); + + aProperty = quoteType.createDataObject("property"); + aProperty.set("name", "volume"); + aProperty.set("type", typeHelper.getType("commonj.sdo", "Double")); + + aProperty = quoteType.createDataObject("property"); + aProperty.set("name", "containedQuotes"); + aProperty.set("type", typeHelper.getType(quoteSDO.getType().getURI(), quoteSDO.getType().getName())); + aProperty.set("containment", new Boolean(true)); + + aProperty = quoteType.createDataObject("property"); + aProperty.set("name", "referredQuotes"); + aProperty.set("type", typeHelper.getType(quoteSDO.getType().getURI(), quoteSDO.getType().getName())); + + typeHelper.define(quoteType); + + Type dynamicQuoteType = + typeHelper.getType("http://www.example.com/dynamic", "DynamicQuote"); + Vector types = new Vector(); + types.add(dynamicQuoteType); + String xsd = null; + + try + { + Hashtable schemaLocationMap = new Hashtable(); + schemaLocationMap.put("http://www.example.com/simple", "http://www.example.com/simple/xsd"); + xsd = xsdHelper.generate(types, schemaLocationMap); + //System.out.println(xsd); + } + catch ( IllegalArgumentException e ) + { + } + assertNotNull(xsd); + + } + + public void testPrefixFromNSWithHyphenNumber() throws IOException { + XSDHelper xsdHelper = hc.getXSDHelper(); + xsdHelper.define(xsdCornersURL.openStream(), xsdCornersURL.toString()); + DataFactory df = hc.getDataFactory(); + DataObject root = df.create("http://www.example.com/simple-1", "A"); + root.setString("a1", "a1s"); + root.setString("a2", "a2s"); + + String doc = hc.getXMLHelper().save(root, "http://www.example.com/simple-1", "a"); + assertTrue(doc.indexOf("xmlns:s1=\"http://www.example.com/simple-1\"") != -1); + } + + public void testShortPrefix() throws IOException { + XSDHelper xsdHelper = hc.getXSDHelper(); + URL url = getClass().getResource("/prefix.xsd"); + xsdHelper.define(url.openStream(), url.toString()); + DataObject cmd = hc.getDataFactory().create("http://soaassureservice.soabench.ibm.com", "CreateClaim"); + cmd.setString("requestInfo", "cost"); + String doc = hc.getXMLHelper().save(cmd, "http://soaassureservice.soabench.ibm.com", "createClaim"); + assertTrue(doc.indexOf("xmlns:as=\"http://soaassureservice.soabench.ibm.com\"") != -1); + } +} diff --git a/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XSDQNameTestCase.java b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XSDQNameTestCase.java new file mode 100644 index 0000000000..f369b340ed --- /dev/null +++ b/sdo-java/tags/1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XSDQNameTestCase.java @@ -0,0 +1,123 @@ +/** + * + * 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. + */ +package org.apache.tuscany.sdo.test; + +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import junit.framework.TestCase; + +import commonj.sdo.DataObject; +import commonj.sdo.Type; +import commonj.sdo.helper.HelperContext; +import commonj.sdo.helper.TypeHelper; +import commonj.sdo.helper.XMLDocument; +import org.apache.tuscany.sdo.api.SDOUtil; + +public class XSDQNameTestCase extends TestCase { + private final String xsdString = + "<xsd:schema targetNamespace=\"http://www.example.com/simple\" " + + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " + + "xmlns:simple=\"http://www.example.com/simple\"> " + + "<xsd:element name=\"stockQuote\" type=\"simple:Quote\"/> " + + "<xsd:complexType name=\"Quote\"> " + + "<xsd:sequence> " + + "<xsd:element name=\"symbol\" type=\"xsd:string\"/> " + + "<xsd:element name=\"policy\" type=\"xsd:QName\"/> " + + "</xsd:sequence> " + + "</xsd:complexType> " + + "</xsd:schema>"; + + private final String xmlString = + "<?xml version=\"1.0\" encoding=\"ASCII\"?> " + + "<simple:stockQuote xmlns:simple=\"http://www.example.com/simple\"> " + + "<symbol>fbnt</symbol> " + + "<policy>simple:stockQuote</policy> " + + "</simple:stockQuote>"; + + private final String TEST_NAMESPACE = "http://www.example.com/simple"; + + HelperContext hc; + TypeHelper th; + + /** + * Based on Spec 2.1, section 9.4.1, the return value of DataObject.get() on XSD QName property + * should be http://www.example.com/simple#stockQuote + * TODO add this to the CTS + * + * @throws IOException + */ + public void testLoad() throws IOException { + XMLDocument doc = hc.getXMLHelper().load(xmlString); + DataObject root = doc.getRootObject(); + assertEquals("http://www.example.com/simple#stockQuote", root.get("policy")); + } + + /** + * After serialization, the value of XSD QName property in XML should be <prefix>:stockQuote + */ + public void testSave() throws IOException { + Type quoteType = th.getType(TEST_NAMESPACE, "Quote"); + DataObject quote = hc.getDataFactory().create(quoteType); + + quote.setString("symbol", "fbnt"); + quote.set("policy", "http://www.example.com/simple#stockQuote"); + + String str = hc.getXMLHelper().save(quote, TEST_NAMESPACE, "stockQuote"); + int start = str.indexOf("<policy>"); + int end = str.indexOf("</policy>"); + assertTrue(start != -1 && end != -1); + + String policyValue = str.substring(start + "<policy>".length(), end); + + Pattern pattern = Pattern.compile(".*:stockQuote"); // prefix can be anything + + Matcher matcher = pattern.matcher(policyValue); + assertTrue(matcher.find()); + } + + /** + * Test the scenario that the xsd:QName property value contains non-existent namespace + */ + public void testSave2() throws IOException { + Type quoteType = th.getType(TEST_NAMESPACE, "Quote"); + DataObject quote = hc.getDataFactory().create(quoteType); + + quote.setString("symbol", "fbnt"); + quote.set("policy", "http://www.example.com/simple2#stockQuote"); + + String str = hc.getXMLHelper().save(quote, TEST_NAMESPACE, "stockQuote"); + + // Make sure the non-existent namespace was serialized + Pattern pattern = Pattern.compile(".*xmlns:.*=\"http://www.example.com/simple2\""); + Matcher matcher = pattern.matcher(str); + assertTrue(matcher.find()); + } + + protected void setUp() throws Exception { + super.setUp(); + + hc = SDOUtil.createHelperContext(); + th = hc.getTypeHelper(); + + hc.getXSDHelper().define(xsdString); + } +} |