You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ml...@apache.org on 2006/04/18 14:11:45 UTC

svn commit: r394923 [5/16] - in /incubator/harmony/enhanced/classlib/trunk/modules/beans: make/common/ src/test/java.injected/ src/test/java.injected/java/ src/test/java.injected/java/beans/ src/test/java/tests/ src/test/java/tests/api/ src/test/java/t...

Added: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/IndexedPropertyDescriptorTest.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/IndexedPropertyDescriptorTest.java?rev=394923&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/IndexedPropertyDescriptorTest.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/IndexedPropertyDescriptorTest.java Tue Apr 18 05:11:09 2006
@@ -0,0 +1,1323 @@
+/* Copyright 2005 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * 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 tests.api.java.beans;
+
+import java.beans.IndexedPropertyDescriptor;
+import java.beans.IntrospectionException;
+import java.lang.reflect.Method;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit test for IndexedPropertyDescriptor.
+ */
+public class IndexedPropertyDescriptorTest extends TestCase {
+
+	/*
+	 * @see TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+	}
+
+	/*
+	 * @see TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	public void testEquals() throws SecurityException, NoSuchMethodException,
+			IntrospectionException {
+		String propertyName = "PropertyFour";
+		Class beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("getPropertyFive", 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 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 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, 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());
+		assertNull(ipd.getPropertyEditorClass());
+
+		assertEquals(propertyName, ipd.getDisplayName());
+		assertEquals(propertyName, ipd.getName());
+		assertEquals(propertyName, ipd.getShortDescription());
+
+		assertNotNull(ipd.attributeNames());
+
+		assertFalse(ipd.isExpert());
+		assertFalse(ipd.isHidden());
+		assertFalse(ipd.isPreferred());
+	}
+
+	public void testIndexedPropertyDescriptorStringClass_PropertyNameNull()
+			throws IntrospectionException {
+		String propertyName = null;
+		Class beanClass = MockJavaBean.class;
+		try {
+			IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor(
+					propertyName, beanClass);
+			fail("Should throw IntrospectionException");
+		} catch (IntrospectionException e) {
+		}
+	}
+
+	public void testIndexedPropertyDescriptorStringClass_PropertyNameEmpty()
+			throws IntrospectionException {
+		String propertyName = "";
+		Class beanClass = MockJavaBean.class;
+		try {
+			IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor(
+					propertyName, beanClass);
+			fail("Should throw IntrospectionException");
+		} catch (IntrospectionException e) {
+		}
+	}
+
+	public void testIndexedPropertyDescriptorStringClass_PropertyNameInvalid()
+			throws IntrospectionException {
+		String propertyName = "Not a property";
+		Class beanClass = MockJavaBean.class;
+		try {
+			IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor(
+					propertyName, beanClass);
+			fail("Should throw IntrospectionException");
+		} catch (IntrospectionException e) {
+		}
+	}
+
+	public void testIndexedPropertyDescriptorStringClass_NotIndexedProperty()
+			throws IntrospectionException {
+		String propertyName = "propertyOne";
+		Class beanClass = MockJavaBean.class;
+		try {
+			IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor(
+					propertyName, beanClass);
+			fail("Should throw IntrospectionException");
+		} catch (IntrospectionException e) {
+		}
+	}
+
+	public void testIndexedPropertyDescriptorStringClass_ClassNull()
+			throws IntrospectionException {
+		String propertyName = "propertyFour";
+		Class beanClass = null;
+		try {
+			IndexedPropertyDescriptor ipd = 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 beanClass = NotJavaBean.class;
+		IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor(
+				propertyName, beanClass);
+		assertEquals(String.class, ipd.getIndexedPropertyType());
+	}
+
+	/*
+	 * Class under test for void IndexedPropertyDescriptor(String, Class,
+	 * String, String, String, String)
+	 */
+	public void testIndexedPropertyDescriptorStringClassStringStringStringString()
+			throws IntrospectionException, SecurityException,
+			NoSuchMethodException {
+		String propertyName = "PropertyFour";
+		Class beanClass = MockJavaBean.class;
+		IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor(
+				propertyName, beanClass, "get" + propertyName, "set"
+						+ propertyName, "get" + propertyName, "set"
+						+ propertyName);
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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());
+		assertNull(ipd.getPropertyEditorClass());
+
+		assertEquals(propertyName, ipd.getDisplayName());
+		assertEquals(propertyName, ipd.getName());
+		assertEquals(propertyName, ipd.getShortDescription());
+
+		assertNotNull(ipd.attributeNames());
+
+		assertFalse(ipd.isExpert());
+		assertFalse(ipd.isHidden());
+		assertFalse(ipd.isPreferred());
+
+	}
+
+	public void testIndexedPropertyDescriptorStringClassStringStringStringString_propNull()
+			throws IntrospectionException {
+		String propertyName = "PropertyFour";
+		Class beanClass = MockJavaBean.class;
+		try {
+			IndexedPropertyDescriptor ipd = 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 beanClass = MockJavaBean.class;
+		try {
+			IndexedPropertyDescriptor ipd = 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 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 {
+			IndexedPropertyDescriptor ipd = 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 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 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());
+	}
+
+	public void testIndexedPropertyDescriptorStringClassStringStringStringString_IndexedReadMethodNull()
+			throws IntrospectionException {
+		String propertyName = "PropertyFour";
+		Class 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 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 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 beanClass = MockJavaBean.class;
+		try {
+			IndexedPropertyDescriptor ipd = 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 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 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 beanClass = MockJavaBean.class;
+		IndexedPropertyDescriptor ipd = new IndexedPropertyDescriptor(
+				propertyName, beanClass, null, null, null, null);
+		assertEquals(null, ipd.getIndexedPropertyType());
+		assertEquals(null, ipd.getPropertyType());
+		assertNull(ipd.getReadMethod());
+		assertNull(ipd.getIndexedReadMethod());
+	}
+
+	/*
+	 * read/write incompatible
+	 * 
+	 */
+	public void testIndexedPropertyDescriptorStringClassStringStringStringString_RWIncompatible()
+			throws IntrospectionException {
+		String propertyName = "PropertyFour";
+		String anotherProp = "PropertyFive";
+		Class 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 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 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());
+	}
+
+	/*
+	 * Class under test for void IndexedPropertyDescriptor(String, Method,
+	 * Method, Method, Method)
+	 */
+	public void testIndexedPropertyDescriptorStringMethodMethodMethodMethod()
+			throws SecurityException, NoSuchMethodException,
+			IntrospectionException {
+		String propertyName = "PropertyFour";
+		Class beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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());
+		assertNull(ipd.getPropertyEditorClass());
+
+		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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 {
+			IndexedPropertyDescriptor ipd = 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 {
+			IndexedPropertyDescriptor ipd = 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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());
+		assertEquals(String[].class, ipd.getPropertyType());
+		assertEquals(String.class, ipd.getIndexedPropertyType());
+	}
+
+	public void testIndexedPropertyDescriptorStringMethodMethodMethodMethod_IndexedWriteMethodNull()
+			throws SecurityException, NoSuchMethodException,
+			IntrospectionException {
+		String propertyName = "PropertyFour";
+		Class beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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());
+		assertEquals(String[].class, ipd.getPropertyType());
+		assertEquals(String.class, ipd.getIndexedPropertyType());
+
+	}
+
+	public void testIndexedPropertyDescriptorStringMethodMethodMethodMethod_IndexedRWNull()
+			throws SecurityException, NoSuchMethodException,
+			IntrospectionException {
+		String propertyName = "PropertyFour";
+		Class beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 {
+			IndexedPropertyDescriptor ipd = 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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());
+
+	}
+
+	public void testSetIndexedReadMethod() throws SecurityException,
+			NoSuchMethodException, IntrospectionException {
+		String propertyName = "PropertyFour";
+		Class beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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());
+		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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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());
+		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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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());
+		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 beanClass = MockJavaBean.class;
+
+		Method readMethod = beanClass.getMethod("get" + propertyName, 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());
+		Method badArgType = beanClass.getMethod("setPropertyFourInvalid2",
+				new Class[] { String.class, String.class });
+		try {
+			ipd.setIndexedWriteMethod(badArgType);
+			fail("Should throw IntrospectionException");
+		} catch (IntrospectionException e) {
+		}
+	}
+
+	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;
+		}
+
+	}
+}

