📄 lazydynabeantestcase.java
字号:
/*
* 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.commons.beanutils;
import java.util.HashMap;
import java.util.TreeMap;
import java.util.ArrayList;
import java.util.LinkedList;
import java.lang.reflect.InvocationTargetException;
import junit.framework.TestCase;
import junit.framework.Test;
import junit.framework.TestSuite;
/**
* <p>Test Case for the <code>LazyDynaBean</code> implementation class.</p>
*
* @author Niall Pemberton
*/
public class LazyDynaBeanTestCase extends TestCase {
protected LazyDynaBean bean = null;
protected LazyDynaClass dynaClass = null;
protected String testProperty = "myProperty";
protected String testPropertyA = "myProperty-A";
protected String testPropertyB = "myProperty-B";
protected String testString1 = "myStringValue-1";
protected String testString2 = "myStringValue-2";
protected Integer testInteger1 = new Integer(30);
protected Integer testInteger2 = new Integer(40);
protected String testKey = "myKey";
// ---------------------------------------------------------- Constructors
/**
* Construct a new instance of this test case.
*
* @param name Name of the test case
*/
public LazyDynaBeanTestCase(String name) {
super(name);
}
// -------------------------------------------------- Overall Test Methods
/**
* Run thus Test
*/
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
/**
* Return the tests included in this test suite.
*/
public static Test suite() {
return (new TestSuite(LazyDynaBeanTestCase.class));
}
/**
* Set up instance variables required by this test case.
*/
public void setUp() throws Exception {
bean = new LazyDynaBean();
dynaClass = (LazyDynaClass)bean.getDynaClass();
dynaClass.setReturnNull(true);
}
/**
* Tear down instance variables required by this test case.
*/
public void tearDown() {
bean = null;
}
// ------------------------------------------------ Individual Test Methods
/**
* Test Getting/Setting a Simple Property
*/
public void testSimpleProperty() {
// Check the property & value doesn't exist
assertNull("Check Property doesn't exist", dynaClass.getDynaProperty(testProperty));
assertNull("Check Value is null", bean.get(testProperty));
// Set a new property - should add new property and set value
bean.set(testProperty, testInteger1);
assertEquals("Check First Value is correct", testInteger1, bean.get(testProperty));
assertEquals("Check Property type is correct", Integer.class, dynaClass.getDynaProperty(testProperty).getType());
// Set the property again - should set the new value
bean.set(testProperty, testInteger2);
assertEquals("Check Second Value is correct", testInteger2, bean.get(testProperty));
// Set the property again - with a different type, should fail
try {
bean.set(testProperty, testString1);
fail("expected ConversionException trying to set an Integer property to a String");
} catch (ConversionException expected) {
// expected result
}
}
/**
* Test Getting/Setting a 'null' Property
*/
public void testNullProperty() {
// Check the property & value doesn't exist
assertNull("Check Property doesn't exist", dynaClass.getDynaProperty(testProperty));
assertNull("Check Value is null", bean.get(testProperty));
// Set a new property to null
bean.set(testProperty, null);
assertNull("Check Value is still null", bean.get(testProperty));
}
/**
* Test Setting a Simple Property when MutableDynaClass is set to restricted
*/
public void testSimplePropertyRestricted() {
// Set the MutableDyanClass to 'restricted' (i.e. no new properties cab be added
dynaClass.setRestricted(true);
assertTrue("Check MutableDynaClass is restricted", dynaClass.isRestricted());
// Check the property & value doesn't exist
assertNull("Check Property doesn't exist", dynaClass.getDynaProperty(testProperty));
assertNull("Check Value is null", bean.get(testProperty));
// Set the property - should fail because property doesn't exist and MutableDynaClass is restricted
try {
bean.set(testProperty, testString1);
fail("expected IllegalArgumentException trying to add new property to restricted DynaClass");
} catch (IllegalArgumentException expected) {
// expected result
}
}
/**
* Test Getting/Setting a 'Mapped' Property - default HashMap property
*/
public void testMappedPropertyDefault() {
// Check the property & value doesn't exist
assertNull("Check Mapped Property doesn't exist", dynaClass.getDynaProperty(testProperty));
assertNull("Check Map is null", bean.get(testProperty));
assertNull("Check Mapped Value is null", bean.get(testProperty, testKey));
// Set a new mapped property - should add new HashMap property and set the mapped value
bean.set(testProperty, testKey, testInteger1);
assertEquals("Check Mapped Property exists", HashMap.class, bean.get(testProperty).getClass());
assertEquals("Check First Mapped Value is correct(a)", testInteger1, bean.get(testProperty, testKey));
assertEquals("Check First Mapped Value is correct(b)", testInteger1, ((HashMap)bean.get(testProperty)).get(testKey));
// Set the property again - should set the new value
bean.set(testProperty, testKey, testInteger2);
assertEquals("Check Second Mapped Value is correct(a)", testInteger2, bean.get(testProperty, testKey));
assertEquals("Check Second Mapped Value is correct(b)", testInteger2, ((HashMap)bean.get(testProperty)).get(testKey));
}
/**
* Test Getting/Setting a 'Mapped' Property - use TreeMap property
*/
public void testMappedPropertyTreeMap() {
// Check the property & value doesn't exist
assertNull("Check Mapped Property doesn't exist", dynaClass.getDynaProperty(testProperty));
// Add a 'TreeMap' property to the DynaClass
dynaClass.add(testProperty, TreeMap.class);
assertTrue("Check Property is mapped", dynaClass.getDynaProperty(testProperty).isMapped());
assertEquals("Check Property is correct type", TreeMap.class, dynaClass.getDynaProperty(testProperty).getType());
assertEquals("Check Mapped Property exists", TreeMap.class, bean.get(testProperty).getClass());
// assertNull("Check mapped property is null", bean.get(testProperty));
// Set a new mapped property - should instatiate a new TreeMap property and set the mapped value
bean.set(testProperty, testKey, testInteger1);
assertEquals("Check Mapped Property exists", TreeMap.class, bean.get(testProperty).getClass());
assertEquals("Check First Mapped Value is correct(a)", testInteger1, bean.get(testProperty, testKey));
assertEquals("Check First Mapped Value is correct(b)", testInteger1, ((TreeMap)bean.get(testProperty)).get(testKey));
// Set the property again - should set the new value
bean.set(testProperty, testKey, testInteger2);
assertEquals("Check Second Mapped Value is correct(a)", testInteger2, bean.get(testProperty, testKey));
assertEquals("Check Second Mapped Value is correct(b)", testInteger2, ((TreeMap)bean.get(testProperty)).get(testKey));
}
/**
* Test Setting a 'Mapped' Property using PropertyUtils
*/
public void testMappedPropertyUtils() {
dynaClass.setReturnNull(false);
// Check the property & value doesn't exist
assertFalse("Check Mapped Property doesn't exist", dynaClass.isDynaProperty(testProperty));
assertNull("Check Map is null", bean.get(testProperty));
assertNull("Check Mapped Value is null", bean.get(testProperty, testKey));
// Set the mapped property using PropertyUtils
try {
PropertyUtils.setProperty(bean, testProperty+"("+testKey+")", testString1);
}
catch (NoSuchMethodException ex) {
fail("testIndexedPropertyUtils threw "+ex);
}
catch (InvocationTargetException ex) {
fail("testIndexedPropertyUtils threw "+ex);
}
catch (IllegalAccessException ex) {
fail("testIndexedPropertyUtils threw "+ex);
}
// Check property value correctly set
assertEquals("Check Mapped Bean Value is correct", testString1, bean.get(testProperty, testKey));
}
/**
* Test Setting a Mapped Property when MutableDynaClass is set to restricted
*/
public void testMappedPropertyRestricted() {
// Set the MutableDyanClass to 'restricted' (i.e. no new properties cab be added
dynaClass.setRestricted(true);
assertTrue("Check MutableDynaClass is restricted", dynaClass.isRestricted());
// Check the property & value doesn't exist
assertNull("Check Property doesn't exist", dynaClass.getDynaProperty(testProperty));
assertNull("Check Value is null", bean.get(testProperty));
// Set the property - should fail because property doesn't exist and MutableDynaClass is restricted
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -