blob: 12c47db0b432f4051f3694debebc1f0f9ecdb71a [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.helper.typehelper.define;
import commonj.sdo.DataObject;
import commonj.sdo.Property;
import commonj.sdo.Type;
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;
import org.eclipse.persistence.testing.sdo.SDOTestCase;
import org.eclipse.persistence.exceptions.SDOException;
/*
* testing JIRA-108 resolution
*/
public class OpenContentDefineTestCases extends SDOTestCase {
private Type rootType;
public OpenContentDefineTestCases(String name) {
super(name);
}
@Override
public void setUp() {
super.setUp();
SDODataObject rootDataObjectType = (SDODataObject)defineType("my.uri", "myRoot");
addProperty(rootDataObjectType, "firstName", typeHelper.getType(SDOConstants.SDO_URL, SDOConstants.STRING));
addProperty(rootDataObjectType, "lastName", typeHelper.getType(SDOConstants.SDO_URL, SDOConstants.STRING));
rootType = typeHelper.define(rootDataObjectType);
((SDOType)rootType).setOpen(true);
}
public static void main(String[] args) {
String[] arguments = { "-c", "org.eclipse.persistence.testing.sdo.helper.typehelper.define.OpenContentDefineTestCases" };
TestRunner.main(arguments);
}
public void testDefineOpenContentProperty() {
assertEquals(2, rootType.getDeclaredProperties().size());
SDOType propertyType = (SDOType) typeHelper.getType(SDOConstants.SDO_URL, SDOConstants.PROPERTY);
DataObject newProperty = dataFactory.create(propertyType);
SDOProperty prop = (SDOProperty)newProperty.getType().getProperty("name");
newProperty.set(prop, "myOpenProp");
prop = (SDOProperty)newProperty.getType().getProperty("type");
newProperty.set(prop, typeHelper.getType(SDOConstants.SDO_URL, SDOConstants.STRING));
Property openProp = typeHelper.defineOpenContentProperty("my.uri", newProperty);
Property lookedUp = typeHelper.getOpenContentProperty("my.uri", "myOpenProp");
assertNotNull(lookedUp);
// verify both properties are the same object
assertTrue(openProp == lookedUp);
assertTrue(lookedUp.isOpenContent());
DataObject rootDataObject = dataFactory.create(rootType);
assertEquals(2, rootDataObject.getInstanceProperties().size());
//set should add the open content property to instance properties
rootDataObject.set(lookedUp, "testing");
assertEquals(3, rootDataObject.getInstanceProperties().size());
assertNull(lookedUp.getContainingType());
//unset should remove the open content property
rootDataObject.unset(lookedUp);
assertEquals(2, rootDataObject.getInstanceProperties().size());
}
public void testDataTypeTrueFails() throws Exception {
SDOType typeType = (SDOType) typeHelper.getType(SDOConstants.SDO_URL, SDOConstants.TYPE);
DataObject newTypeDO = dataFactory.create(typeType);
SDOProperty prop = (SDOProperty)newTypeDO.getType().getProperty("name");
newTypeDO.set(prop, "myOpenType");
newTypeDO.set("uri", "my.uri");
newTypeDO.set("dataType", true);
newTypeDO.set("open", true);
try {
Type newType = typeHelper.define(newTypeDO);
} catch (SDOException e) {
assertEquals(SDOException.TYPE_CANNOT_BE_OPEN_AND_DATATYPE, e.getErrorCode());
return;
}
fail("An IllegalArgumentException should have occurred");
}
public void testDataTypeTrueFails2() throws Exception {
SDOType typeType = (SDOType) typeHelper.getType(SDOConstants.SDO_URL, SDOConstants.TYPE);
DataObject newTypeDO = dataFactory.create(typeType);
SDOProperty prop = (SDOProperty)newTypeDO.getType().getProperty("name");
newTypeDO.set(prop, "myOpenType");
newTypeDO.set("uri", "my.uri");
newTypeDO.set("open", true);
newTypeDO.set("dataType", true);
try {
Type newType = typeHelper.define(newTypeDO);
} catch (SDOException e) {
assertEquals(SDOException.TYPE_CANNOT_BE_OPEN_AND_DATATYPE, e.getErrorCode());
return;
}
}
public void testDataTypeTrueFails3() throws Exception {
try {
SDOConstants.SDO_STRING.setOpen(true);
} catch (SDOException e) {
assertEquals(SDOException.TYPE_CANNOT_BE_OPEN_AND_DATATYPE, e.getErrorCode());
return;
}
}
public void testDefineOpenContentPropertyViaGenericDefineP34ofSpec() {
// Create a new Type and with an open content property set
DataObject myDataType = dataFactory.create("commonj.sdo", "Type");
myDataType.set("name", "MyType");
Property openContentProperty = null;
// SDOTypeHelperDelegate.openContentProperties Map is still null at this point
//Property openContentProperty = typeHelper.getOpenContentProperty(
// "commonj.sdo", "someProperty");
//assertNull(openContentProperty);
// NPE here
//myDataType.set(openContentProperty, "test");
// Define the Type
Type definedType = typeHelper.define(myDataType);
// Property openContentProperty = typeHelper.getOpenContentProperty(
// "commonj.sdo", "someProperty");
// assertNotNull(openContentProperty);
// Retrieve the open content property
Object retrievedValue = definedType.get(openContentProperty);
}
}