Added: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/IntArray.xml
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/IntArray.xml?rev=394923&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/IntArray.xml (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/IntArray.xml Tue Apr 18 05:11:09 2006
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- Copyright 2006 The Apache Software Foundation or its licensors, as applicable
+     
+     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. -->
+ 
+<java version="1.4.2_07" class="java.beans.XMLDecoder"> 
+ <array class="int" length="3"> 
+  <void index="0"> 
+   <int>1</int> 
+  </void> 
+  <void index="1"> 
+   <int>2</int> 
+  </void> 
+  <void index="2"> 
+   <int>3</int> 
+  </void> 
+ </array> 
+</java> 

Added: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/IntrospectionException.ser
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/IntrospectionException.ser?rev=394923&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/IntrospectionException.ser
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/IntrospectionExceptionTest.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/IntrospectionExceptionTest.java?rev=394923&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/IntrospectionExceptionTest.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/IntrospectionExceptionTest.java Tue Apr 18 05:11:09 2006
@@ -0,0 +1,62 @@
+/* Copyright 2005 The Apache Software Foundation or its licensors, as applicable
+ * 
+ * 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 tests.api.java.beans;
+
+import java.beans.IntrospectionException;
+import java.io.IOException;
+
+import tests.util.SerializationTester;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit test of IntrospectionException.
+ */
+
+public class IntrospectionExceptionTest extends TestCase {
+
+    public void testConstructor() {
+        String message = "IntrospectionExceptionTest";
+        IntrospectionException e = new IntrospectionException(message);
+        assertSame(message, e.getMessage());
+    }
+
+    public void testConstructor_MessageNull() {
+        IntrospectionException e = new IntrospectionException(null);
+        assertNull(e.getMessage());
+    }
+
+    public void testSerialization() throws IOException, ClassNotFoundException {
+        String message = "IntrospectionExceptionTest";
+        IntrospectionException e = new IntrospectionException(message);
+        assertSame(message, e.getMessage());
+
+        IntrospectionException de = (IntrospectionException) SerializationTester
+                .getDeserilizedObject(e);
+        assertEquals(message, de.getMessage());
+    }
+
+    public void testSerialization_Compatibility() throws Exception {
+        String message = "IntrospectionExceptionTest";
+        IntrospectionException e = new IntrospectionException(message);
+        assertSame(message, e.getMessage());
+
+        IntrospectionException de = (IntrospectionException) SerializationTester
+                .readObject(e,
+                        "tests/api/java/beans/IntrospectionException.ser");
+        assertEquals(message, de.getMessage());
+    }
+}