/* * 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.api; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import test.sdo21.framework.CTSTestCase; import test.sdo21.tests.TestData.StandardDynamicFactory; import test.sdo21.tests.TestData.StandardFactory; import test.sdo21.tests.TestData.TestDataFactory; import commonj.sdo.DataObject; import commonj.sdo.Property; public class PropertyTest extends CTSTestCase { private DataObject testDO; TestDataFactory factory; public PropertyTest() { // Tests on the Property interface should be independent of the metadata creation mechanism // so just pick one Standard Factory factory = new StandardDynamicFactory(); } @Before public void setUp () throws Exception { super.setUp(); factory.defineMetaData(getScope()); testDO = factory.createTestData(getScope(), StandardFactory.API_TYPE); } @After public void tearDown() throws Exception { super.tearDown(); } /** * Verify Property.getDefault() for a newly created DataObject. * @throws Exception */ @Test public void testGetDefaultNewDO() throws Exception { verifyGetDefault(factory.createTestData(getScope(), StandardFactory.API_TYPE)); } /** * Verify Property.getDefault() for a cleared DataObject. */ @Test public void testGetDefaultClearedDO() { // Set the values for each Property using populateFields, then unset // them using unsetFields. try { ((StandardFactory)factory).populateFields(testDO, getScope()); } catch (Exception e) { fail("could not populate DataObject fields"); } unsetFields(testDO); verifyGetDefault(testDO); } /** * Verify Property.getName() */ @Test public void testPropertyGetName() { Property property = testDO.getInstanceProperty("containMany"); assertEquals("Property.getName() returned an unexpected value.", property.getName(), "containMany"); } /** * Verify Property.getType() */ @Test public void testPropertyGetType() { Property property = testDO.getInstanceProperty("containMany"); assertEquals("Property.getType() returned an unexpected value.", property.getType(), testDO.getType()); } /** * Verify Property.isMany()==true */ @Test public void testPropertyIsManyTrue() { Property property = testDO.getInstanceProperty("containMany"); assertTrue("Property.isMany() returned an unexpected value.", property.isMany()); } /** * Verify Property.isMany()==false */ @Test public void testPropertyIsManyFalse() { Property property = testDO.getInstanceProperty("booleanVal"); assertFalse("Property.isMany() returned an unexpected value.", property.isMany()); } /** * Verify Property.isContainment()==true */ @Test public void testPropertyIsContainmentTrue() { Property property = testDO.getInstanceProperty("containMany"); assertTrue("Property.isContainment() returned an unexpected value.", property.isContainment()); } /** * Verify Property.isContainment()==false */ @Test public void testPropertyIsContainmentFalse() { Property property = testDO.getInstanceProperty("booleanVal"); assertFalse("Property.isContainment() returned true when expecting false.", property.isContainment()); } /** * Verify Property.isReadOnly()==true */ @Test public void testPropertyIsReadOnlyTrue() { Property property = testDO.getInstanceProperty("readOnlyVal"); assertTrue("Property.isReadOnly() returned false when expecting true.", property.isReadOnly()); } /** * Verify Property.isReadOnly()==false */ @Test public void testPropertyIsReadOnlyFalse() { Property property = testDO.getInstanceProperty("booleanVal"); assertFalse("Property.isReadOnly() returned true when expecting false.", property.isReadOnly()); } /** * Verify Property.getContainingType */ @Test public void testPropertyGetContainingType() { Property property = testDO.getInstanceProperty("booleanVal"); assertEquals("Property.getContainingType() returned an unexpected value.", property.getContainingType(), testDO .getType()); } /** * Verify Property.getAliasNames() == empty List */ @Test public void testPropertyGetAliasNamesEmpty() { Property property = testDO.getInstanceProperty("booleanVal"); assertEquals("Property.getAliasNames() returned a List of unexpected size.", 0, property.getAliasNames().size()); } /** * Verify Property.getAliasNames() == populated List */ @Ignore("Awaiting implementation of SDOUtil.addAliasName") @Test public void testPropertyGetAliasNames() { List aliasNames = testDO.getInstanceProperty("decimalVal2").getAliasNames(); assertEquals("Property.getAliasNames() returned a List of unexpected size.", 1, aliasNames.size()); String alias = (String)aliasNames.get(0); assertEquals("Property.getAliasNames() returned a List with unexpected contents.", "Dec2", alias); } /** * Verify Property.getOpposite() == null */ @Test public void testPropertyGetOppositeNull() { Property property = testDO.getInstanceProperty("booleanVal"); assertNull("Property.getOpposite() did not return null as expected.", property.getOpposite()); } /** * Verify Property.getOpposite() != null */ @Test @Ignore public void testPropertyGetOpposite() { // TODO write this test } /** * verifyGetDefault is a private method that loops through each Property in * the passed DataObject and verifies that the value is equal to the value * returned by getDefault for each Property. The precondition is that unset * has been called for any Property for which a value has been set. * * @param testedDO */ private void verifyGetDefault(DataObject testedDO) { List properties = testedDO.getInstanceProperties(); Property property; for (int i = 0; i < properties.size(); i++) { property = (Property)properties.get(i); if (!(property.isReadOnly())) { if (property.isMany()) { assertNull("Property.getDefault() did not return null for many-valued Property " + property.getName() + "'.", property.getDefault()); } else { assertEquals("Property.getDefault() did not return the correct default value for Property '" + property .getName() + "'.", testedDO.get(property), property.getDefault()); } } } } /** * unsetFields() is a private method that loops through the Properties in * the passed DataObject and unsets each Property. * * @param unsetDO */ private void unsetFields(DataObject unsetDO) { List properties = unsetDO.getInstanceProperties(); Property currProp; for (int i = 0; i < properties.size(); i++) { currProp = (Property) properties.get(i); if (!(currProp.isReadOnly())) { unsetDO.unset(i); } } } }