/* * Copyright 2002-2006 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.propertyeditors; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.beans.SimpleBeanInfo; import junit.framework.TestCase; import org.springframework.beans.BeanWrapper; import org.springframework.beans.BeanWrapperImpl; import org.springframework.beans.FatalBeanException; import org.springframework.core.JdkVersion; import org.springframework.util.Assert; /** * @author Juergen Hoeller * @since 06.03.2006 */ public class BeanInfoTests extends TestCase { public void testComplexObject() { ValueBean bean = new ValueBean(); BeanWrapper bw = new BeanWrapperImpl(bean); Integer value = new Integer(1); bw.setPropertyValue("value", value); assertEquals("value not set correctly", bean.getValue(), value); value = new Integer(2); bw.setPropertyValue("value", value.toString()); assertEquals("value not converted", bean.getValue(), value); bw.setPropertyValue("value", null); assertNull("value not null", bean.getValue()); bw.setPropertyValue("value", ""); assertNull("value not converted to null", bean.getValue()); } public static class ValueBean { private Integer value; public Integer getValue() { return value; } public void setValue(Integer value) { this.value = value; } } public static class ValueBeanBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { try { PropertyDescriptor pd = new PropertyDescriptor("value", ValueBean.class); pd.setPropertyEditorClass(MyNumberEditor.class); return new PropertyDescriptor[] {pd}; } catch (IntrospectionException ex) { throw new FatalBeanException("Couldn't create PropertyDescriptor", ex); } } } public static class MyNumberEditor extends CustomNumberEditor { private Object target; public MyNumberEditor() throws IllegalArgumentException { super(Integer.class, true); } public MyNumberEditor(Object target) throws IllegalArgumentException { super(Integer.class, true); this.target = target; } public void setAsText(String text) throws IllegalArgumentException { if (JdkVersion.getMajorJavaVersion() >= JdkVersion.JAVA_15) { Assert.isTrue(this.target instanceof ValueBean, "Target must be available on JDK 1.5+"); } super.setAsText(text); } } }