/* * 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.harmony.beans.tests.java.beans; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.io.Serializable; import java.lang.reflect.Method; import java.util.Locale; import junit.framework.TestCase; import org.apache.harmony.beans.tests.support.mock.MockJavaBean; /** * Unit test for PropertyDescriptor. */ public class PropertyDescriptorTest extends TestCase { public void testEquals() throws IntrospectionException, SecurityException, NoSuchMethodException { String propertyName = "PropertyOne"; Class<MockJavaBean> beanClass = MockJavaBean.class; PropertyDescriptor pd = new PropertyDescriptor(propertyName, beanClass); Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String.class }); PropertyDescriptor pd2 = new PropertyDescriptor(propertyName, readMethod, writeMethod); pd.setName("different name"); assertTrue(pd.equals(pd2)); assertTrue(pd.equals(pd)); assertTrue(pd2.equals(pd)); assertFalse(pd.equals(null)); } // Regression test for H-1763 public void testEqualsRegression1763() throws IntrospectionException { String propertyName = "PropertyOne"; Class<MockJavaBean> beanClass = MockJavaBean.class; PropertyDescriptor pd = new PropertyDescriptor(propertyName, beanClass); try { pd.equals(propertyName); } catch (ClassCastException e) { fail("Equals throws ClassCastException"); } } public void testEquals_ReadMethod() throws IntrospectionException, SecurityException, NoSuchMethodException { String propertyName = "PropertyOne"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); PropertyDescriptor pd = new PropertyDescriptor(propertyName, readMethod, null); String propertyName2 = "PropertyThree"; Method readMethod2 = beanClass.getMethod("get" + propertyName2, (Class[]) null); PropertyDescriptor pd2 = new PropertyDescriptor(propertyName2, readMethod2, null); assertFalse(pd.equals(pd2)); } public void testEquals_ReadMethod_Null() throws IntrospectionException, SecurityException, NoSuchMethodException { String propertyName = "PropertyOne"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = null; PropertyDescriptor pd = new PropertyDescriptor(propertyName, readMethod, null); String propertyName2 = "PropertyThree"; Method readMethod2 = beanClass.getMethod("get" + propertyName2, (Class[]) null); PropertyDescriptor pd2 = new PropertyDescriptor(propertyName2, readMethod2, null); assertFalse(pd.equals(pd2)); } public void testEquals_ReadMethod_Null_Null() throws IntrospectionException, SecurityException, NoSuchMethodException { String propertyName = "PropertyOne"; Method readMethod = null; PropertyDescriptor pd = new PropertyDescriptor(propertyName, readMethod, null); String propertyName2 = "PropertyThree"; Method readMethod2 = null; PropertyDescriptor pd2 = new PropertyDescriptor(propertyName2, readMethod2, null); assertTrue(pd.equals(pd2)); } public void testEquals_WriteMethod() throws IntrospectionException, SecurityException, NoSuchMethodException { String propertyName = "PropertyOne"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String.class }); PropertyDescriptor pd = new PropertyDescriptor(propertyName, null, writeMethod); String propertyName2 = "PropertyThree"; Method writeMethod2 = beanClass.getMethod("set" + propertyName2, new Class[] { String.class }); PropertyDescriptor pd2 = new PropertyDescriptor(propertyName2, null, writeMethod2); assertFalse(pd.equals(pd2)); } public void testEquals_WriteMethod_Null() throws IntrospectionException, SecurityException, NoSuchMethodException { String propertyName = "PropertyOne"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method writeMethod = null; PropertyDescriptor pd = new PropertyDescriptor(propertyName, null, writeMethod); String propertyName2 = "PropertyThree"; Method writeMethod2 = beanClass.getMethod("set" + propertyName2, new Class[] { String.class }); PropertyDescriptor pd2 = new PropertyDescriptor(propertyName2, null, writeMethod2); assertFalse(pd.equals(pd2)); } public void testEquals_Bound() throws IntrospectionException, SecurityException, NoSuchMethodException { String propertyName = "PropertyOne"; PropertyDescriptor pd = new PropertyDescriptor(propertyName, null, null); String propertyName2 = "PropertyThree"; PropertyDescriptor pd2 = new PropertyDescriptor(propertyName2, null, null); pd.setBound(true); assertFalse(pd.equals(pd2)); } public void testEquals_Contrained() throws IntrospectionException, SecurityException, NoSuchMethodException { String propertyName = "PropertyOne"; PropertyDescriptor pd = new PropertyDescriptor(propertyName, null, null); String propertyName2 = "PropertyThree"; PropertyDescriptor pd2 = new PropertyDescriptor(propertyName2, null, null); pd.setConstrained(true); assertFalse(pd.equals(pd2)); } public void testEquals_PropertyType() throws IntrospectionException { String propertyName = "PropertyOne"; Class<MockJavaBean> beanClass = MockJavaBean.class; PropertyDescriptor pd = new PropertyDescriptor(propertyName, beanClass); Class<MockBeanPropertyDesc> beanClass2 = PropertyDescriptorTest.MockBeanPropertyDesc.class; PropertyDescriptor pd2 = new PropertyDescriptor(propertyName, beanClass2); assertFalse(pd.equals(pd2)); } /* * Class under test for void PropertyDescriptor(String, Class) */ public void testPropertyDescriptorStringClass() throws IntrospectionException { String propertyName = "propertyOne"; Class<MockJavaBean> beanClass = MockJavaBean.class; PropertyDescriptor pd = new PropertyDescriptor(propertyName, beanClass); String capitalName = propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1); assertEquals(String.class, pd.getPropertyType()); assertEquals("get" + capitalName, pd.getReadMethod().getName()); assertEquals("set" + capitalName, pd.getWriteMethod().getName()); assertFalse(pd.isBound()); assertFalse(pd.isConstrained()); assertEquals(propertyName, pd.getDisplayName()); assertEquals(propertyName, pd.getName()); assertEquals(propertyName, pd.getShortDescription()); assertNotNull(pd.attributeNames()); assertFalse(pd.isExpert()); assertFalse(pd.isHidden()); assertFalse(pd.isPreferred()); propertyName = "propertyWithoutGet"; try{ new PropertyDescriptor(propertyName, beanClass); fail("Should throw IntrospectionException"); }catch(IntrospectionException e){ } try{ new PropertyDescriptor(propertyName, beanClass, "getPropertyWithoutGet", "setPropertyWithoutGet"); fail("Should throw IntrospectionException"); }catch(IntrospectionException e){ } propertyName = "propertyWithoutSet"; beanClass = MockJavaBean.class; try{ new PropertyDescriptor(propertyName, beanClass); fail("Should throw IntrospectionException"); }catch(IntrospectionException e){ } propertyName = "propertyWithDifferentGetSet"; try{ new PropertyDescriptor(propertyName, beanClass); fail("Should throw IntrospectionException"); }catch(IntrospectionException e){ } propertyName = "propertyWithInvalidGet"; new PropertyDescriptor(propertyName, beanClass); propertyName = "propertyWithoutPublicGet"; try{ new PropertyDescriptor(propertyName, beanClass); fail("Should throw IntrospectionException"); }catch(IntrospectionException e){ } propertyName = "propertyWithGet1Param"; try{ new PropertyDescriptor(propertyName, beanClass); fail("Should throw IntrospectionException"); }catch(IntrospectionException e){ } propertyName = "propertyWithIs1Param"; PropertyDescriptor pd2 = new PropertyDescriptor(propertyName, beanClass); assertEquals("getPropertyWithIs1Param", pd2.getReadMethod().getName()); propertyName = "propertyWithSet2Param"; try { new PropertyDescriptor(propertyName, beanClass); fail("Should throw IntrospectionException"); } catch (IntrospectionException e) { } propertyName = "propertyWithIsGet"; PropertyDescriptor pd3 = new PropertyDescriptor(propertyName, beanClass); assertEquals("isPropertyWithIsGet", pd3.getReadMethod().getName()); propertyName = "propertyWithVoidGet"; try { new PropertyDescriptor(propertyName, beanClass); fail("Should throw IntrospectionException"); } catch (IntrospectionException e) { } } public void testPropertyDescriptorStringClass_PropertyNameCapital() throws IntrospectionException { String propertyName = "PropertyOne"; Class<MockJavaBean> beanClass = MockJavaBean.class; PropertyDescriptor pd = new PropertyDescriptor(propertyName, beanClass); assertEquals(propertyName, pd.getName()); } public void testPropertyDescriptorStringClass_PropertyNameEmpty() throws IntrospectionException { String propertyName = ""; Class<MockJavaBean> beanClass = MockJavaBean.class; try { new PropertyDescriptor(propertyName, beanClass); fail("Should throw IntrospectionException."); } catch (IntrospectionException exception) { } } public void testPropertyDescriptorStringClass_PropertyNameNull() { Class<MockJavaBean> beanClass = MockJavaBean.class; try { new PropertyDescriptor(null, beanClass); fail("Should throw IntrospectionException."); } catch (IntrospectionException exception) { } } public void testPropertyDescriptorStringClass_BeanClassNull() throws IntrospectionException { String propertyName = "propertyOne"; try { new PropertyDescriptor(propertyName, null); fail("Should throw IntrospectionException."); } catch (IntrospectionException exception) { } } public void testPropertyDescriptorStringClass_PropertyNameInvalid() { String propertyName = "not a property name"; Class<MockJavaBean> beanClass = MockJavaBean.class; try { new PropertyDescriptor(propertyName, beanClass); fail("Should throw IntrospectionException."); } catch (IntrospectionException exception) { } } public void testPropertyDescriptorStringClass_ProtectedGetter() { String propertyName = "protectedProp"; Class<MockJavaBean> beanClass = MockJavaBean.class; try { new PropertyDescriptor(propertyName, beanClass); fail("Should throw IntrospectionException."); } catch (IntrospectionException exception) { } } /* * Class under test for void PropertyDescriptor(String, Class, String, * String) */ public void testPropertyDescriptorStringClassStringString() throws IntrospectionException { String propertyName = "PropertyTwo"; Class<MockJavaBean> beanClass = MockJavaBean.class; PropertyDescriptor pd = new PropertyDescriptor(propertyName, beanClass, "get" + propertyName, "set" + propertyName); assertEquals(Integer.class, pd.getPropertyType()); assertEquals("get" + propertyName, pd.getReadMethod().getName()); assertEquals("set" + propertyName, pd.getWriteMethod().getName()); assertFalse(pd.isBound()); assertFalse(pd.isConstrained()); assertEquals(propertyName, pd.getDisplayName()); assertEquals(propertyName, pd.getName()); assertEquals(propertyName, pd.getShortDescription()); assertNotNull(pd.attributeNames()); assertFalse(pd.isExpert()); assertFalse(pd.isHidden()); assertFalse(pd.isPreferred()); } public void testPropertyDescriptorStringClassStringString_PropertyNameNull() { String propertyName = "PropertyTwo"; Class<MockJavaBean> beanClass = MockJavaBean.class; try { new PropertyDescriptor(null, beanClass, "get" + propertyName, "set" + propertyName); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } public void testPropertyDescriptorStringClassStringString_BeanClassNull() throws IntrospectionException { String propertyName = "PropertyTwo"; Class<?> beanClass = null; try { new PropertyDescriptor(propertyName, beanClass, "get" + propertyName, "set" + propertyName); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } public void testPropertyDescriptorStringClassStringString_ReadMethodNull() throws IntrospectionException { String propertyName = "PropertyTwo"; Class<MockJavaBean> beanClass = MockJavaBean.class; PropertyDescriptor pd = new PropertyDescriptor(propertyName, beanClass, null, "set" + propertyName); assertEquals(Integer.class, pd.getPropertyType()); assertNull(pd.getReadMethod()); assertEquals("set" + propertyName, pd.getWriteMethod().getName()); assertFalse(pd.isBound()); assertFalse(pd.isConstrained()); assertEquals(propertyName, pd.getDisplayName()); assertEquals(propertyName, pd.getName()); assertEquals(propertyName, pd.getShortDescription()); assertNotNull(pd.attributeNames()); assertFalse(pd.isExpert()); assertFalse(pd.isHidden()); assertFalse(pd.isPreferred()); try{ pd = new PropertyDescriptor(propertyName, beanClass, "", "set" + propertyName); fail("should throw exception"); }catch(IntrospectionException e){ } } public void testPropertyDescriptorStringClassStringString_ReadMethodInvalid() throws IntrospectionException { String propertyName = "booleanProperty"; Class<MockJavaBean> beanClass = MockJavaBean.class; PropertyDescriptor pd = new PropertyDescriptor(propertyName, beanClass, "getXX", "set" + propertyName); assertEquals("getBooleanProperty", pd.getReadMethod().getName()); assertEquals("setbooleanProperty", pd.getWriteMethod().getName()); } public void testPropertyDescriptorStringClassStringString_WriteMethodNull() throws IntrospectionException { String propertyName = "PropertyTwo"; Class<MockJavaBean> beanClass = MockJavaBean.class; PropertyDescriptor pd = new PropertyDescriptor(propertyName, beanClass, "get" + propertyName, null); assertEquals(Integer.class, pd.getPropertyType()); assertEquals("get" + propertyName, pd.getReadMethod().getName()); assertNull(pd.getWriteMethod()); assertFalse(pd.isBound()); assertFalse(pd.isConstrained()); assertEquals(propertyName, pd.getDisplayName()); assertEquals(propertyName, pd.getName()); assertEquals(propertyName, pd.getShortDescription()); assertNotNull(pd.attributeNames()); assertFalse(pd.isExpert()); assertFalse(pd.isHidden()); assertFalse(pd.isPreferred()); } public void testPropertyDescriptorStringClassStringString_WriteMethodEmpty() throws IntrospectionException { String propertyName = "PropertyTwo"; Class<MockJavaBean> beanClass = MockJavaBean.class; try { new PropertyDescriptor(propertyName, beanClass, "get" + propertyName, ""); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } public void testPropertyDescriptorStringClassStringString_WriteMethodInvalid() throws IntrospectionException { String propertyName = "PropertyTwo"; Class<MockJavaBean> beanClass = MockJavaBean.class; try { new PropertyDescriptor(propertyName, beanClass, "get" + propertyName, "setXXX"); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } /* * Class under test for void PropertyDescriptor(String, Method, Method) */ public void testPropertyDescriptorStringMethodMethod() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyOne"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String.class }); PropertyDescriptor pd = new PropertyDescriptor(propertyName, readMethod, writeMethod); assertEquals(String.class, pd.getPropertyType()); assertEquals("get" + propertyName, pd.getReadMethod().getName()); assertEquals("set" + propertyName, pd.getWriteMethod().getName()); assertFalse(pd.isBound()); assertFalse(pd.isConstrained()); assertEquals(propertyName, pd.getDisplayName()); assertEquals(propertyName, pd.getName()); assertEquals(propertyName, pd.getShortDescription()); assertNotNull(pd.attributeNames()); assertFalse(pd.isExpert()); assertFalse(pd.isHidden()); assertFalse(pd.isPreferred()); } public void testPropertyDescriptorStringMethodMethod_PropertyNameNull() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyOne"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String.class }); try { new PropertyDescriptor(null, readMethod, writeMethod); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } public void testPropertyDescriptorStringMethodMethod_ReadMethodNull() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyOne"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = null; Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String.class }); PropertyDescriptor pd = new PropertyDescriptor(propertyName, readMethod, writeMethod); assertEquals(String.class, pd.getPropertyType()); assertNull(pd.getReadMethod()); assertEquals("set" + propertyName, pd.getWriteMethod().getName()); assertFalse(pd.isBound()); assertFalse(pd.isConstrained()); assertEquals(propertyName, pd.getDisplayName()); assertEquals(propertyName, pd.getName()); assertEquals(propertyName, pd.getShortDescription()); assertNotNull(pd.attributeNames()); assertFalse(pd.isExpert()); assertFalse(pd.isHidden()); assertFalse(pd.isPreferred()); } public void testPropertyDescriptorStringMethodMethod_ReadMethodInvalid() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyOne"; Class<MockJavaBean> beanClass = MockJavaBean.class; String anotherProp = "PropertyTwo"; Method readMethod = beanClass.getMethod("get" + anotherProp, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String.class }); try { new PropertyDescriptor(propertyName, readMethod, writeMethod); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } public void testPropertyDescriptorStringMethodMethod_WriteMethodNull() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyOne"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = null; PropertyDescriptor pd = new PropertyDescriptor(propertyName, readMethod, writeMethod); assertEquals(String.class, pd.getPropertyType()); assertEquals("get" + propertyName, pd.getReadMethod().getName()); assertNull(pd.getWriteMethod()); assertFalse(pd.isBound()); assertFalse(pd.isConstrained()); assertEquals(propertyName, pd.getDisplayName()); assertEquals(propertyName, pd.getName()); assertEquals(propertyName, pd.getShortDescription()); assertNotNull(pd.attributeNames()); assertFalse(pd.isExpert()); assertFalse(pd.isHidden()); assertFalse(pd.isPreferred()); } public void testPropertyDescriptorStringMethodMethod_WriteMethodInvalid() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyOne"; Class<MockJavaBean> beanClass = MockJavaBean.class; String anotherProp = "PropertyTwo"; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + anotherProp, new Class[] { Integer.class }); try { new PropertyDescriptor(propertyName, readMethod, writeMethod); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } /** * @throws Exception */ public void testPropertyDescriptorStringClassMethodMethod_SubClass() throws Exception { PropertyDescriptor pd = new PropertyDescriptor( "prop1", SubMockJavaBean.class, null, "setPropertyOne"); //$NON-NLS-1$ //$NON-NLS-2$ assertNull(pd.getReadMethod()); assertEquals("setPropertyOne", pd.getWriteMethod().getName()); //$NON-NLS-1$ pd = new PropertyDescriptor( "prop1", SubMockJavaBean.class, "getPropertyOne", "setPropertyOne"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ assertEquals("getPropertyOne", pd.getReadMethod().getName()); //$NON-NLS-1$ assertEquals("setPropertyOne", pd.getWriteMethod().getName()); //$NON-NLS-1$ pd = new PropertyDescriptor( "prop1", SubMockJavaBean.class, "getPropertyOne", null); //$NON-NLS-1$ //$NON-NLS-2$ assertEquals("getPropertyOne", pd.getReadMethod().getName()); //$NON-NLS-1$ assertNull(pd.getWriteMethod()); } public void testSetReadMethod() throws SecurityException, NoSuchMethodException, IntrospectionException { Class<MockJavaBean> beanClass = MockJavaBean.class; String propertyName = "PropertyOne"; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); PropertyDescriptor pd = new PropertyDescriptor(propertyName, null, null); assertNull(pd.getReadMethod()); pd.setReadMethod(readMethod); assertSame(readMethod, pd.getReadMethod()); } public void testSetReadMethod_Null() throws SecurityException, NoSuchMethodException, IntrospectionException { Class<MockJavaBean> beanClass = MockJavaBean.class; String propertyName = "PropertyOne"; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); PropertyDescriptor pd = new PropertyDescriptor(propertyName, readMethod, null); assertSame(readMethod, pd.getReadMethod()); pd.setReadMethod(null); assertNull(pd.getReadMethod()); } /** * Read method is incompatible with property name getPropertyTwo vs. * PropertyOne (writeMethod=null) */ public void testSetReadMethod_Invalid() throws SecurityException, NoSuchMethodException, IntrospectionException { Class<MockJavaBean> beanClass = MockJavaBean.class; String propertyName = "PropertyOne"; Method readMethod = beanClass.getMethod("get" + "PropertyTwo", (Class[]) null); PropertyDescriptor pd = new PropertyDescriptor(propertyName, null, null); assertNull(pd.getReadMethod()); pd.setReadMethod(readMethod); assertSame(readMethod, pd.getReadMethod()); } /** * String invalidGetMethod(String arg) */ public void testSetReadMethod_Invalid_withArg() throws SecurityException, NoSuchMethodException, IntrospectionException { Class<MockJavaBean> beanClass = MockJavaBean.class; String propertyName = "PropertyOne"; Method readMethod = beanClass.getMethod("invalidGetMethod", new Class[] { String.class }); PropertyDescriptor pd = new PropertyDescriptor(propertyName, null, null); assertNull(pd.getReadMethod()); try { pd.setReadMethod(readMethod); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } /** * String invalidGetMethod(String arg) */ public void testSetReadMethod_Invalid_returnVoid() throws SecurityException, NoSuchMethodException, IntrospectionException { Class<MockJavaBean> beanClass = MockJavaBean.class; String propertyName = "PropertyOne"; Method readMethod = beanClass.getMethod("invalidGetMethod", (Class[]) null); PropertyDescriptor pd = new PropertyDescriptor(propertyName, null, null); assertNull(pd.getReadMethod()); try { pd.setReadMethod(readMethod); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } /** * Read method is incompatible with write method getPropertyOn vs. * setPropertyTow */ public void testSetReadMethod_ReadWriteIncompatible() throws SecurityException, NoSuchMethodException, IntrospectionException { Class<MockJavaBean> beanClass = MockJavaBean.class; String propertyName = "PropertyOne"; Method readMethod = beanClass.getMethod("get" + "PropertyOne", (Class[]) null); Method writeMethod = beanClass.getMethod("set" + "PropertyTwo", new Class[] { Integer.class }); PropertyDescriptor pd = new PropertyDescriptor(propertyName, null, writeMethod); assertNull(pd.getReadMethod()); try { pd.setReadMethod(readMethod); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } /** * normal input */ public void testSetWriteMethod() throws SecurityException, NoSuchMethodException, IntrospectionException { Class<MockJavaBean> beanClass = MockJavaBean.class; String propertyName = "PropertyOne"; Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String.class }); PropertyDescriptor pd = new PropertyDescriptor(propertyName, null, null); assertNull(pd.getWriteMethod()); pd.setWriteMethod(writeMethod); assertSame(writeMethod, pd.getWriteMethod()); } /** * setWriteMethod(null) */ public void testSetWriteMethod_Null() throws SecurityException, NoSuchMethodException, IntrospectionException { Class<MockJavaBean> beanClass = MockJavaBean.class; String propertyName = "PropertyOne"; Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String.class }); PropertyDescriptor pd = new PropertyDescriptor(propertyName, null, writeMethod); assertSame(writeMethod, pd.getWriteMethod()); pd.setWriteMethod(null); assertNull(pd.getWriteMethod()); } /** * write method is incompatible with property name (read method is null) */ public void testSetWriteMethod_Invalid() throws SecurityException, NoSuchMethodException, IntrospectionException { Class<MockJavaBean> beanClass = MockJavaBean.class; String propertyName = "PropertyOne"; Method writeMethod = beanClass.getMethod("set" + "PropertyTwo", new Class[] { Integer.class }); PropertyDescriptor pd = new PropertyDescriptor(propertyName, null, null); assertNull(pd.getWriteMethod()); pd.setWriteMethod(writeMethod); assertSame(writeMethod, pd.getWriteMethod()); } /** * write method without argument */ public void testSetWriteMethod_Invalid_NoArgs() throws SecurityException, NoSuchMethodException, IntrospectionException { Class<MockJavaBean> beanClass = MockJavaBean.class; String propertyName = "PropertyOne"; Method writeMethod = beanClass.getMethod("get" + "PropertyTwo", (Class[]) null); PropertyDescriptor pd = new PropertyDescriptor(propertyName, null, null); assertNull(pd.getWriteMethod()); try { pd.setWriteMethod(writeMethod); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } /** * write method is incompatible with read method */ public void testSetWriteMethod_WriteReadIncompatible() throws SecurityException, NoSuchMethodException, IntrospectionException { Class<MockJavaBean> beanClass = MockJavaBean.class; String propertyName = "PropertyOne"; Method readMethod = beanClass.getMethod("get" + "PropertyTwo", (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String.class }); PropertyDescriptor pd = new PropertyDescriptor(propertyName, readMethod, null); assertNull(pd.getWriteMethod()); try { pd.setWriteMethod(writeMethod); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } public void testSetBound_true() throws SecurityException, NoSuchMethodException, IntrospectionException { Class<MockJavaBean> beanClass = MockJavaBean.class; String propertyName = "PropertyOne"; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String.class }); PropertyDescriptor pd = new PropertyDescriptor(propertyName, readMethod, writeMethod); pd.setBound(true); assertTrue(pd.isBound()); assertFalse(pd.isConstrained()); assertEquals(propertyName, pd.getDisplayName()); assertEquals(propertyName, pd.getName()); assertEquals(propertyName, pd.getShortDescription()); assertNotNull(pd.attributeNames()); assertFalse(pd.isExpert()); assertFalse(pd.isHidden()); assertFalse(pd.isPreferred()); } public void testSetBound_false() throws SecurityException, NoSuchMethodException, IntrospectionException { Class<MockJavaBean> beanClass = MockJavaBean.class; String propertyName = "PropertyOne"; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String.class }); PropertyDescriptor pd = new PropertyDescriptor(propertyName, readMethod, writeMethod); pd.setBound(false); assertFalse(pd.isBound()); assertFalse(pd.isConstrained()); assertEquals(propertyName, pd.getDisplayName()); assertEquals(propertyName, pd.getName()); assertEquals(propertyName, pd.getShortDescription()); assertNotNull(pd.attributeNames()); assertFalse(pd.isExpert()); assertFalse(pd.isHidden()); assertFalse(pd.isPreferred()); } public void testSetConstrained_true() throws SecurityException, NoSuchMethodException, IntrospectionException { Class<MockJavaBean> beanClass = MockJavaBean.class; String propertyName = "PropertyOne"; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String.class }); PropertyDescriptor pd = new PropertyDescriptor(propertyName, readMethod, writeMethod); pd.setConstrained(true); assertTrue(pd.isConstrained()); assertFalse(pd.isBound()); assertEquals(propertyName, pd.getDisplayName()); assertEquals(propertyName, pd.getName()); assertEquals(propertyName, pd.getShortDescription()); assertNotNull(pd.attributeNames()); assertFalse(pd.isExpert()); assertFalse(pd.isHidden()); assertFalse(pd.isPreferred()); } public void testSetConstrained_false() throws SecurityException, NoSuchMethodException, IntrospectionException { Class<MockJavaBean> beanClass = MockJavaBean.class; String propertyName = "PropertyOne"; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String.class }); PropertyDescriptor pd = new PropertyDescriptor(propertyName, readMethod, writeMethod); pd.setConstrained(false); assertFalse(pd.isConstrained()); assertFalse(pd.isBound()); assertEquals(propertyName, pd.getDisplayName()); assertEquals(propertyName, pd.getName()); assertEquals(propertyName, pd.getShortDescription()); assertNotNull(pd.attributeNames()); assertFalse(pd.isExpert()); assertFalse(pd.isHidden()); assertFalse(pd.isPreferred()); } public void testConstructor_1() throws IntrospectionException { new PropertyDescriptor("fox01", FakeFox01.class); } // Regression test for HARMONY-237 public void testIntrospectionExceptions() { try { new PropertyDescriptor(null, null); fail("Constructor PropertyDescriptor(null,null) should " + "throw IntrospectionException"); } catch (IntrospectionException e) { assertEquals("Target Bean class is null", e.getMessage()); } try { new PropertyDescriptor(null, String.class); fail("Constructor PropertyDescriptor(null,String.class) should " + "throw IntrospectionException"); } catch (IntrospectionException e) { assertEquals("bad property name", e.getMessage()); } try { new PropertyDescriptor(null, null, null, null); fail("Constructor PropertyDescriptor(null,null,null,null) should " + "throw IntrospectionException"); } catch (IntrospectionException e) { assertEquals("Target Bean class is null", e.getMessage()); } try { new PropertyDescriptor(null, String.class, null, null); fail("Constructor " + "PropertyDescriptor(null,String.class,null,null) should " + "throw IntrospectionException"); } catch (IntrospectionException e) { assertEquals("bad property name", e.getMessage()); } try { new PropertyDescriptor(null, null, null); fail("Constructor PropertyDescriptor(null,null,null) should " + "throw IntrospectionException"); } catch (IntrospectionException e) { assertEquals("bad property name", e.getMessage()); } try { new PropertyDescriptor("", null, null); fail("Constructor PropertyDescriptor(\"\",null,null) should " + "throw IntrospectionException"); } catch (IntrospectionException e) { assertEquals("bad property name", e.getMessage()); } } static class FakeFox01 { public String getFox01() { return null; } public void setFox01(String value) { } } class MockBeanPropertyDesc implements Serializable { /** * Comment for <code>serialVersionUID</code> */ private static final long serialVersionUID = 1L; Integer propertyOne; /** * @return Returns the propertyOne. */ public Integer getPropertyOne() { return propertyOne; } /** * @param propertyOne * The propertyOne to set. */ public void setPropertyOne(Integer propertyOne) { this.propertyOne = propertyOne; } } class SubMockJavaBean extends MockJavaBean { /** * Comment for <code>serialVersionUID</code> */ private static final long serialVersionUID = 7423254295680570566L; // } //Regression Test private class MockBean { int a; public int getA() { return a; } public void setA(int a) { this.a = a; } } public void testHashCode() throws IntrospectionException, SecurityException, NoSuchMethodException { PropertyDescriptor pd1 = new PropertyDescriptor("a",MockBean.class); PropertyDescriptor pd2 = new PropertyDescriptor("a",MockBean.class); assertEquals(pd1, pd2); assertEquals(pd1.hashCode(), pd2.hashCode()); } private class MockBeanForTR { int i; public int getI() { return i; } public void setI(int i) { this.i = i; } } public void testByLocale() throws IntrospectionException{ Locale backup = Locale.getDefault(); Locale.setDefault(new Locale("TR")); try { assertNotNull(new PropertyDescriptor("i", MockBeanForTR.class)); } finally { Locale.setDefault(backup); } } }