/* * 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.IndexedPropertyDescriptor; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import junit.framework.TestCase; import org.apache.harmony.beans.tests.support.mock.MockJavaBean; /** * Unit test for IndexedPropertyDescriptor. */ public class IndexedPropertyDescriptorTest extends TestCase { public void testEquals() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); IndexedPropertyDescriptor ipd2 = new IndexedPropertyDescriptor( propertyName, beanClass); assertTrue(ipd.equals(ipd2)); assertTrue(ipd.equals(ipd)); assertTrue(ipd2.equals(ipd)); assertFalse(ipd.equals(null)); } /* * Read method */ public void testEquals_ReadMethod() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("getPropertyFive", (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); IndexedPropertyDescriptor ipd2 = new IndexedPropertyDescriptor( propertyName, beanClass); assertFalse(ipd.equals(ipd2)); } /* * read method null. */ public void testEquals_ReadMethodNull() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = null; Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); IndexedPropertyDescriptor ipd2 = new IndexedPropertyDescriptor( propertyName, beanClass); assertFalse(ipd.equals(ipd2)); } public void testEquals_WriteMethod() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("setPropertyFive", new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); IndexedPropertyDescriptor ipd2 = new IndexedPropertyDescriptor( propertyName, beanClass); assertFalse(ipd.equals(ipd2)); } /* * write method null. */ public void testEquals_WriteMethodNull() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = null; Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); IndexedPropertyDescriptor ipd2 = new IndexedPropertyDescriptor( propertyName, beanClass); assertFalse(ipd.equals(ipd2)); } /* * Indexed read method. */ public void testEquals_IndexedR() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("getPropertyFive", new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); IndexedPropertyDescriptor ipd2 = new IndexedPropertyDescriptor( propertyName, beanClass); assertFalse(ipd.equals(ipd2)); } /* * Indexed read method null. */ public void testEquals_IndexedRNull() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = null; Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); IndexedPropertyDescriptor ipd2 = new IndexedPropertyDescriptor( propertyName, beanClass); assertFalse(ipd.equals(ipd2)); } /* * indexed write method. */ public void testEquals_IndexedW() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("setPropertyFive", new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); IndexedPropertyDescriptor ipd2 = new IndexedPropertyDescriptor( propertyName, beanClass); assertFalse(ipd.equals(ipd2)); } /* * Indexed write method null. */ public void testEquals_IndexWNull() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = null; IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); IndexedPropertyDescriptor ipd2 = new IndexedPropertyDescriptor( propertyName, beanClass); assertFalse(ipd.equals(ipd2)); } /* * Property Type. */ public void testEquals_PropertyType() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); IndexedPropertyDescriptor ipd2 = new IndexedPropertyDescriptor( "PropertySix", beanClass); assertFalse(ipd.getPropertyType().equals(ipd2.getPropertyType())); assertFalse(ipd.equals(ipd2)); } /* * Class under test for void IndexedPropertyDescriptor(String, Class) */ public void testIndexedPropertyDescriptorStringClass() throws IntrospectionException, SecurityException, NoSuchMethodException { String propertyName = "propertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, beanClass); String capitalName = propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1); Method readMethod = beanClass.getMethod("get" + capitalName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + capitalName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + capitalName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + capitalName, new Class[] { Integer.TYPE, String.class }); assertEquals(readMethod, ipd.getReadMethod()); assertEquals(writeMethod, ipd.getWriteMethod()); assertEquals(indexedReadMethod, ipd.getIndexedReadMethod()); assertEquals(indexedWriteMethod, ipd.getIndexedWriteMethod()); assertEquals(String[].class, ipd.getPropertyType()); assertEquals(String.class, ipd.getIndexedPropertyType()); assertFalse(ipd.isBound()); assertFalse(ipd.isConstrained()); assertEquals(propertyName, ipd.getDisplayName()); assertEquals(propertyName, ipd.getName()); assertEquals(propertyName, ipd.getShortDescription()); assertNotNull(ipd.attributeNames()); assertFalse(ipd.isExpert()); assertFalse(ipd.isHidden()); assertFalse(ipd.isPreferred()); // Regression for HARMONY-1236 try { new IndexedPropertyDescriptor("0xDFRF", Float.TYPE); fail("IntrospectionException expected"); } catch (IntrospectionException e) { // expected } } public void testIndexedPropertyDescriptorStringClass_PropertyNameNull() throws IntrospectionException { String propertyName = null; Class<MockJavaBean> beanClass = MockJavaBean.class; try { new IndexedPropertyDescriptor(propertyName, beanClass); fail("Should throw IntrospectionException"); } catch (IntrospectionException e) { } } public void testIndexedPropertyDescriptorStringClass_PropertyNameEmpty() throws IntrospectionException { String propertyName = ""; Class<MockJavaBean> beanClass = MockJavaBean.class; try { new IndexedPropertyDescriptor(propertyName, beanClass); fail("Should throw IntrospectionException"); } catch (IntrospectionException e) { } } public void testIndexedPropertyDescriptorStringClass_PropertyNameInvalid() throws IntrospectionException { String propertyName = "Not a property"; Class<MockJavaBean> beanClass = MockJavaBean.class; try { new IndexedPropertyDescriptor(propertyName, beanClass); fail("Should throw IntrospectionException"); } catch (IntrospectionException e) { } } public void testIndexedPropertyDescriptorStringClass_NotIndexedProperty() throws IntrospectionException { String propertyName = "propertyOne"; Class<MockJavaBean> beanClass = MockJavaBean.class; try { new IndexedPropertyDescriptor(propertyName, beanClass); fail("Should throw IntrospectionException"); } catch (IntrospectionException e) { } } public void testIndexedPropertyDescriptorStringClass_ClassNull() throws IntrospectionException { String propertyName = "propertyFour"; Class<?> beanClass = null; try { new IndexedPropertyDescriptor(propertyName, beanClass); fail("Should throw IntrospectionException"); } catch (IntrospectionException e) { } } /* * bean class does not implements java.io.Serializable */ public void testIndexedPropertyDescriptorStringClass_NotBeanClass() throws IntrospectionException { String propertyName = "propertyOne"; Class<NotJavaBean> beanClass = NotJavaBean.class; IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, beanClass); assertEquals(String.class, ipd.getIndexedPropertyType()); } private class MyClass { private int[] a; public void setA(int v, int i) { a[i] = v; } public void setA(int[] a) { this.a = a; } public int[] getA() { return a; } } /* * Class under test for void IndexedPropertyDescriptor(String, Class, * String, String, String, String) */ public void testIndexedPropertyDescriptorStringClassStringStringStringString() throws IntrospectionException, SecurityException, NoSuchMethodException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, beanClass, "get" + propertyName, "set" + propertyName, "get" + propertyName, "set" + propertyName); Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); assertEquals(readMethod, ipd.getReadMethod()); assertEquals(writeMethod, ipd.getWriteMethod()); assertEquals(indexedReadMethod, ipd.getIndexedReadMethod()); assertEquals(indexedWriteMethod, ipd.getIndexedWriteMethod()); assertEquals(String[].class, ipd.getPropertyType()); assertEquals(String.class, ipd.getIndexedPropertyType()); assertFalse(ipd.isBound()); assertFalse(ipd.isConstrained()); assertEquals(propertyName, ipd.getDisplayName()); assertEquals(propertyName, ipd.getName()); assertEquals(propertyName, ipd.getShortDescription()); assertNotNull(ipd.attributeNames()); assertFalse(ipd.isExpert()); assertFalse(ipd.isHidden()); assertFalse(ipd.isPreferred()); //empty method name new IndexedPropertyDescriptor( propertyName, beanClass, "get" + propertyName, "set" + propertyName, "", "set" + propertyName); try { new IndexedPropertyDescriptor("a", MyClass.class, "getA", "setA", "", "setA"); fail("Shoule throw exception"); } catch (IntrospectionException e) { // expected } try { new IndexedPropertyDescriptor(propertyName, beanClass, "", "set" + propertyName, "get" + propertyName, "set" + propertyName); fail("Shoule throw exception"); } catch (IntrospectionException e) { // expected } try { new IndexedPropertyDescriptor(propertyName, beanClass, "get" + propertyName, "", "get" + propertyName, "set" + propertyName); fail("Shoule throw exception"); } catch (IntrospectionException e) { // expected } try { new IndexedPropertyDescriptor(propertyName, beanClass, "get" + propertyName, "set" + propertyName, "get" + propertyName, ""); fail("Shoule throw exception"); } catch (IntrospectionException e) { // expected } //null method name new IndexedPropertyDescriptor( propertyName, beanClass, "get" + propertyName, "set" + propertyName, null, "set" + propertyName); new IndexedPropertyDescriptor( propertyName, beanClass, null, "set" + propertyName, "get" + propertyName, "set" + propertyName); new IndexedPropertyDescriptor( propertyName, beanClass, "get" + propertyName, null, "get" + propertyName, "set" + propertyName); new IndexedPropertyDescriptor( propertyName, beanClass, "get" + propertyName, "set" + propertyName, "get" + propertyName, null); } public void testIndexedPropertyDescriptorStringClassStringStringStringString_propNull() throws IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; try { new IndexedPropertyDescriptor(null, beanClass, "get" + propertyName, "set" + propertyName, "get" + propertyName, "set" + propertyName); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } public void testIndexedPropertyDescriptorStringClassStringStringStringString_propEmpty() { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; try { new IndexedPropertyDescriptor("", beanClass, "get" + propertyName, "set" + propertyName, "get" + propertyName, "set" + propertyName); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } public void testIndexedPropertyDescriptorStringClassStringStringStringString_propInvalid() throws IntrospectionException { String propertyName = "PropertyFour"; String invalidProp = "Not a prop"; Class<MockJavaBean> beanClass = MockJavaBean.class; IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( invalidProp, beanClass, "get" + propertyName, "set" + propertyName, "get" + propertyName, "set" + propertyName); assertEquals(String[].class, ipd.getPropertyType()); assertEquals(String.class, ipd.getIndexedPropertyType()); assertEquals(invalidProp, ipd.getName()); } public void testIndexedPropertyDescriptorStringClassStringStringStringString_BeanClassNull() throws IntrospectionException { String propertyName = "PropertyFour"; Class<?> beanClass = null; try { new IndexedPropertyDescriptor(propertyName, beanClass, "get" + propertyName, "set" + propertyName, "get" + propertyName, "set" + propertyName); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } public void testIndexedPropertyDescriptorStringClassStringStringStringString_ReadMethodNull() throws IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, beanClass, null, "set" + propertyName, "get" + propertyName, "set" + propertyName); assertNull(ipd.getReadMethod()); assertNotNull(ipd.getWriteMethod()); assertEquals(String.class, ipd.getIndexedPropertyType()); } public void testIndexedPropertyDescriptorStringClassStringStringStringString_WriteMethodNull() throws IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, beanClass, "get" + propertyName, null, "get" + propertyName, "set" + propertyName); assertNotNull(ipd.getReadMethod()); assertNull(ipd.getWriteMethod()); assertEquals(String.class, ipd.getIndexedPropertyType()); new IndexedPropertyDescriptor( propertyName, beanClass, "get" + propertyName, "set"+propertyName, "", "set" + propertyName); try{ new IndexedPropertyDescriptor( propertyName, beanClass, "get" + propertyName, "set"+propertyName, "get" + propertyName, ""); fail(); }catch(Exception e){ } } public void testIndexedPropertyDescriptorStringClassStringStringStringString_IndexedReadMethodNull() throws IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, beanClass, "get" + propertyName, "set" + propertyName, null, "set" + propertyName); assertNull(ipd.getIndexedReadMethod()); assertNotNull(ipd.getIndexedWriteMethod()); assertEquals(String.class, ipd.getIndexedPropertyType()); } public void testIndexedPropertyDescriptorStringClassStringStringStringString_IndexedWriteMethodNull() throws IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, beanClass, "get" + propertyName, "set" + propertyName, "get" + propertyName, null); assertNotNull(ipd.getIndexedReadMethod()); assertNull(ipd.getIndexedWriteMethod()); assertEquals(String.class, ipd.getIndexedPropertyType()); } /** * indexed read/write null * */ public void testIndexedPropertyDescriptorStringClassStringStringStringString_RWNull() throws IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, beanClass, null, null, "get" + propertyName, "set" + propertyName); assertNull(ipd.getReadMethod()); assertNull(ipd.getWriteMethod()); assertEquals(String.class, ipd.getIndexedPropertyType()); assertNull(ipd.getPropertyType()); } /** * indexed read/write null * */ public void testIndexedPropertyDescriptorStringClassStringStringStringString_IndexedRWNull() throws IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; try { new IndexedPropertyDescriptor(propertyName, beanClass, "get" + propertyName, "set" + propertyName, null, null); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } /** * index read /read null */ public void testIndexedPropertyDescriptorStringClassStringStringStringString_RNull() throws IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, beanClass, null, "set" + propertyName, null, "set" + propertyName); assertEquals(String.class, ipd.getIndexedPropertyType()); assertEquals(String[].class, ipd.getPropertyType()); assertNotNull(ipd.getWriteMethod()); assertNotNull(ipd.getIndexedWriteMethod()); } /** * index write /write null */ public void testIndexedPropertyDescriptorStringClassStringStringStringString_WNull() throws IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, beanClass, "get" + propertyName, null, "get" + propertyName, null); assertEquals(String.class, ipd.getIndexedPropertyType()); assertEquals(String[].class, ipd.getPropertyType()); assertNotNull(ipd.getReadMethod()); assertNotNull(ipd.getIndexedReadMethod()); } public void testIndexedPropertyDescriptorStringClassStringStringStringString_allNull() throws IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, beanClass, null, null, null, null); assertNull(ipd.getIndexedPropertyType()); assertNull(ipd.getPropertyType()); assertNull(ipd.getReadMethod()); assertNull(ipd.getIndexedReadMethod()); } /* * read/write incompatible * */ public void testIndexedPropertyDescriptorStringClassStringStringStringString_RWIncompatible() throws IntrospectionException { String propertyName = "PropertyFour"; String anotherProp = "PropertyFive"; Class<MockJavaBean> beanClass = MockJavaBean.class; IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, beanClass, "get" + propertyName, "set" + anotherProp, "get" + propertyName, "set" + propertyName); assertEquals(String.class, ipd.getIndexedPropertyType()); assertEquals(String[].class, ipd.getPropertyType()); assertEquals("set" + anotherProp, ipd.getWriteMethod().getName()); } /** * IndexedRead/IndexedWrite incompatible * * @throws IntrospectionException * */ public void testIndexedPropertyDescriptorStringClassStringStringStringString_IndexedRWIncompatible() throws IntrospectionException { String propertyName = "PropertyFour"; String anotherProp = "PropertyFive"; Class<MockJavaBean> beanClass = MockJavaBean.class; IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, beanClass, "get" + propertyName, "set" + propertyName, "get" + propertyName, "set" + anotherProp); assertEquals(String.class, ipd.getIndexedPropertyType()); assertEquals(String[].class, ipd.getPropertyType()); assertEquals("set" + anotherProp, ipd.getIndexedWriteMethod().getName()); } /* * ReadMethod/IndexedReadMethod incompatible * */ public void testIndexedPropertyDescriptorStringClassStringStringStringString_RIndexedRcompatible() throws IntrospectionException { String propertyName = "PropertyFour"; String anotherProp = "PropertyFive"; Class<MockJavaBean> beanClass = MockJavaBean.class; IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, beanClass, "get" + propertyName, "set" + propertyName, "get" + anotherProp, "set" + anotherProp); assertEquals(String.class, ipd.getIndexedPropertyType()); assertEquals(String[].class, ipd.getPropertyType()); assertEquals("set" + anotherProp, ipd.getIndexedWriteMethod().getName()); } public void testIndexedPropertyDescriptorStringClassStringStringStringString_WrongArgumentNumber() throws IntrospectionException { IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor("a", DummyClass.class, null, "setAI", "getAI", "setAI"); assertNotNull(ipd); } private class DummyClass { private int[] a; public void setAI(int v, int i) { a[i] = v; } public void setAI(int[] a) { this.a = a; } public int[] getA() { return a; } public int getAI(int i) { return a[i]; } } /* * Class under test for void IndexedPropertyDescriptor(String, Method, * Method, Method, Method) */ public void testIndexedPropertyDescriptorStringMethodMethodMethodMethod() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); assertEquals(readMethod, ipd.getReadMethod()); assertEquals(writeMethod, ipd.getWriteMethod()); assertEquals(indexedReadMethod, ipd.getIndexedReadMethod()); assertEquals(indexedWriteMethod, ipd.getIndexedWriteMethod()); assertEquals(String[].class, ipd.getPropertyType()); assertEquals(String.class, ipd.getIndexedPropertyType()); assertFalse(ipd.isBound()); assertFalse(ipd.isConstrained()); assertEquals(propertyName, ipd.getDisplayName()); assertEquals(propertyName, ipd.getName()); assertEquals(propertyName, ipd.getShortDescription()); assertNotNull(ipd.attributeNames()); assertFalse(ipd.isExpert()); assertFalse(ipd.isHidden()); assertFalse(ipd.isPreferred()); } /* * propertyName=null */ public void testIndexedPropertyDescriptorStringMethodMethodMethodMethod_propNull() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); try { new IndexedPropertyDescriptor(null, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } /* * propertyname=""; */ public void testIndexedPropertyDescriptorStringMethodMethodMethodMethod_propEmpty() throws SecurityException, NoSuchMethodException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); try { new IndexedPropertyDescriptor("", readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } public void testIndexedPropertyDescriptorStringMethodMethodMethodMethod_propInvalid() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; String invalidName = "An Invalid Property name"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( invalidName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); assertEquals(invalidName, ipd.getName()); assertEquals(String.class, ipd.getIndexedPropertyType()); } public void testIndexedPropertyDescriptorStringMethodMethodMethodMethod_ReadMethodNull() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, null, writeMethod, indexedReadMethod, indexedWriteMethod); assertNull(ipd.getReadMethod()); assertEquals(String[].class, ipd.getPropertyType()); assertEquals(String.class, ipd.getIndexedPropertyType()); } public void testIndexedPropertyDescriptorStringMethodMethodMethodMethod_WriteMethodNull() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, null, indexedReadMethod, indexedWriteMethod); assertNull(ipd.getWriteMethod()); assertEquals(String[].class, ipd.getPropertyType()); assertEquals(String.class, ipd.getIndexedPropertyType()); } public void testIndexedPropertyDescriptorStringMethodMethodMethodMethod_IndexedReadMethodNull() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, null, indexedWriteMethod); assertNull(ipd.getIndexedReadMethod()); assertEquals(String[].class, ipd.getPropertyType()); assertEquals(String.class, ipd.getIndexedPropertyType()); } public void testIndexedPropertyDescriptorStringMethodMethodMethodMethod_IndexedWriteMethodNull() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, null); assertNull(ipd.getIndexedWriteMethod()); assertEquals(String[].class, ipd.getPropertyType()); assertEquals(String.class, ipd.getIndexedPropertyType()); } public void testIndexedPropertyDescriptorStringMethodMethodMethodMethod_IndexedRWNull() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; 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 IndexedPropertyDescriptor(propertyName, readMethod, writeMethod, null, null); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } public void testIndexedPropertyDescriptorStringMethodMethodMethodMethod_RWNull() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, null, null, indexedReadMethod, indexedWriteMethod); assertNull(ipd.getPropertyType()); assertEquals(String.class, ipd.getIndexedPropertyType()); } /* * read/write incompatible */ public void testIndexedPropertyDescriptorStringMethodMethodMethodMethod_RWIncompatible() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; String anotherProp = "PropertyFive"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + anotherProp, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); assertEquals(propertyName, ipd.getName()); assertEquals(String[].class, ipd.getPropertyType()); assertEquals(String.class, ipd.getIndexedPropertyType()); } /* * IndexedRead/IndexedWrite incompatible */ public void testIndexedPropertyDescriptorStringMethodMethodMethodMethod_IndexedRWIncompatible() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; String anotherProp = "PropertyFive"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + anotherProp, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); assertEquals(propertyName, ipd.getName()); assertEquals(String[].class, ipd.getPropertyType()); assertEquals(String.class, ipd.getIndexedPropertyType()); indexedReadMethod = beanClass.getMethod("get" + anotherProp, new Class[] { Integer.TYPE, Integer.TYPE }); try { new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); fail("should throw IntrosecptionException"); } catch (IntrospectionException e) { // expected } } public void testSetIndexedReadMethod() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, null, indexedWriteMethod); assertNull(ipd.getIndexedReadMethod()); ipd.setIndexedReadMethod(indexedReadMethod); assertSame(indexedReadMethod, ipd.getIndexedReadMethod()); } public void testSetIndexedReadMethod_invalid() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, null, null, indexedReadMethod, indexedWriteMethod); Method indexedReadMethod2 = beanClass.getMethod("getPropertySix", new Class[] { Integer.TYPE }); try { ipd.setIndexedReadMethod(indexedReadMethod2); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } public void testSetIndexedReadMethod_null() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); assertSame(indexedReadMethod, ipd.getIndexedReadMethod()); ipd.setIndexedReadMethod(null); assertNull(ipd.getIndexedReadMethod()); } /* * indexed read method without args */ public void testSetIndexedReadMethod_RInvalidArgs() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); assertSame(indexedReadMethod, ipd.getIndexedReadMethod()); try { ipd.setIndexedReadMethod(readMethod); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } /* * indexed read method with invalid arg type (!Integer.TYPE) */ public void testSetIndexedReadMethod_RInvalidArgType() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); assertSame(indexedReadMethod, ipd.getIndexedReadMethod()); try { ipd.setIndexedReadMethod(writeMethod); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } /* * indexed read method with void return. */ public void testSetIndexedReadMethod_RInvalidReturn() throws SecurityException, NoSuchMethodException, IntrospectionException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); assertSame(indexedReadMethod, ipd.getIndexedReadMethod()); Method voidMethod = beanClass.getMethod("getPropertyFourInvalid", new Class[] { Integer.TYPE }); try { ipd.setIndexedReadMethod(voidMethod); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } public void testSetIndexedWriteMethod_null() throws IntrospectionException, NoSuchMethodException, NoSuchMethodException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); assertSame(indexedWriteMethod, ipd.getIndexedWriteMethod()); ipd.setIndexedWriteMethod(null); assertNull(ipd.getIndexedWriteMethod()); } public void testSetIndexedWriteMethod() throws IntrospectionException, NoSuchMethodException, NoSuchMethodException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, null); assertNull(ipd.getIndexedWriteMethod()); ipd.setIndexedWriteMethod(indexedWriteMethod); assertSame(indexedWriteMethod, ipd.getIndexedWriteMethod()); } /* * bad arg count */ public void testSetIndexedWriteMethod_noargs() throws IntrospectionException, NoSuchMethodException, NoSuchMethodException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, null); assertNull(ipd.getIndexedWriteMethod()); try { ipd.setIndexedWriteMethod(indexedReadMethod); fail("Should throw IntrospectionException."); } catch (IntrospectionException e) { } } /* * bad arg type */ public void testSetIndexedWriteMethod_badargtype() throws IntrospectionException, NoSuchMethodException, NoSuchMethodException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, null); assertNull(ipd.getIndexedWriteMethod()); Method badArgType = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, Integer.TYPE }); try { ipd.setIndexedWriteMethod(badArgType); fail("Should throw IntrospectionException"); } catch (IntrospectionException e) { } } public void testSetIndexedWriteMethod_return() throws IntrospectionException, NoSuchMethodException, NoSuchMethodException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, null); assertNull(ipd.getIndexedWriteMethod()); Method badArgType = beanClass.getMethod("setPropertyFourInvalid", new Class[] { Integer.TYPE, String.class }); ipd.setIndexedWriteMethod(badArgType); assertEquals(String.class, ipd.getIndexedPropertyType()); assertEquals(String[].class, ipd.getPropertyType()); assertEquals(Integer.TYPE, ipd.getIndexedWriteMethod().getReturnType()); } public void testSetIndexedWriteMethod_InvalidIndexType() throws IntrospectionException, NoSuchMethodException, NoSuchMethodException { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, null); assertNull(ipd.getIndexedWriteMethod()); Method badArgType = beanClass.getMethod("setPropertyFourInvalid2", new Class[] { String.class, String.class }); try { ipd.setIndexedWriteMethod(badArgType); fail("Should throw IntrospectionException"); } catch (IntrospectionException e) { } ipd = new IndexedPropertyDescriptor("data", NormalBean.class); ipd.setIndexedReadMethod(null); try { ipd.setIndexedWriteMethod(NormalBean.class.getMethod("setData", Integer.TYPE, Integer.TYPE)); fail("should throw IntrospectionException"); } catch (IntrospectionException e) { // expected } } public void testSetIndexedMethodNullNull() throws Exception { try { IndexedPropertyDescriptor i = new IndexedPropertyDescriptor("a", NormalBean.class, "getData", "setData", null, "setData"); i.setIndexedWriteMethod(null); fail("should throw IntrospectionException."); } catch (IntrospectionException e) { // expected } try { IndexedPropertyDescriptor i = new IndexedPropertyDescriptor("a", NormalBean.class, "getData", "setData", "getData", null); i.setIndexedReadMethod(null); fail("should throw IntrospectionException."); } catch (IntrospectionException e) { // expected } } public void testSetIndexedReadMethodFollowANullValue() throws Exception { try { IndexedPropertyDescriptor i = new IndexedPropertyDescriptor("a", DummyBean.class, "readMethod", "writeMethod", null, "indexedReadMethod"); Method irm = DummyBean.class.getDeclaredMethod("indexedReadMethod", Integer.TYPE); i.setIndexedReadMethod(irm); fail("should throw IntrospectionException."); } catch (IntrospectionException e) { // expected } } static class DummyBean { public int[] readMehtod() { return null; } public void writeMethod(int[] a) { } public double indexedReadMethod(int i) { return 0; } public void indexedWriteMethod(int i, int j) { } } class NotJavaBean { private String[] propertyOne; /** * @return Returns the propertyOne. */ public String[] getPropertyOne() { return propertyOne; } /** * @param propertyOne * The propertyOne to set. */ public void setPropertyOne(String[] propertyOne) { this.propertyOne = propertyOne; } public String getPropertyOne(int i) { return getPropertyOne()[i]; } public void setPropertyOne(int i, String value) { this.propertyOne[i] = value; } } //Regression Test class InCompatibleGetterSetterBean { private Object[] data = new Object[10]; public void setData(Object[] data) { this.data = data; } public Object[] getDate() { return data; } public void setData(int index, Object o) { this.data[index] = o; } } public void testInCompatibleGetterSetterBean() { try { new IndexedPropertyDescriptor("data", InCompatibleGetterSetterBean.class); fail("should throw IntrospectionException"); } catch (IntrospectionException e) { // expected } } class NormalBean { private Object[] data = new Object[10]; public Object[] getData() { return data; } public void setData(Object[] data) { this.data = data; } public void setData(int index, Object o) { data[index] = o; } public void setData(int index, int value) { // do nothing } public Object getData(int index) { return data[index]; } } public void testEquals_superClass() throws Exception { PropertyDescriptor propertyDescriptor = new PropertyDescriptor("data", NormalBean.class); IndexedPropertyDescriptor indexedPropertyDescriptor = new IndexedPropertyDescriptor( "data", NormalBean.class); assertFalse(indexedPropertyDescriptor.equals(propertyDescriptor)); assertTrue(propertyDescriptor.equals(indexedPropertyDescriptor)); } public void testHashCode() throws Exception { String propertyName = "PropertyFour"; Class<MockJavaBean> beanClass = MockJavaBean.class; Method readMethod = beanClass.getMethod("get" + propertyName, (Class[]) null); Method writeMethod = beanClass.getMethod("set" + propertyName, new Class[] { String[].class }); Method indexedReadMethod = beanClass.getMethod("get" + propertyName, new Class[] { Integer.TYPE }); Method indexedWriteMethod = beanClass.getMethod("set" + propertyName, new Class[] { Integer.TYPE, String.class }); IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor( propertyName, readMethod, writeMethod, indexedReadMethod, indexedWriteMethod); IndexedPropertyDescriptor ipd2 = new IndexedPropertyDescriptor( propertyName, beanClass); assertEquals(ipd, ipd2); assertEquals(ipd.hashCode(), ipd2.hashCode()); } public void testIncompatibleGetterAndIndexedGetterBean() { try { new IndexedPropertyDescriptor("data", IncompatibleGetterAndIndexedGetterBean.class); fail("should throw IntrospectionException"); } catch (IntrospectionException e) { //expected } } private class IncompatibleGetterAndIndexedGetterBean { private int[] data; public int getData() { return data[0]; } public int getData(int index) { return data[index]; } public void setData(int index, int data) { this.data[index] = data; } } }