📄 beanwrappertestsuite.java
字号:
/*
* Copyright 2002-2004 the original author or authors.
*
* Licensed 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.springframework.beans;
import java.beans.PropertyEditorSupport;
import java.beans.PropertyVetoException;
import java.util.Properties;
import junit.framework.TestCase;
/**
* @author Rod Johnson
* @author Juergen Hoeller
* @version $Id: BeanWrapperTestSuite.java,v 1.19 2004/04/05 07:17:57 jhoeller Exp $
*/
public class BeanWrapperTestSuite extends TestCase {
public void testSetWrappedInstanceOfSameClass()throws Exception {
TestBean tb = new TestBean();
BeanWrapper bw = new BeanWrapperImpl(tb);
tb.setAge(11);
TestBean tb2 = new TestBean();
bw.setWrappedInstance(tb2);
bw.setPropertyValue("age", new Integer(14));
assertTrue("2nd changed", tb2.getAge()==14);
assertTrue("1 didn't change", tb.getAge() == 11);
}
public void testToString() {
TestBean tb = new TestBean();
tb.setName("kerry");
tb.setAge(37);
String s = new BeanWrapperImpl(tb).toString();
// Test that it lists properties we've set
assertTrue(s.indexOf("37") != -1);
assertTrue(s.indexOf("kerry") != -1);
}
public void testIsReadablePropertyNotReadable() {
NoRead nr = new NoRead();
BeanWrapper bw = new BeanWrapperImpl(nr);
assertFalse(bw.isReadableProperty("age"));
}
/**
* Shouldn't throw an exception: should just return false
*/
public void testIsReadablePropertyNoSuchProperty() {
NoRead nr = new NoRead();
BeanWrapper bw = new BeanWrapperImpl(nr);
assertFalse(bw.isReadableProperty("xxxxx"));
}
public void testIsReadablePropertyNull() {
NoRead nr = new NoRead();
BeanWrapper bw = new BeanWrapperImpl(nr);
try {
bw.isReadableProperty(null);
fail("Can't inquire into readability of null property");
}
catch (BeansException ex) {
// expected
}
}
public void testIsWritablePropertyNull() {
NoRead nr = new NoRead();
BeanWrapper bw = new BeanWrapperImpl(nr);
try {
bw.isWritableProperty(null);
fail("Can't inquire into writability of null property");
}
catch (BeansException ex) {
// expected
}
}
public void testSetWrappedInstanceOfDifferentClass()throws Exception {
ThrowsException tex = new ThrowsException();
BeanWrapper bw = new BeanWrapperImpl(tex);
TestBean tb2 = new TestBean();
bw.setWrappedInstance(tb2);
bw.setPropertyValue("age", new Integer(14));
assertTrue("2nd changed", tb2.getAge()==14);
}
public void testGetterThrowsException() {
GetterBean gb = new GetterBean();
BeanWrapper bw = new BeanWrapperImpl(gb);
bw.setPropertyValue("name","tom");
assertTrue("Set name to tom", gb.getName().equals("tom"));
}
public void testEmptyPropertyValuesSet() {
TestBean t = new TestBean();
int age = 50;
String name = "Tony";
t.setAge(age);
t.setName(name);
try {
BeanWrapper bw = new BeanWrapperImpl(t);
assertTrue("age is OK", t.getAge() == age);
assertTrue("name is OK", name.equals(t.getName()));
bw.setPropertyValues(new MutablePropertyValues());
// Check its unchanged
assertTrue("age is OK", t.getAge() == age);
assertTrue("name is OK", name.equals(t.getName()));
}
catch (BeansException ex) {
fail("Shouldn't throw exception when everything is valid");
}
}
public void testAllValid() {
TestBean t = new TestBean();
String newName = "tony";
int newAge = 65;
String newTouchy = "valid";
try {
BeanWrapper bw = new BeanWrapperImpl(t);
//System.out.println(bw);
MutablePropertyValues pvs = new MutablePropertyValues();
pvs.addPropertyValue(new PropertyValue("age", new Integer(newAge)));
pvs.addPropertyValue(new PropertyValue("name", newName));
pvs.addPropertyValue(new PropertyValue("touchy", newTouchy));
bw.setPropertyValues(pvs);
assertTrue("Validly set property must stick", t.getName().equals(newName));
assertTrue("Validly set property must stick", t.getTouchy().equals(newTouchy));
assertTrue("Validly set property must stick", t.getAge() == newAge);
}
catch (BeansException ex) {
fail("Shouldn't throw exception when everything is valid");
}
}
public void testBeanWrapperUpdates() {
TestBean t = new TestBean();
int newAge = 33;
try {
BeanWrapper bw = new BeanWrapperImpl(t);
t.setAge(newAge);
Object bwAge = bw.getPropertyValue("age");
assertTrue("Age is an integer", bwAge instanceof Integer);
int bwi = ((Integer) bwAge).intValue();
assertTrue("Bean wrapper must pick up changes", bwi == newAge);
}
catch (Exception ex) {
fail("Shouldn't throw exception when everything is valid");
}
}
public void testValidNullUpdate() {
TestBean t = new TestBean();
t.setName("Frank"); // we need to change it back
t.setSpouse(t);
BeanWrapper bw = new BeanWrapperImpl(t);
assertTrue("name is not null to start off", t.getName() != null);
bw.setPropertyValue("name", null);
assertTrue("name is now null", t.getName() == null);
// Now test with non-string
assertTrue("spouse is not null to start off", t.getSpouse() != null);
bw.setPropertyValue("spouse", null);
assertTrue("spouse is now null", t.getSpouse() == null);
}
/**
* Test default conversion of properties
*/
public void testPropertiesProperty() throws Exception {
PropsTest pt = new PropsTest();
BeanWrapper bw = new BeanWrapperImpl(pt);
bw.setPropertyValue("name", "ptest");
// Note format...
String ps = "peace=war\nfreedom=slavery";
bw.setPropertyValue("properties", ps);
assertTrue("name was set", pt.name.equals("ptest"));
assertTrue("props non null", pt.props != null);
String freedomVal = pt.props.getProperty("freedom");
String peaceVal = pt.props.getProperty("peace");
assertTrue("peace==war", peaceVal.equals("war"));
assertTrue("Freedom==slavery", freedomVal.equals("slavery"));
}
public void testStringArrayProperty() throws Exception {
PropsTest pt = new PropsTest();
BeanWrapper bw = new BeanWrapperImpl(pt);
bw.setPropertyValue("stringArray", "foo,fi,fi,fum");
assertTrue("stringArray length = 4", pt.stringArray.length == 4);
assertTrue("correct values", pt.stringArray[0].equals("foo") && pt.stringArray[1].equals("fi") &&
pt.stringArray[2].equals("fi") && pt.stringArray[3].equals("fum"));
bw.setPropertyValue("stringArray", new String[] {"foo", "fi", "fi", "fum"});
assertTrue("stringArray length = 4", pt.stringArray.length == 4);
assertTrue("correct values", pt.stringArray[0].equals("foo") && pt.stringArray[1].equals("fi") &&
pt.stringArray[2].equals("fi") && pt.stringArray[3].equals("fum"));
bw.setPropertyValue("stringArray", "one");
assertTrue("stringArray length = 1", pt.stringArray.length == 1);
assertTrue("stringArray elt is ok", pt.stringArray[0].equals("one"));
}
public void testIntArrayProperty() {
PropsTest pt = new PropsTest();
BeanWrapper bw = new BeanWrapperImpl(pt);
bw.setPropertyValue("intArray", new int[] {4, 5, 2, 3});
assertTrue("intArray length = 4", pt.intArray.length == 4);
assertTrue("correct values", pt.intArray[0] == 4 && pt.intArray[1] == 5 &&
pt.intArray[2] == 2 && pt.intArray[3] == 3);
bw.setPropertyValue("intArray", new String[] {"4", "5", "2", "3"});
assertTrue("intArray length = 4", pt.intArray.length == 4);
assertTrue("correct values", pt.intArray[0] == 4 && pt.intArray[1] == 5 &&
pt.intArray[2] == 2 && pt.intArray[3] == 3);
bw.setPropertyValue("intArray", new Integer(1));
assertTrue("intArray length = 4", pt.intArray.length == 1);
assertTrue("correct values", pt.intArray[0] == 1);
bw.setPropertyValue("intArray", new String[] {"1"});
assertTrue("intArray length = 4", pt.intArray.length == 1);
assertTrue("correct values", pt.intArray[0] == 1);
}
public void testIndividualAllValid() {
TestBean t = new TestBean();
String newName = "tony";
int newAge = 65;
String newTouchy = "valid";
try {
BeanWrapper bw = new BeanWrapperImpl(t);
bw.setPropertyValue("age", new Integer(newAge));
bw.setPropertyValue(new PropertyValue("name", newName));
bw.setPropertyValue(new PropertyValue("touchy", newTouchy));
assertTrue("Validly set property must stick", t.getName().equals(newName));
assertTrue("Validly set property must stick", t.getTouchy().equals(newTouchy));
assertTrue("Validly set property must stick", t.getAge() == newAge);
}
catch (BeansException ex) {
fail("Shouldn't throw exception when everything is valid");
}
}
public void test2Invalid() {
TestBean t = new TestBean();
String newName = "tony";
String invalidTouchy = ".valid";
try {
BeanWrapper bw = new BeanWrapperImpl(t);
//System.out.println(bw);
MutablePropertyValues pvs = new MutablePropertyValues();
pvs.addPropertyValue(new PropertyValue("age", "foobar"));
pvs.addPropertyValue(new PropertyValue("name", newName));
pvs.addPropertyValue(new PropertyValue("touchy", invalidTouchy));
bw.setPropertyValues(pvs);
fail("Should throw exception when everything is valid");
}
catch (PropertyAccessExceptionsException ex) {
assertTrue("Must contain 2 exceptions", ex.getExceptionCount() == 2);
// Test validly set property matches
assertTrue("Validly set property must stick", t.getName().equals(newName));
assertTrue("Invalidly set property must retain old value", t.getAge() == 0);
assertTrue("New value of dodgy setter must be available through exception",
ex.getPropertyAccessException("touchy").getPropertyChangeEvent().getNewValue().equals(invalidTouchy));
}
catch (Exception ex) {
fail("Shouldn't throw exception other than pvee");
}
}
public void testTypeMismatch() {
TestBean t = new TestBean();
try {
BeanWrapper bw = new BeanWrapperImpl(t);
bw.setPropertyValue("age", "foobar");
fail("Should throw exception on type mismatch");
}
catch (TypeMismatchException ex) {
// expected
}
catch (Exception ex) {
fail("Shouldn't throw exception other than Type mismatch");
}
}
public void testEmptyValueForPrimitiveProperty() {
TestBean t = new TestBean();
try {
BeanWrapper bw = new BeanWrapperImpl(t);
bw.setPropertyValue("age", "");
fail("Should throw exception on type mismatch");
}
catch (TypeMismatchException ex) {
// expected
}
catch (Exception ex) {
fail("Shouldn't throw exception other than Type mismatch");
}
}
public void testSetPropertyValuesIgnoresInvalidNestedOnRequest() {
ITestBean rod = new TestBean();
MutablePropertyValues pvs = new MutablePropertyValues();
pvs.addPropertyValue(new PropertyValue("name", "rod"));
pvs.addPropertyValue(new PropertyValue("graceful.rubbish", "tony"));
pvs.addPropertyValue(new PropertyValue("more.garbage", new Object()));
BeanWrapper bw = new BeanWrapperImpl(rod);
bw.setPropertyValues(pvs, true);
assertTrue("Set valid and ignored invalid", rod.getName().equals("rod"));
try {
// Don't ignore: should fail
bw.setPropertyValues(pvs, false);
fail("Shouldn't have ignored invalid updates");
}
catch (NotWritablePropertyException ex) {
// OK: but which exception??
}
}
public void testGetNestedProperty() {
ITestBean rod = new TestBean("rod", 31);
ITestBean kerry = new TestBean("kerry", 35);
rod.setSpouse(kerry);
kerry.setSpouse(rod);
BeanWrapper bw = new BeanWrapperImpl(rod);
Integer KA = (Integer) bw.getPropertyValue("spouse.age");
assertTrue("kerry is 35", KA.intValue() == 35);
Integer RA = (Integer) bw.getPropertyValue("spouse.spouse.age");
assertTrue("rod is 31, not" + RA, RA.intValue() == 31);
ITestBean spousesSpouse = (ITestBean) bw.getPropertyValue("spouse.spouse");
assertTrue("spousesSpouse = initial point", rod == spousesSpouse);
}
public void testGetNestedPropertyNullValue() throws Exception {
ITestBean rod = new TestBean("rod", 31);
ITestBean kerry = new TestBean("kerry", 35);
rod.setSpouse(kerry);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -