blob: 6785652f70d6e4dc2a5ebf09e8ed3b3914771c6d [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.sdo.model.dataobject.xpathquery;
import commonj.sdo.DataObject;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import junit.textui.TestRunner;
import org.eclipse.persistence.sdo.SDOConstants;
import org.eclipse.persistence.sdo.SDODataObject;
import org.eclipse.persistence.sdo.SDOProperty;
import org.eclipse.persistence.sdo.SDOType;
public class SDODataObjectGetByXPathQueryTest extends SDODataObjectGetByXPathQueryTestCases {
public SDODataObjectGetByXPathQueryTest(String name) {
super(name);
}
public static void main(String[] args) {
String[] arguments = { "-c", "org.eclipse.persistence.testing.sdo.model.dataobject.xpathquery.SDODataObjectGetByXPathQueryTest" };
TestRunner.main(arguments);
}
//case:a/b.0/c[number="123"] where number is a many type property, and no objects meets requirement
public void testMultipleCaseOueryD1Colon() {
dataObject_d1.set(property_d_number, "123");
assertNull(dataObject_a.get("schema:PName-a/PName-b.0/PName-c[number=\"1\"]"));
}
//case:a/b.0/c[number="123"] where number is a many type property, and no objects meets requirement
public void testMultipleCaseOueryD1AliasName() {
List aliasNames = new ArrayList();
aliasNames.add("alias1");
aliasNames.add("alias2");
property_d_number.setAliasNames(aliasNames);
assertEquals(dataObject_d1, dataObject_a.get("schema:PName-a/PName-b.0/PName-c[alias1=\"1\"]"));
}
//case:a/b.0/c[number="123"] where number is a many type property, and no objects meets requirement
public void testMultipleCaseOueryD1AliasName_() {
List aliasNames = new ArrayList();
aliasNames.add("alias1");
aliasNames.add("alias2");
property_b.setAliasNames(aliasNames);
assertEquals(dataObject_d1, dataObject_a.get("schema:PName-a/alias2.0/PName-c[number=\"1\"]"));
}
public void testMiddleOpenContentPropertyAliasName() {
SDOType dataObjectType = (SDOType) typeHelper.getType(SDOConstants.SDO_URL, SDOConstants.DATAOBJECT);
SDOProperty property_open = new SDOProperty(aHelperContext);
property_open.setName("openProperty");
property_open.setType(dataObjectType);
property_open.setMany(false);
property_open.setContainment(true);
List aliasNames_ = new ArrayList();
aliasNames_.add("alias1");
aliasNames_.add("alias2");
property_open.setAliasNames(aliasNames_);
SDOType t = new SDOType("turi", "t");
//d.setType(t);
SDOProperty p = new SDOProperty(aHelperContext);
p.setName("P");
p.setType(SDOConstants.SDO_STRING);
p.setMany(false);
t.addDeclaredProperty(p);
SDODataObject d = (SDODataObject)dataFactory.create(t);
d.set(p, "test");
dataObject_b.set(property_open, d);
assertEquals("test", dataObject_a.get("schema:PName-a/openProperty/P"));
}
//case:a/b.0/c[number="123"] where number is a many type property, and no objects meets requirement
public void testMultipleCaseOueryD1AliasName1() {
//List aliasNames = new ArrayList();
//aliasNames.add("alias1");
//aliasNames.add("alias2");
//property_d_number.setAliasNames(aliasNames);
assertEquals(dataObject_d1, dataObject_a.get("schema:PName-a/PName-b.0/PName-c[alias1=\"1\"]"));
}
public void testMultipleCaseOueryD1AliasNameBaseTypes() {
//List aliasNames = new ArrayList();
//aliasNames.add("alias1");
//aliasNames.add("alias2");
type_d.addBaseType(baseType);
type_d.addBaseType(baseType1);
dataObject_d0._setType(type_d);
dataObject_d0.set("alias3", "1");
assertEquals(dataObject_d0, dataObject_a.get("schema:PName-a/PName-b.0/PName-c[alias3=\"1\"]"));
}
public void testMultipleCaseOueryD1AliasNameBaseTypes1() {
//List aliasNames = new ArrayList();
//aliasNames.add("alias1");
//aliasNames.add("alias2");
//property_d_number.setAliasNames(aliasNames);
type_c.addBaseType(baseType);
type_c.addBaseType(baseType1);
dataObject_c._setType(type_c);
dataObject_c.set("alias3", "1");
assertNull(dataObject_a.get("schema:PName-a/PName-b.0/alias10"));
}
public void testMultipleCaseOueryD1AliasNameBaseTypes2() {
//List aliasNames = new ArrayList();
//aliasNames.add("alias1");
//aliasNames.add("alias2");
//property_d_number.setAliasNames(aliasNames);
SDOType t = new SDOType("turi", "t");
SDOProperty p = new SDOProperty(aHelperContext);
p.setName("P");
p.setType(SDOConstants.SDO_STRING);
p.setMany(false);
t.addDeclaredProperty(p);
SDODataObject d = (SDODataObject)dataFactory.create(t);
d.set(p, "test");
type_b.addBaseType(baseType);
type_b.addBaseType(baseType1);
dataObject_b._setType(type_b);
dataObject_b.set("alias5", d);
assertEquals("test", dataObject_a.get("schema:PName-a/alias5/P"));
}
public void testMultipleCaseOueryD1AliasNameBaseTypes3() {
//List aliasNames = new ArrayList();
//aliasNames.add("alias1");
//aliasNames.add("alias2");
//property_d_number.setAliasNames(aliasNames);
SDOType t = new SDOType("turi", "t");
SDOProperty p = new SDOProperty(aHelperContext);
p.setName("P");
p.setType(SDOConstants.SDO_STRING);
p.setMany(false);
t.addDeclaredProperty(p);
SDODataObject d = (SDODataObject)dataFactory.create(t);
d.set(p, "test");
type_b.addBaseType(baseType);
type_b.addBaseType(baseType1);
dataObject_b._setType(type_b);
dataObject_b.set("alias5", d);
assertEquals("test", dataObject_a.get("schema:PName-a/baseProperty2/P"));
}
//case:a/b.0/c[number="123"] where number is a many type property, and no objects meets requirement
public void testMultipleCaseOueryD1AliasName1_() {
assertEquals(dataObject_d1, dataObject_a.get("schema:PName-a/alias2.0/PName-c[number=\"1\"]"));
}
// case: a/b[number=123]/c, more than one dataobject b in value list of dataobject a's property
// b meets the query requirement number=123
public void testMultipleCaseOuery() {
dataObject_d1.set(property_d_number, "123");
assertEquals(dataObject_d0, dataObject_a.get(property));
}
//case:a/b.0/c[number="123"] where number is a many type property, and no objects meets requirement
public void testMultipleCaseOueryD1() {
dataObject_d1.set(property_d_number, "123");
assertNull(dataObject_a.get("PName-a/PName-b.0/PName-c[number1=\"1\"]"));
}
//case:a/b.0/c[number='123'] where number is a many type property, and there are objects that meets requirement
// and value is doule 5.55
public void testMultipleCaseOueryD() {
dataObject_d1.set(property_d_number, "123");
assertEquals(dataObject_d1, dataObject_a.get(propertyD));
}
// case: a/b[number=123]/c, no match for the query condition: number=123
public void testQueryNotMatch() {
assertNull(dataObject_a.get("PName-a0/PName-b0[number='23']/PName-c0.0"));
}
// case: a/b[number=123]/c, dataobject b in value list of dataobject a's property b does not have
// property number
public void testQueryMiddlePositionalAtLast() {
DataObject resultDO = dataObject_a.getDataObject(property1);
String result = resultDO.getString(PROPERTY_NAME_D_NUMBER);
assertEquals("one", result);
}
// case: a/b[number=123]/c[2], c is many type property, and access by bracket and second position
public void testQueryMiddlePositionalAtLast1() {
DataObject resultDO = dataObject_a.getDataObject("PName-a0/PName-b0[number=\"123\"]/PName-c0[2]");
String result = resultDO.getString(PROPERTY_NAME_D_NUMBER);
assertEquals("two", result);
}
// case: a/b[number=123]/c[2], c is many type property, and access by bracket and second position
public void testQueryMiddlePositionalAtLast1ContainingAt() {
DataObject resultDO = dataObject_a.getDataObject("@PName-a0/@PName-b0[number=\"123\"]/@PName-c0[2]");
String result = resultDO.getString(PROPERTY_NAME_D_NUMBER);
assertEquals("two", result);
}
// case: a/b[number=123]/c[name='Jane']
// case: a/b.0/c[number='123'], no match for condition: name='jane'
public void testPositionalInMiddleQueryAtLastDataObject() {
assertEquals(dataObject_d0, dataObject_a.get(property));
}
// case: null input
public void testQueryBasePathWithNullValue() {
String v = null;
assertNull(dataObject_a.get(v));
}
// purpose: test path as "/"
public void testGetByXPathQueryWithShortBracketPath() {
assertEquals(dataObject_d1, dataObject_c.get("PName-c[number1='5.55']"));
}
}