/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
* $Rev$ $Date$
*/
package test.sdo21.tests.scenarios;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import test.sdo21.framework.junit3_8.CTSTestCase;
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.XMLDocument;
import commonj.sdo.helper.XMLHelper;
/**
* Test cases for the DataObject SDO implementation.
*/
public class DataObjectListTest extends CTSTestCase {
/**
* Number of iterations for data type tests (sets and retrieves random
* values for each data type)
*/
public static final int DATA_TYPE_ITERATIONS = 10;
private static int unique = 0;
public DataObjectListTest(String title) {
super(title);
}
public void setUp() throws Exception {
super.setUp();
}
/**
* Helper function for converions tests.
*/
private DataObject createType(String uri, String name) {
DataObject newType = DataFactory.INSTANCE.create("commonj.sdo", "Type");
newType.set("uri", uri);
newType.set("name", name);
return newType;
}
/**
* Helper function for converions tests. Creates a new type property with
* unique name and data hold property
*
* @return the property DataObject.
*/
private DataObject createTestObjectType() {
String uri = "http://example.com/DataObjectImplTest/" + unique;
String name = "DataObjectImplTest" + unique;
unique++;
// create new DataType
DataObject newType = createType(uri, name);
// define the type
TypeHelper types = TypeHelper.INSTANCE;
types.define(newType);
return newType;
}
/**
* Helper function.
*/
private Type getNewTestType() {
String uri = "http://example.com/DataObjectImplTest/" + (unique - 1);
String name = "DataObjectImplTest" + (unique - 1);
return TypeHelper.INSTANCE.getType(uri, name);
}
/**
* Helper function. Creates a new DataObject with unique Name and URI
*
* @return the created DataObject.
*/
private DataObject createTestObject() {
String uri = "http://example.com/DataObjectImplTest/" + (unique - 1);
String name = "DataObjectImplTest" + (unique - 1);
// create DataObject with new Type
DataObject newObj = DataFactory.INSTANCE.create(uri, name);
return newObj;
}
/**
* See SDO Spec 2.1.0 3.1.13 DataObject Accessor Exceptions General
* get(String path) returns null if path does not exist
*/
public void testGetInvalidInstanceProperty() {
createTestObjectType();
DataObject testObj = createTestObject();
assertNotNull(testObj);
commonj.sdo.Property property = testObj.getInstanceProperty("nonexistentProperty");
assertNull("testObj.getInstanceProperty(\"nonexistentProperty\") should return null", property);
}
private void createTestObjectTypes() {
Type typeCheck = TypeHelper.INSTANCE.getType("", "catalog2");
if (typeCheck == null) {
/*
* create type system catalog2 - product2:DataObject[isMany:true]
* product2 - nameTest:String my guess is that the intention is
* catalog2 - product2:product2(isMany:true) - nameTest:String
*/
DataObject newType = createType("", "catalog2");
TypeHelper types = TypeHelper.INSTANCE;
DataObject newType2 = createType("", "product2");
Property xmlElementProp = getScope().getXSDHelper().getGlobalProperty("commonj.sdo/xml", "xmlElement", false);
DataObject property = newType2.createDataObject("property");
property.set("name", "name");
property.set("type", TypeHelper.INSTANCE.getType("commonj.sdo", "String"));
property.setBoolean(xmlElementProp, false);
Type nt2 = types.define(newType2);
DataObject property2 = newType.createDataObject("property");
property2.set("name", "product2");
property2.set("type", nt2);
property2.setBoolean("many", true);
types.define(newType);
}
}
private XMLDocument loadDocFromString(String strXML) {
createTestObjectTypes();
return XMLHelper.INSTANCE.load(strXML);
}
private List createTestObj(XMLDocument doc) {
return doc.getRootObject().getList("product2");
}
public void testClear() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
listTest.clear();
assertEquals(0, listTest.size());
}
public void testIsEmpty() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
assertFalse(listTest.isEmpty());
XMLDocument doc2 = loadDocFromString("");
List listTest2 = createTestObj(doc2);
assertNotNull(listTest2);
assertEquals(0, listTest2.size());
assertTrue(listTest2.isEmpty());
}
public void testToArray() {
String xmldoc =
"";
// ""
XMLDocument doc = loadDocFromString(xmldoc);
List listTest = createTestObj(doc);
assertNotNull(listTest);
Object[] objArray = listTest.toArray();
assertNotNull(objArray);
assertEquals(2, objArray.length);
// assertEquals("name1",((DataObject)objArray[0]).getString("nameTest"));
assertEquals("name2", ((DataObject)objArray[1]).getString("name"));
}
public void testAddNull() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
try {
listTest.add(null);
fail("no exception were thrown");
}
// TODO investigate interoperability issue
catch (java.lang.NullPointerException e) {
// RogueWave success
} catch (IllegalArgumentException e) {
// Tuscany success
}
}
public void testAddObject() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(0, listTest.size());
DataObject doInsert = DataFactory.INSTANCE.create("", "product2");
assertNotNull(doInsert);
doInsert.setString("name", "aname");
listTest.add(0, doInsert);
assertEquals(1, listTest.size());
DataObject doRes = (DataObject)listTest.get(0);
assertEquals("aname", doRes.getString("name"));
}
public void testAddAll() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
DataObject doInsert1 = DataFactory.INSTANCE.create("", "product2");
assertNotNull(doInsert1);
doInsert1.setString("name", "aname1");
DataObject doInsert2 = DataFactory.INSTANCE.create("", "product2");
assertNotNull(doInsert2);
doInsert2.setString("name", "aname2");
ArrayList arraylist2 = new ArrayList();
arraylist2.add(doInsert1);
arraylist2.add(doInsert2);
listTest.addAll(0, arraylist2);
assertEquals(4, listTest.size());
DataObject doRes = (DataObject)listTest.get(0);
assertEquals("aname1", doRes.getString("name"));
}
public void testAddAllCollection() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
DataObject doInsert1 = DataFactory.INSTANCE.create("", "product2");
assertNotNull(doInsert1);
doInsert1.setString("name", "aname1");
DataObject doInsert2 = DataFactory.INSTANCE.create("", "product2");
assertNotNull(doInsert2);
doInsert2.setString("name", "aname2");
ArrayList arraylist2 = new ArrayList();
arraylist2.add(doInsert1);
arraylist2.add(doInsert2);
boolean bRes = listTest.addAll(arraylist2);
assertTrue(bRes);
assertEquals(4, listTest.size());
DataObject doRes = (DataObject)listTest.get(2);
assertEquals("aname1", doRes.getString("name"));
}
public void testAddAllCollectionEmpty() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
ArrayList arraylist2 = new ArrayList();
boolean bRes = listTest.addAll(arraylist2);
assertFalse(bRes);
assertEquals(2, listTest.size());
}
public void testIndexOf() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
DataObject do1 = (DataObject)listTest.get(1);
assertNotNull(do1);
int nIdx = listTest.indexOf(do1);
assertEquals(1, nIdx);
}
public void testLastIndexOf() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
DataObject do1 = (DataObject)listTest.get(1);
assertNotNull(do1);
int nIdx = listTest.lastIndexOf(do1);
assertEquals(1, nIdx);
}
public void testContains() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
DataObject do1 = (DataObject)listTest.get(1);
assertNotNull(do1);
boolean bRes = listTest.contains(do1);
assertTrue(bRes);
DataObject doTest = DataFactory.INSTANCE.create("", "product2");
assertNotNull(doTest);
bRes = listTest.contains(doTest);
assertFalse(bRes);
}
public void testRemoveObject() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
DataObject do1 = (DataObject)listTest.get(1);
assertNotNull(do1);
boolean bRes = listTest.remove(do1);
assertTrue(bRes);
assertEquals(1, listTest.size());
DataObject doTest = DataFactory.INSTANCE.create("", "product2");
assertNotNull(doTest);
bRes = listTest.remove(doTest);
assertFalse(bRes);
assertEquals(1, listTest.size());
}
public void testContainsAll() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
DataObject do1 = (DataObject)listTest.get(1);
assertNotNull(do1);
ArrayList arraylist1 = new ArrayList();
arraylist1.add(do1);
boolean bRes = listTest.containsAll(arraylist1);
assertTrue(bRes);
DataObject doTest = DataFactory.INSTANCE.create("", "product2");
assertNotNull(doTest);
arraylist1.add(doTest);
bRes = listTest.containsAll(arraylist1);
assertFalse(bRes);
}
public void testRemoveAll() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
DataObject do1 = (DataObject)listTest.get(1);
assertNotNull(do1);
ArrayList arraylist1 = new ArrayList();
arraylist1.add(do1);
boolean bRes = listTest.removeAll(arraylist1);
assertTrue(bRes);
assertEquals(1, listTest.size());
}
public void testRetainAll() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
DataObject do1 = (DataObject)listTest.get(1);
assertNotNull(do1);
ArrayList arraylist1 = new ArrayList();
arraylist1.add(do1);
boolean bRes = listTest.retainAll(arraylist1);
assertTrue(bRes);
assertEquals(1, listTest.size());
}
public void testIterator() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
Iterator iterRes = listTest.iterator();
assertNotNull(iterRes);
DataObject doRes = (DataObject)iterRes.next();
assertNotNull(doRes);
}
public void testSubList() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(3, listTest.size());
List listRes = listTest.subList(0, 1);
assertNotNull(listRes);
assertEquals("listTest.subList(0,1)", 1, listRes.size());
DataObject doRes = (DataObject)listRes.get(0);
assertNotNull(doRes);
}
public void testListIterator() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
ListIterator iterRes = listTest.listIterator();
assertNotNull(iterRes);
DataObject doRes = (DataObject)iterRes.next();
assertNotNull(doRes);
}
public void testListIteratorIndex() {
XMLDocument doc = loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
ListIterator iterRes = listTest.listIterator(0);
assertNotNull(iterRes);
DataObject doRes = (DataObject)iterRes.next();
assertNotNull(doRes);
}
public void testSetIndexObject() {
XMLDocument doc =
loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
DataObject doTest = DataFactory.INSTANCE.create("", "product2");
assertNotNull(doTest);
doTest.setString("name", "aname3");
Object objRes = listTest.set(0, doTest);
assertNotNull(objRes);
assertTrue(objRes instanceof DataObject);
}
public void testToArrayObject() {
XMLDocument doc =
loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
DataObject do1 = (DataObject)listTest.get(1);
assertNotNull(do1);
ArrayList arraylist2 = new ArrayList();
Object[] objRes = listTest.toArray(arraylist2.toArray());
assertNotNull(objRes);
assertEquals(2, objRes.length);
}
public void testToString() {
XMLDocument doc =
loadDocFromString("");
List listTest = createTestObj(doc);
assertNotNull(listTest);
assertEquals(2, listTest.size());
String strRes = listTest.toString();
assertNotNull(strRes);
assertTrue(strRes.length() > 0);
// assertEquals("List: [DataObjectImpl[ ]]",strRes);
}
}