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 [13/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/...

Added: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/beancontext/BeanContextSupportTest.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/beancontext/BeanContextSupportTest.java?rev=394923&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/beancontext/BeanContextSupportTest.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/beancontext/BeanContextSupportTest.java Tue Apr 18 05:11:09 2006
@@ -0,0 +1,2141 @@
+/* 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.beancontext;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyVetoException;
+import java.beans.VetoableChangeListener;
+import java.beans.Visibility;
+import java.beans.beancontext.BeanContext;
+import java.beans.beancontext.BeanContextChild;
+import java.beans.beancontext.BeanContextChildSupport;
+import java.beans.beancontext.BeanContextMembershipEvent;
+import java.beans.beancontext.BeanContextMembershipListener;
+import java.beans.beancontext.BeanContextProxy;
+import java.beans.beancontext.BeanContextSupport;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+
+import junit.framework.TestCase;
+import tests.api.java.beans.beancontext.mock.MockBeanContext;
+import tests.api.java.beans.beancontext.mock.MockBeanContextChild;
+import tests.api.java.beans.beancontext.mock.MockBeanContextChildS;
+import tests.api.java.beans.beancontext.mock.MockBeanContextDelegateS;
+import tests.api.java.beans.beancontext.mock.MockBeanContextMembershipListener;
+import tests.api.java.beans.beancontext.mock.MockBeanContextMembershipListenerS;
+import tests.api.java.beans.beancontext.mock.MockBeanContextProxy;
+import tests.api.java.beans.beancontext.mock.MockBeanContextProxyS;
+import tests.api.java.beans.beancontext.mock.MockPropertyChangeListener;
+import tests.api.java.beans.beancontext.mock.MockVetoChangeListener;
+import tests.api.java.beans.beancontext.mock.MockVetoableChangeListener;
+import tests.api.java.beans.beancontext.mock.MockVisibility;
+import tests.util.SerializationTester;
+
+/**
+ * Test BeanContextSupport
+ */
+public class BeanContextSupportTest extends TestCase {
+
+	private static class MockBeanContextSupport extends BeanContextSupport {
+
+		public transient MethodInvocationRecords records;
+
+		public transient boolean vetoAddRemove = false;
+
+		/**
+		 * 
+		 */
+		public MockBeanContextSupport() {
+			super();
+		}
+
+		/**
+		 * @param peer
+		 */
+		public MockBeanContextSupport(BeanContext peer) {
+			super(peer);
+		}
+
+		/**
+		 * @param peer
+		 * @param lcle
+		 */
+		public MockBeanContextSupport(BeanContext peer, Locale lcle) {
+			super(peer, lcle);
+		}
+
+		/**
+		 * @param peer
+		 * @param lcle
+		 * @param dtime
+		 */
+		public MockBeanContextSupport(BeanContext peer, Locale lcle,
+				boolean dtime) {
+			super(peer, lcle, dtime);
+		}
+
+		/**
+		 * @param peer
+		 * @param lcle
+		 * @param dTime
+		 * @param visible
+		 */
+		public MockBeanContextSupport(BeanContext peer, Locale lcle,
+				boolean dTime, boolean visible) {
+			super(peer, lcle, dTime, visible);
+		}
+
+		public ArrayList bcmListeners() {
+			return bcmListeners;
+		}
+
+		public Iterator publicBcsChildren() {
+			return this.bcsChildren();
+		}
+
+		public static boolean publicClassEquals(Class c1, Class c2) {
+			return classEquals(c1, c2);
+		}
+
+		public Object[] publicCopyChildren() {
+			return copyChildren();
+		}
+
+		public static BeanContextChild publicGetChildBeanContextChild(
+				Object child) {
+			return getChildBeanContextChild(child);
+		}
+
+		public static BeanContextMembershipListener publicGetChildBeanContextMembershipListener(
+				Object child) {
+			return getChildBeanContextMembershipListener(child);
+		}
+
+		public static PropertyChangeListener publicGetChildPropertyChangeListener(
+				Object child) {
+			return getChildPropertyChangeListener(child);
+		}
+
+		public static Serializable publicGetChildSerializable(Object child) {
+			return getChildSerializable(child);
+		}
+
+		public static VetoableChangeListener publicGetChildVetoableChangeListener(
+				Object child) {
+			return getChildVetoableChangeListener(child);
+		}
+
+		public static Visibility publicGetChildVisibility(Object child) {
+			return getChildVisibility(child);
+		}
+
+		public boolean publicRemove(Object targetChild, boolean callChildBC) {
+			return remove(targetChild, callChildBC);
+		}
+
+		public HashMap children() {
+			return children;
+		}
+
+		public boolean designTime() {
+			return designTime;
+		}
+
+		public Locale locale() {
+			return locale;
+		}
+
+		public boolean isOkToUseGui() {
+			return okToUseGui;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.beans.beancontext.BeanContextSupport#bcsPreDeserializationHook(java.io.ObjectInputStream)
+		 */
+		protected void bcsPreDeserializationHook(ObjectInputStream ois)
+				throws IOException, ClassNotFoundException {
+			super.bcsPreDeserializationHook(ois);
+			if (records == null) {
+				records = new MethodInvocationRecords();
+			}
+			records.add("bcsPreDeserializationHook", ois, null);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.beans.beancontext.BeanContextSupport#bcsPreSerializationHook(java.io.ObjectOutputStream)
+		 */
+		protected void bcsPreSerializationHook(ObjectOutputStream oos)
+				throws IOException {
+			super.bcsPreSerializationHook(oos);
+			records.add("bcsPreSerializationHook", oos, null);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.beans.beancontext.BeanContextSupport#childDeserializedHook(java.lang.Object,
+		 *      java.beans.beancontext.BeanContextSupport.BCSChild)
+		 */
+		protected void childDeserializedHook(Object child, BCSChild bcsc) {
+			super.childDeserializedHook(child, bcsc);
+			records.add("childDeserializedHook", child, bcsc, null);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.beans.beancontext.BeanContextSupport#childJustAddedHook(java.lang.Object,
+		 *      java.beans.beancontext.BeanContextSupport.BCSChild)
+		 */
+		protected void childJustAddedHook(Object child, BCSChild bcsc) {
+			// check lock
+			try {
+				child.wait(1);
+			} catch (InterruptedException e) {
+				// never occur
+			}
+			super.childJustAddedHook(child, bcsc);
+			records.add("childJustAddedHook", child, bcsc, null);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.beans.beancontext.BeanContextSupport#childJustRemovedHook(java.lang.Object,
+		 *      java.beans.beancontext.BeanContextSupport.BCSChild)
+		 */
+		protected void childJustRemovedHook(Object child, BCSChild bcsc) {
+			// check lock
+			try {
+				child.wait(1);
+			} catch (InterruptedException e) {
+				// never occur
+			}
+			super.childJustRemovedHook(child, bcsc);
+			records.add("childJustRemovedHook", child, bcsc, null);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.beans.beancontext.BeanContextSupport#createBCSChild(java.lang.Object,
+		 *      java.lang.Object)
+		 */
+		protected BCSChild createBCSChild(Object targetChild, Object peer) {
+			BCSChild result = super.createBCSChild(targetChild, peer);
+			records.add("createBCSChild", targetChild, peer, result);
+			return result;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.beans.beancontext.BeanContextSupport#initialize()
+		 */
+		protected void initialize() {
+			super.initialize();
+			if (records == null) {
+				records = new MethodInvocationRecords();
+			}
+			records.add("initialize", null);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+		 */
+		public void propertyChange(PropertyChangeEvent pce) {
+			super.propertyChange(pce);
+			records.add("propertyChange", pce, null);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.beans.beancontext.BeanContextSupport#validatePendingAdd(java.lang.Object)
+		 */
+		protected boolean validatePendingAdd(Object targetChild) {
+			boolean result = vetoAddRemove ? false : super
+					.validatePendingAdd(targetChild);
+			records.add("validatePendingAdd", targetChild, Boolean
+					.valueOf(result));
+			return result;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.beans.beancontext.BeanContextSupport#validatePendingRemove(java.lang.Object)
+		 */
+		protected boolean validatePendingRemove(Object targetChild) {
+			boolean result = vetoAddRemove ? false : super
+					.validatePendingRemove(targetChild);
+			records.add("validatePendingRemove", targetChild, Boolean
+					.valueOf(result));
+			return result;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.beans.VetoableChangeListener#vetoableChange(java.beans.PropertyChangeEvent)
+		 */
+		public void vetoableChange(PropertyChangeEvent pce)
+				throws PropertyVetoException {
+			super.vetoableChange(pce);
+			records.add("vetoableChange", pce, null);
+		}
+	}
+
+	private static class BadChild implements BeanContextChild, BeanContextProxy {
+
+		public void setBeanContext(BeanContext bc) throws PropertyVetoException {
+			// Auto-generated method stub
+		}
+
+		public BeanContext getBeanContext() {
+			// Auto-generated method stub
+			return null;
+		}
+
+		public void addPropertyChangeListener(String name,
+				PropertyChangeListener pcl) {
+			// Auto-generated method stub
+		}
+
+		public void removePropertyChangeListener(String name,
+				PropertyChangeListener pcl) {
+			// Auto-generated method stub
+		}
+
+		public void addVetoableChangeListener(String name,
+				VetoableChangeListener vcl) {
+			// Auto-generated method stub
+		}
+
+		public void removeVetoableChangeListener(String name,
+				VetoableChangeListener vcl) {
+			// Auto-generated method stub
+		}
+
+		public BeanContextChild getBeanContextProxy() {
+			// Auto-generated method stub
+			return null;
+		}
+	}
+
+	public static void main(String[] args) {
+		junit.textui.TestRunner.run(BeanContextSupportTest.class);
+
+		// MockBeanContextSupport support = new MockBeanContextSupport();
+		// BeanContextChild childPeer = new MockBeanContextChild();
+		// BeanContextProxy child = new MockBeanContextProxy(childPeer);
+		// support.add(child);
+		// System.out.println(support.records);
+		// System.out.println(support.children());
+	}
+
+	public void testAdd_NullParam() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+
+		try {
+			support.add(null);
+			fail();
+		} catch (IllegalArgumentException e) {
+			// expected
+		}
+	}
+
+	public void testAdd_NonBCC() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextMembershipListener l1 = new MockBeanContextMembershipListener();
+		MockPropertyChangeListener l2 = new MockPropertyChangeListener();
+		MockVetoableChangeListener l3 = new MockVetoableChangeListener();
+		support.addBeanContextMembershipListener(l1);
+		support.addPropertyChangeListener("children", l2);
+		support.addVetoableChangeListener("children", l3);
+
+		Integer child = new Integer(1000);
+		support.add(child);
+		support.records.assertRecord("initialize", null);
+		support.records.assertRecord("validatePendingAdd", child, Boolean.TRUE);
+		support.records.assertRecord("createBCSChild", child, null, support
+				.children().get(child));
+		support.records.assertRecord("childJustAddedHook", child, support
+				.children().get(child), null);
+		support.records.assertEndOfRecords();
+		assertTrue(l1.lastEventAdd);
+		assertMembershipEvent(l1.lastEvent, support, null, child);
+		assertNull(l2.lastEvent);
+		assertNull(l3.lastEvent);
+	}
+
+	public void testAdd_BCC() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextMembershipListener l1 = new MockBeanContextMembershipListener();
+		MockPropertyChangeListener l2 = new MockPropertyChangeListener();
+		MockVetoableChangeListener l3 = new MockVetoableChangeListener();
+		support.addBeanContextMembershipListener(l1);
+		support.addPropertyChangeListener("children", l2);
+		support.addVetoableChangeListener("children", l3);
+
+		BeanContextChild child = new MockBeanContextChild();
+		support.add(child);
+		support.records.assertRecord("initialize", null);
+		support.records.assertRecord("validatePendingAdd", child, Boolean.TRUE);
+		support.records.assertRecord("createBCSChild", child, null, support
+				.children().get(child));
+		support.records.assertRecord("childJustAddedHook", child, support
+				.children().get(child), null);
+		support.records.assertEndOfRecords();
+		assertTrue(l1.lastEventAdd);
+		assertMembershipEvent(l1.lastEvent, support, null, child);
+		assertNull(l2.lastEvent);
+		assertNull(l3.lastEvent);
+
+		assertSame(support, child.getBeanContext());
+	}
+
+	public void testAdd_BCP() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextMembershipListener l1 = new MockBeanContextMembershipListener();
+		MockPropertyChangeListener l2 = new MockPropertyChangeListener();
+		MockVetoableChangeListener l3 = new MockVetoableChangeListener();
+		support.addBeanContextMembershipListener(l1);
+		support.addPropertyChangeListener("children", l2);
+		support.addVetoableChangeListener("children", l3);
+
+		BeanContextChild childPeer = new MockBeanContextChild();
+		BeanContextProxy child = new MockBeanContextProxy(childPeer);
+		support.add(child);
+		support.records.assertRecord("initialize", null);
+		support.records.assertRecord("validatePendingAdd", child, Boolean.TRUE);
+		support.records.assertRecord("createBCSChild", child, childPeer,
+				support.children().get(child));
+		support.records.assertRecord("createBCSChild", childPeer, child,
+				support.children().get(childPeer));
+		support.records.assertRecord("childJustAddedHook", child, support
+				.children().get(child), null);
+		support.records.assertRecord("childJustAddedHook", childPeer, support
+				.children().get(childPeer), null);
+		support.records.assertEndOfRecords();
+		assertTrue(l1.lastEventAdd);
+		assertMembershipEvent(l1.lastEvent, support, null, Arrays
+				.asList(new Object[] { child, childPeer }));
+		assertNull(l2.lastEvent);
+		assertNull(l3.lastEvent);
+
+		assertSame(support, childPeer.getBeanContext());
+		assertEquals(2, support.size());
+	}
+
+	public void testAdd_Exist() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextMembershipListener l1 = new MockBeanContextMembershipListener();
+		support.addBeanContextMembershipListener(l1);
+		Integer child = new Integer(1000);
+		support.add(child);
+		support.records.assertRecord("initialize", null);
+		support.records.assertRecord("validatePendingAdd", child, Boolean.TRUE);
+		support.records.assertRecord("createBCSChild", child, null, support
+				.children().get(child));
+		support.records.assertRecord("childJustAddedHook", child, support
+				.children().get(child), null);
+		support.records.assertEndOfRecords();
+		assertTrue(l1.lastEventAdd);
+		assertMembershipEvent(l1.lastEvent, support, null, child);
+		support.records.clear();
+		l1.clearLastEvent();
+
+		support.add(child);
+		support.records.assertEndOfRecords();
+		assertNull(l1.lastEvent);
+	}
+
+	public void testAdd_Veto() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextMembershipListener l1 = new MockBeanContextMembershipListener();
+		MockPropertyChangeListener l2 = new MockPropertyChangeListener();
+		MockVetoableChangeListener l3 = new MockVetoableChangeListener();
+		support.addBeanContextMembershipListener(l1);
+		support.addPropertyChangeListener("children", l2);
+		support.addVetoableChangeListener("children", l3);
+
+		support.vetoAddRemove = true;
+		BeanContextChild child = new MockBeanContextChild();
+		try {
+			support.add(child);
+			fail();
+		} catch (IllegalStateException e) {
+			// expected
+		}
+		support.records.assertRecord("initialize", null);
+		support.records
+				.assertRecord("validatePendingAdd", child, Boolean.FALSE);
+		support.records.assertEndOfRecords();
+		assertNull(l1.lastEvent);
+		assertNull(l2.lastEvent);
+		assertNull(l3.lastEvent);
+
+		assertNull(child.getBeanContext());
+	}
+
+	public void testAddAll() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextMembershipListener l1 = new MockBeanContextMembershipListener();
+		MockPropertyChangeListener l2 = new MockPropertyChangeListener();
+		MockVetoableChangeListener l3 = new MockVetoableChangeListener();
+		support.addBeanContextMembershipListener(l1);
+		support.addPropertyChangeListener("children", l2);
+		support.addVetoableChangeListener("children", l3);
+		support.records.assertRecord("initialize", null);
+
+		try {
+			support.addAll(Collections.EMPTY_LIST);
+			fail();
+		} catch (UnsupportedOperationException e) {
+			// expected
+		}
+		support.records.assertEndOfRecords();
+		assertNull(l1.lastEvent);
+		assertNull(l2.lastEvent);
+		assertNull(l3.lastEvent);
+	}
+
+	public void testAddBeanContextMembershipListener_NullParam() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		try {
+			support.addBeanContextMembershipListener(null);
+			fail();
+		} catch (NullPointerException e) {
+			// expected
+		}
+	}
+
+	public void testAddBeanContextMembershipListener() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextMembershipListener l1 = new MockBeanContextMembershipListener();
+		MockBeanContextMembershipListener l2 = new MockBeanContextMembershipListener();
+
+		support.addBeanContextMembershipListener(l1);
+		support.addBeanContextMembershipListener(l2);
+
+		l1.clearLastEvent();
+		l2.clearLastEvent();
+		Object child = new MockBeanContextChild();
+		support.add(child);
+		assertTrue(l1.lastEventAdd);
+		assertMembershipEvent(l1.lastEvent, support, null, child);
+		assertTrue(l2.lastEventAdd);
+		assertMembershipEvent(l2.lastEvent, support, null, child);
+
+		l1.clearLastEvent();
+		l2.clearLastEvent();
+		support.add(child);
+		assertNull(l1.lastEvent);
+		assertNull(l2.lastEvent);
+
+		support.removeBeanContextMembershipListener(l1);
+		l1.clearLastEvent();
+		l2.clearLastEvent();
+		support.remove(child);
+		assertNull(l1.lastEvent);
+		assertTrue(l2.lastEventRemove);
+		assertMembershipEvent(l2.lastEvent, support, null, child);
+	}
+
+	public void testAvoidingGui() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+
+		assertTrue(support.isOkToUseGui());
+		assertFalse(support.avoidingGui());
+		assertFalse(support.needsGui());
+
+		support.dontUseGui();
+		assertFalse(support.isOkToUseGui());
+		// assertFalse(support.avoidingGui());
+		assertFalse(support.needsGui());
+
+		support.okToUseGui();
+		assertTrue(support.isOkToUseGui());
+		assertFalse(support.avoidingGui());
+		assertFalse(support.needsGui());
+	}
+
+	public void testAvoidingGui_VisibleChild() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		support.add(new MockVisibility(true, false));
+		assertFalse(support.avoidingGui());
+	}
+
+	public void testBcsChildren() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		support.add(new Integer(1));
+		support.add(new MockBeanContextChild());
+
+		Collection expectedChildren = support.children().values();
+		Iterator it = support.publicBcsChildren();
+		int count = 0;
+		while (it.hasNext()) {
+			count++;
+			assertTrue(expectedChildren.contains(it.next()));
+		}
+		assertEquals(count, expectedChildren.size());
+	}
+
+	public void testBcsPreDeserializationHook() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		support.add("string value");
+		support.add(new Integer(129));
+		support.add(Locale.CHINESE);
+		support.records.clear();
+
+		byte bytes[] = serialize(support);
+		support.records.assertRecord("bcsPreSerializationHook",
+				MethodInvocationRecords.IGNORE, null);
+		support.records.assertEndOfRecords();
+
+		MockBeanContextSupport copy = (MockBeanContextSupport) deserialize(bytes);
+		copy.records.assertRecord("initialize", null);
+		copy.records.assertRecord("bcsPreDeserializationHook",
+				MethodInvocationRecords.IGNORE, null);
+		Iterator it = support.iterator();
+		while (it.hasNext()) {
+			Object expectedChild = it.next();
+			assertTrue(copy.contains(expectedChild));
+			copy.records.assertRecord("childDeserializedHook", expectedChild,
+					MethodInvocationRecords.IGNORE, null);
+		}
+		copy.records.assertEndOfRecords();
+	}
+
+	public void testBcsPreSerializationHook() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		support.add("string value");
+		support.add(new Integer(129));
+		support.add(Locale.CHINESE);
+		support.records.clear();
+
+		byte bytes[] = serialize(support);
+		support.records.assertRecord("bcsPreSerializationHook",
+				MethodInvocationRecords.IGNORE, null);
+		support.records.assertEndOfRecords();
+	}
+
+	/*
+	 * Class under test for void BeanContextSupport()
+	 */
+	public void testBeanContextSupport() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+
+		assertSame(support, support.getBeanContextPeer());
+		assertTrue(support.bcmListeners().isEmpty());
+		assertTrue(support.children().isEmpty());
+		assertFalse(support.designTime());
+		assertEquals(Locale.getDefault(), support.locale());
+		assertTrue(support.isOkToUseGui());
+
+		assertTrue(support instanceof BeanContextChildSupport);
+		assertTrue(support instanceof BeanContext);
+		assertTrue(support instanceof Serializable);
+		assertTrue(support instanceof PropertyChangeListener);
+		assertTrue(support instanceof VetoableChangeListener);
+	}
+
+	/*
+	 * Class under test for void
+	 * BeanContextSupport(java.beans.beancontext.BeanContext)
+	 */
+	public void testBeanContextSupportBeanContext() {
+		BeanContext ctx = new MockBeanContext();
+		MockBeanContextSupport support = new MockBeanContextSupport(ctx);
+
+		assertSame(ctx, support.getBeanContextPeer());
+		assertTrue(support.bcmListeners().isEmpty());
+		assertTrue(support.children().isEmpty());
+		assertFalse(support.designTime());
+		assertEquals(Locale.getDefault(), support.locale());
+		assertTrue(support.isOkToUseGui());
+
+		assertTrue(support instanceof BeanContextChildSupport);
+		assertTrue(support instanceof BeanContext);
+		assertTrue(support instanceof Serializable);
+		assertTrue(support instanceof PropertyChangeListener);
+		assertTrue(support instanceof VetoableChangeListener);
+	}
+
+	/*
+	 * Class under test for void
+	 * BeanContextSupport(java.beans.beancontext.BeanContext, java.util.Locale)
+	 */
+	public void testBeanContextSupportBeanContextLocale() {
+		BeanContext ctx = new MockBeanContext();
+		MockBeanContextSupport support = new MockBeanContextSupport(ctx,
+				Locale.CANADA_FRENCH);
+
+		assertSame(ctx, support.getBeanContextPeer());
+		assertTrue(support.bcmListeners().isEmpty());
+		assertTrue(support.children().isEmpty());
+		assertFalse(support.designTime());
+		assertEquals(Locale.CANADA_FRENCH, support.locale());
+		assertTrue(support.isOkToUseGui());
+
+		assertTrue(support instanceof BeanContextChildSupport);
+		assertTrue(support instanceof BeanContext);
+		assertTrue(support instanceof Serializable);
+		assertTrue(support instanceof PropertyChangeListener);
+		assertTrue(support instanceof VetoableChangeListener);
+	}
+
+	/*
+	 * Class under test for void
+	 * BeanContextSupport(java.beans.beancontext.BeanContext, java.util.Locale,
+	 * boolean)
+	 */
+	public void testBeanContextSupportBeanContextLocaleboolean() {
+		BeanContext ctx = new MockBeanContext();
+		MockBeanContextSupport support = new MockBeanContextSupport(ctx,
+				Locale.CANADA_FRENCH, true);
+
+		assertSame(ctx, support.getBeanContextPeer());
+		assertTrue(support.bcmListeners().isEmpty());
+		assertTrue(support.children().isEmpty());
+		assertTrue(support.designTime());
+		assertEquals(Locale.CANADA_FRENCH, support.locale());
+		assertTrue(support.isOkToUseGui());
+
+		assertTrue(support instanceof BeanContextChildSupport);
+		assertTrue(support instanceof BeanContext);
+		assertTrue(support instanceof Serializable);
+		assertTrue(support instanceof PropertyChangeListener);
+		assertTrue(support instanceof VetoableChangeListener);
+	}
+
+	/*
+	 * Class under test for void
+	 * BeanContextSupport(java.beans.beancontext.BeanContext, java.util.Locale,
+	 * boolean, boolean)
+	 */
+	public void testBeanContextSupportBeanContextLocalebooleanboolean() {
+		BeanContext ctx = new MockBeanContext();
+		MockBeanContextSupport support = new MockBeanContextSupport(ctx,
+				Locale.CANADA_FRENCH, true, false);
+
+		assertSame(ctx, support.getBeanContextPeer());
+		assertTrue(support.bcmListeners().isEmpty());
+		assertTrue(support.children().isEmpty());
+		assertTrue(support.designTime());
+		assertEquals(Locale.CANADA_FRENCH, support.locale());
+		assertFalse(support.isOkToUseGui());
+
+		assertTrue(support instanceof BeanContextChildSupport);
+		assertTrue(support instanceof BeanContext);
+		assertTrue(support instanceof Serializable);
+		assertTrue(support instanceof PropertyChangeListener);
+		assertTrue(support instanceof VetoableChangeListener);
+	}
+
+	public void testBeanContextSupport_NullParam() {
+		MockBeanContextSupport support = new MockBeanContextSupport(null, null,
+				true, true);
+		assertSame(support, support.getBeanContextPeer());
+		assertTrue(support.children().isEmpty());
+		assertTrue(support.designTime());
+		assertEquals(Locale.getDefault(), support.locale());
+		assertTrue(support.isOkToUseGui());
+	}
+
+	public void testChildDeserializedHook() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		support.add("string value");
+		support.add(new Integer(129));
+		support.add(Locale.CHINESE);
+		support.records.clear();
+
+		byte bytes[] = serialize(support);
+		support.records.assertRecord("bcsPreSerializationHook",
+				MethodInvocationRecords.IGNORE, null);
+		support.records.assertEndOfRecords();
+
+		MockBeanContextSupport copy = (MockBeanContextSupport) deserialize(bytes);
+		copy.records.assertRecord("initialize", null);
+		copy.records.assertRecord("bcsPreDeserializationHook",
+				MethodInvocationRecords.IGNORE, null);
+		Iterator it = support.iterator();
+		while (it.hasNext()) {
+			Object expectedChild = it.next();
+			assertTrue(copy.contains(expectedChild));
+			copy.records.assertRecord("childDeserializedHook", expectedChild,
+					MethodInvocationRecords.IGNORE, null);
+		}
+		copy.records.assertEndOfRecords();
+	}
+
+	public void testChildJustAddedHook() {
+		// covered by testAdd
+	}
+
+	public void testChildJustRemovedHook() {
+		// covered by testRemove
+	}
+
+	public void testClassEquals() {
+		assertTrue(MockBeanContextSupport.publicClassEquals(Integer.class,
+				Integer.class));
+		assertFalse(MockBeanContextSupport.publicClassEquals(Integer.class,
+				Double.class));
+	}
+
+	public void testClear() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		try {
+			support.clear();
+			fail();
+		} catch (UnsupportedOperationException e) {
+			// expected
+		}
+	}
+
+	public void testContains() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		Object c1 = "string value";
+		Object c2 = new Integer(129);
+		Object c3 = new MockBeanContextChild();
+		support.add(c1);
+		support.add(c2);
+		support.add(c3);
+
+		assertTrue(support.children().containsKey(c1));
+		assertTrue(support.children().containsKey(c2));
+		assertTrue(support.children().containsKey(c3));
+		assertFalse(support.children().containsKey(null));
+		assertFalse(support.children().containsKey("xxx"));
+		assertEquals(3, support.children().size());
+
+		assertTrue(support.contains(c1));
+		assertTrue(support.contains(c2));
+		assertTrue(support.contains(c3));
+		assertFalse(support.contains(null));
+		assertFalse(support.contains("xxx"));
+		assertEquals(3, support.size());
+	}
+
+	public void testContainsAll() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		Object c1 = "string value";
+		Object c2 = new Integer(129);
+		Object c3 = new MockBeanContextChild();
+		support.add(c1);
+		support.add(c2);
+		support.add(c3);
+		ArrayList l = new ArrayList();
+		l.add(c1);
+		l.add(c2);
+		l.add(c3);
+
+		assertTrue(support.containsAll(l));
+		l.add(null);
+		assertFalse(support.containsAll(l));
+	}
+
+	public void testContainsKey() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		Object c1 = "string value";
+		Object c2 = new Integer(129);
+		Object c3 = new MockBeanContextChild();
+		support.add(c1);
+		support.add(c2);
+		support.add(c3);
+
+		assertTrue(support.children().containsKey(c1));
+		assertTrue(support.children().containsKey(c2));
+		assertTrue(support.children().containsKey(c3));
+		assertFalse(support.children().containsKey(null));
+		assertFalse(support.children().containsKey("xxx"));
+		assertEquals(3, support.children().size());
+
+		assertTrue(support.containsKey(c1));
+		assertTrue(support.containsKey(c2));
+		assertTrue(support.containsKey(c3));
+		assertFalse(support.containsKey(null));
+		assertFalse(support.containsKey("xxx"));
+		assertEquals(3, support.size());
+	}
+
+	public void testCopyChildren() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		Object c1 = "string value";
+		Object c2 = new Integer(129);
+		Object c3 = new MockBeanContextChild();
+		support.add(c1);
+		support.add(c2);
+		support.add(c3);
+
+		Object children[] = support.publicCopyChildren();
+		List childrenList = Arrays.asList(children);
+		assertEquals(3, childrenList.size());
+		assertTrue(childrenList.contains(c1));
+		assertTrue(childrenList.contains(c2));
+		assertTrue(childrenList.contains(c3));
+	}
+
+	public void testCreateBCSChild() {
+		// covered by testAdd
+	}
+
+	public void testDeserialize() {
+		// covered by testBcsPreDeserializationHook()
+	}
+
+	public void testDontUseGui() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+
+		assertTrue(support.isOkToUseGui());
+		assertFalse(support.avoidingGui()); // always false
+		assertFalse(support.needsGui()); // always false
+
+		support.dontUseGui();
+		assertFalse(support.isOkToUseGui());
+		// assertFalse(support.avoidingGui()); // always false?
+		assertFalse(support.needsGui()); // always false
+	}
+
+	public void testFireChildrenAdded() {
+		// covered by testAdd
+	}
+
+	public void testFireChildrenRemoved() {
+		// covered by testRemove
+	}
+
+	public void testGetBeanContextPeer() {
+		// covered by testConstructor
+	}
+
+	public void testGetChildBeanContextChild_NullParam() {
+		BeanContextChild result = MockBeanContextSupport
+				.publicGetChildBeanContextChild(null);
+		assertNull(result);
+	}
+
+	public void testGetChildBeanContextChild_BeanContextChild() {
+		MockBeanContextChild child = new MockBeanContextChild();
+		BeanContextChild result = MockBeanContextSupport
+				.publicGetChildBeanContextChild(child);
+		assertSame(child, result);
+	}
+
+	public void testGetChildBeanContextChild_BeanContextProxy() {
+		MockBeanContextChild child = new MockBeanContextChild();
+		MockBeanContextProxy proxy = new MockBeanContextProxy(child);
+		BeanContextChild result = MockBeanContextSupport
+				.publicGetChildBeanContextChild(proxy);
+		assertSame(child, result);
+	}
+
+	public void testGetChildBeanContextChild_Neither() {
+		Integer child = new Integer(129);
+		BeanContextChild result = MockBeanContextSupport
+				.publicGetChildBeanContextChild(child);
+		assertNull(result);
+	}
+
+	public void testGetChildBeanContextChild_Both() {
+		try {
+			MockBeanContextSupport
+					.publicGetChildBeanContextChild(new BadChild());
+			fail();
+		} catch (IllegalArgumentException e) {
+			// expected
+		}
+	}
+
+	public void testGetChildBeanContextMembershipListener_NullParam() {
+		BeanContextMembershipListener result = MockBeanContextSupport
+				.publicGetChildBeanContextMembershipListener(null);
+		assertNull(result);
+	}
+
+	public void testGetChildBeanContextMembershipListener() {
+		MockBeanContextMembershipListener child = new MockBeanContextMembershipListener();
+		BeanContextMembershipListener result = MockBeanContextSupport
+				.publicGetChildBeanContextMembershipListener(child);
+		assertSame(child, result);
+	}
+
+	public void testGetChildBeanContextMembershipListener_WrongClass() {
+		BeanContextMembershipListener result = MockBeanContextSupport
+				.publicGetChildBeanContextMembershipListener(new Integer(129));
+		assertNull(result);
+	}
+
+	public void testGetChildPropertyChangeListener_NullParam() {
+		PropertyChangeListener result = MockBeanContextSupport
+				.publicGetChildPropertyChangeListener(null);
+		assertNull(result);
+	}
+
+	public void testGetChildPropertyChangeListener() {
+		MockBeanContextSupport child = new MockBeanContextSupport();
+		PropertyChangeListener result = MockBeanContextSupport
+				.publicGetChildPropertyChangeListener(child);
+		assertSame(child, result);
+	}
+
+	public void testGetChildPropertyChangeListener_WrongClass() {
+		PropertyChangeListener result = MockBeanContextSupport
+				.publicGetChildPropertyChangeListener(new Integer(129));
+		assertNull(result);
+	}
+
+	public void testGetChildSerializable_NullParam() {
+		Serializable result = MockBeanContextSupport
+				.publicGetChildSerializable(null);
+		assertNull(result);
+	}
+
+	public void testGetChildSerializable() {
+		MockBeanContextSupport child = new MockBeanContextSupport();
+		Serializable result = MockBeanContextSupport
+				.publicGetChildSerializable(child);
+		assertSame(child, result);
+	}
+
+	public void testGetChildSerializable_WrongClass() {
+		Serializable result = MockBeanContextSupport
+				.publicGetChildSerializable(new BadChild());
+		assertNull(result);
+	}
+
+	public void testGetChildVetoableChangeListener_NullParam() {
+		VetoableChangeListener result = MockBeanContextSupport
+				.publicGetChildVetoableChangeListener(null);
+		assertNull(result);
+	}
+
+	public void testGetChildVetoableChangeListener() {
+		MockBeanContextSupport child = new MockBeanContextSupport();
+		VetoableChangeListener result = MockBeanContextSupport
+				.publicGetChildVetoableChangeListener(child);
+		assertSame(child, result);
+	}
+
+	public void testGetChildVetoableChangeListener_WrongClass() {
+		VetoableChangeListener result = MockBeanContextSupport
+				.publicGetChildVetoableChangeListener(new Integer(129));
+		assertNull(result);
+	}
+
+	public void testGetChildVisibility_NullParam() {
+		Visibility result = MockBeanContextSupport
+				.publicGetChildVisibility(null);
+		assertNull(result);
+	}
+
+	public void testGetChildVisibility() {
+		MockBeanContextSupport child = new MockBeanContextSupport();
+		Visibility result = MockBeanContextSupport
+				.publicGetChildVisibility(child);
+		assertSame(child, result);
+	}
+
+	public void testGetChildVisibility_WrongClass() {
+		Visibility result = MockBeanContextSupport
+				.publicGetChildVisibility(new Integer(129));
+		assertNull(result);
+	}
+
+	public void testGetLocale() throws PropertyVetoException {
+		BeanContext ctx = new MockBeanContext();
+		MockBeanContextSupport support = new MockBeanContextSupport(ctx,
+				Locale.CANADA_FRENCH);
+
+		assertSame(Locale.CANADA_FRENCH, support.getLocale());
+
+		support.setLocale(Locale.CHINA);
+		assertSame(Locale.CHINA, support.getLocale());
+	}
+
+	public void testGetResource_NullParam() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextChild child = new MockBeanContextChild();
+		support.add(child);
+
+		try {
+			support.getResource(null, child);
+			fail();
+		} catch (NullPointerException e) {
+			// expected
+		}
+
+		try {
+			support.getResource("", null);
+			fail();
+		} catch (NullPointerException e) {
+			// expected
+		}
+	}
+
+	public void testGetResource_NonChild() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextChild child = new MockBeanContextChild();
+
+		try {
+			URL url = support.getResource("", child);
+			fail();
+		} catch (IllegalArgumentException e) {
+			// expected
+		}
+	}
+
+	public void testGetResource_NotExist() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextChild child = new MockBeanContextChild();
+		support.add(child);
+
+		URL url = support.getResource(
+				"tests/api/java/beans/beancontext/mock/nonexist", child);
+		assertNull(url);
+	}
+
+	public void testGetResource() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextChild child = new MockBeanContextChild();
+		support.add(child);
+
+		final String RESOURCE_NAME = "tests/api/java/beans/beancontext/mock/mockdata.txt";
+		URL url = support.getResource(RESOURCE_NAME, child);
+		assertTrue(url.toString().endsWith(RESOURCE_NAME));
+	}
+
+	public void testGetResourceAsStream_NullParam() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextChild child = new MockBeanContextChild();
+		support.add(child);
+
+		try {
+			support.getResourceAsStream(null, child);
+			fail();
+		} catch (NullPointerException e) {
+			// expected
+		}
+
+		try {
+			support.getResourceAsStream("", null);
+			fail();
+		} catch (NullPointerException e) {
+			// expected
+		}
+	}
+
+	public void testGetResourceAsStream_NonChild() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextChild child = new MockBeanContextChild();
+
+		try {
+			InputStream ins = support.getResourceAsStream("", child);
+			fail();
+		} catch (IllegalArgumentException e) {
+			// expected
+		}
+	}
+
+	public void testGetResourceAsStream_NotExist() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextChild child = new MockBeanContextChild();
+		support.add(child);
+
+		InputStream ins = support.getResourceAsStream(
+				"tests/api/java/beans/beancontext/mock/nonexist", child);
+		assertNull(ins);
+	}
+
+	public void testGetResourceAsStream() throws IOException {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextChild child = new MockBeanContextChild();
+		support.add(child);
+
+		final String RESOURCE_NAME = "tests/api/java/beans/beancontext/mock/mockdata.txt";
+		InputStream ins = support.getResourceAsStream(RESOURCE_NAME, child);
+		assertEquals("mockdata", new BufferedReader(new InputStreamReader(ins))
+				.readLine());
+		ins.close();
+	}
+
+	public void testInitialize() {
+		// covered by other testcases
+	}
+
+	public void testInstantiateChild_NullParam() throws IOException,
+			ClassNotFoundException {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+
+		try {
+			support.instantiateChild(null);
+			fail();
+		} catch (NullPointerException e) {
+			// expected
+		}
+	}
+
+	public void testInstantiateChild() throws IOException,
+			ClassNotFoundException {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+
+		MockBeanContextChild child = (MockBeanContextChild) support
+				.instantiateChild("tests.api.java.beans.beancontext.mock.MockBeanContextChild");
+		assertTrue(support.contains(child));
+		assertEquals(1, support.size());
+	}
+
+	public void testIsDesignTime() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+
+		assertFalse(support.isDesignTime());
+
+		support.setDesignTime(true);
+		assertTrue(support.isDesignTime());
+	}
+
+	public void testIsEmpty() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+
+		assertTrue(support.isEmpty());
+
+		support.add("a child");
+		assertFalse(support.isEmpty());
+	}
+
+	public void testIsSerializing() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		assertFalse(support.isSerializing());
+	}
+
+	public void testIterator() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		support.add("string value");
+		support.add(new Integer(129));
+		support.add(Locale.CHINESE);
+
+		Iterator iter = support.iterator();
+		for (int i = 0; i < 3; i++) {
+			assertTrue(support.contains(iter.next()));
+			iter.remove();
+		}
+		assertFalse(iter.hasNext());
+		assertEquals(3, support.size());
+	}
+
+	public void testNeedsGui_NoVisibleChild() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		assertFalse(support.needsGui());
+
+		support.add("a child");
+		assertFalse(support.needsGui());
+
+		support.add(new MockBeanContextChild());
+		assertFalse(support.needsGui());
+	}
+
+	public void testNeedsGui_ComponentChild() {
+		/*
+		 * MockBeanContextSupport support = new MockBeanContextSupport();
+		 * assertFalse(support.needsGui());
+		 * 
+		 * Component child = new Component() {/* mock
+		 */
+		// };
+		/*
+		 * support.add(child); assertTrue(support.needsGui());
+		 */
+	}
+
+	public void testNeedsGui_ContainerChild() {
+		// MockBeanContextSupport support = new MockBeanContextSupport();
+		// assertFalse(support.needsGui());
+		//
+		// Container child = new Container() {/* mock */
+		// };
+		// support.add(child);
+		// assertTrue(support.needsGui());
+	}
+
+	public void testNeedsGui_VisibilityChild() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		assertFalse(support.needsGui());
+
+		Visibility child = new MockVisibility(false, true);
+		support.add(child);
+		assertTrue(support.needsGui());
+	}
+
+	public void testNeedsGui_VisiblePeer() {
+		// MockBeanContextSupport peer = new MockBeanContextSupport();
+		// peer.add(new Container() {/* mock */
+		// });
+		// MockBeanContextSupport support = new MockBeanContextSupport(peer);
+		//
+		// assertTrue(support.needsGui());
+	}
+
+	public void testOkToUseGui() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+
+		assertTrue(support.isOkToUseGui());
+		assertFalse(support.avoidingGui());
+		assertFalse(support.needsGui());
+
+		support.dontUseGui();
+		assertFalse(support.isOkToUseGui());
+		// assertFalse(support.avoidingGui());
+		assertFalse(support.needsGui());
+
+		support.okToUseGui();
+		assertTrue(support.isOkToUseGui());
+		assertFalse(support.avoidingGui());
+		assertFalse(support.needsGui());
+	}
+
+	public void testPropertyChange() throws PropertyVetoException {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockPropertyChangeListener l1 = new MockPropertyChangeListener();
+		support.addPropertyChangeListener("locale", l1);
+		support.records.assertRecord("initialize", null);
+
+		support.setLocale(Locale.ITALY);
+		support.records.assertEndOfRecords();
+		assertSame(support, l1.lastEvent.getSource());
+		assertSame(Locale.getDefault(), l1.lastEvent.getOldValue());
+		assertSame(Locale.ITALY, l1.lastEvent.getNewValue());
+
+		support.addPropertyChangeListener("locale", support);
+		support.setLocale(Locale.CANADA);
+		PropertyChangeEvent evt = (PropertyChangeEvent) support.records
+				.getArg(0);
+		assertSame(support, evt.getSource());
+		assertSame(Locale.ITALY, l1.lastEvent.getOldValue());
+		assertSame(Locale.CANADA, l1.lastEvent.getNewValue());
+		support.records.assertRecord("propertyChange", evt, null);
+		support.records.assertEndOfRecords();
+	}
+
+	public void testReadChildren() throws PropertyVetoException, IOException,
+			ClassNotFoundException {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		support.setLocale(Locale.ITALY);
+		support.add("string value");
+		support.add(new Integer(129));
+		support.add(Locale.CHINESE);
+
+		byte data[] = null;
+		ByteArrayOutputStream bout = new ByteArrayOutputStream();
+		ObjectOutputStream oout = new ObjectOutputStream(bout);
+		support.writeChildren(oout);
+		oout.close();
+		data = bout.toByteArray();
+		support.records.clear();
+
+		ByteArrayInputStream bin = new ByteArrayInputStream(data);
+		ObjectInputStream oin = new ObjectInputStream(bin);
+		support.readChildren(oin);
+		oin.close();
+
+		Iterator it = support.iterator();
+		while (it.hasNext()) {
+			Object expectedChild = it.next();
+			support.records.assertRecord("childDeserializedHook",
+					expectedChild, MethodInvocationRecords.IGNORE, null);
+		}
+		assertEquals(3, support.size());
+		support.records.assertEndOfRecords();
+	}
+
+	public void testRemoveAll() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		support.records.assertRecord("initialize", null);
+		try {
+			support.removeAll(Collections.EMPTY_LIST);
+		} catch (UnsupportedOperationException e) {
+			// expected
+		}
+		support.records.assertEndOfRecords();
+	}
+
+	public void testRemoveBeanContextMembershipListener_NullParam() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+
+		try {
+			support.removeBeanContextMembershipListener(null);
+			fail();
+		} catch (NullPointerException e) {
+			// expected
+		}
+	}
+
+	public void testRemoveBeanContextMembershipListener() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextMembershipListener l1 = new MockBeanContextMembershipListener();
+		MockBeanContextMembershipListener l2 = new MockBeanContextMembershipListener();
+
+		support.addBeanContextMembershipListener(l1);
+		support.addBeanContextMembershipListener(l2);
+
+		l1.clearLastEvent();
+		l2.clearLastEvent();
+		Object child = new MockBeanContextChild();
+		support.add(child);
+		assertTrue(l1.lastEventAdd);
+		assertMembershipEvent(l1.lastEvent, support, null, child);
+		assertTrue(l2.lastEventAdd);
+		assertMembershipEvent(l2.lastEvent, support, null, child);
+
+		support.removeBeanContextMembershipListener(l1);
+		l1.clearLastEvent();
+		l2.clearLastEvent();
+		support.remove(child);
+		assertNull(l1.lastEvent);
+		assertTrue(l2.lastEventRemove);
+		assertMembershipEvent(l2.lastEvent, support, null, child);
+
+		support.removeBeanContextMembershipListener(l1);
+		l1.clearLastEvent();
+		l2.clearLastEvent();
+		support.remove(child);
+		assertNull(l1.lastEvent);
+		assertNull(l2.lastEvent);
+	}
+
+	/*
+	 * Class under test for boolean remove(java.lang.Object)
+	 */
+	public void testRemoveObject_NullParam() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+
+		try {
+			support.remove(null);
+			fail();
+		} catch (IllegalArgumentException e) {
+			// expected
+		}
+	}
+
+	/*
+	 * Class under test for boolean remove(java.lang.Object)
+	 */
+	public void testRemoveObject_NonBCC() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextMembershipListener l1 = new MockBeanContextMembershipListener();
+		support.addBeanContextMembershipListener(l1);
+		Integer child = new Integer(1000);
+		support.add(child);
+		support.records.assertRecord("initialize", null);
+		support.records.assertRecord("validatePendingAdd", child, Boolean.TRUE);
+		support.records.assertRecord("createBCSChild", child, null, support
+				.children().get(child));
+		support.records.assertRecord("childJustAddedHook", child, support
+				.children().get(child), null);
+		support.records.assertEndOfRecords();
+		assertTrue(l1.lastEventAdd);
+		assertMembershipEvent(l1.lastEvent, support, null, child);
+		support.records.clear();
+		l1.clearLastEvent();
+
+		Object bcsChild = support.children().get(child);
+		support.remove(child);
+		support.records.assertRecord("validatePendingRemove", child,
+				Boolean.TRUE);
+		support.records.assertRecord("childJustRemovedHook", child, bcsChild,
+				null);
+		support.records.assertEndOfRecords();
+		assertTrue(l1.lastEventRemove);
+		assertMembershipEvent(l1.lastEvent, support, null, child);
+
+		assertEquals(0, support.size());
+	}
+
+	/*
+	 * Class under test for boolean remove(java.lang.Object)
+	 */
+	public void testRemoveObject_BCC() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextMembershipListener l1 = new MockBeanContextMembershipListener();
+		support.addBeanContextMembershipListener(l1);
+
+		BeanContextChild child = new MockBeanContextChild();
+		support.add(child);
+		support.records.assertRecord("initialize", null);
+		support.records.assertRecord("validatePendingAdd", child, Boolean.TRUE);
+		support.records.assertRecord("createBCSChild", child, null, support
+				.children().get(child));
+		support.records.assertRecord("childJustAddedHook", child, support
+				.children().get(child), null);
+		support.records.assertEndOfRecords();
+		assertTrue(l1.lastEventAdd);
+		assertMembershipEvent(l1.lastEvent, support, null, child);
+		support.records.clear();
+		l1.clearLastEvent();
+
+		Object bcsChild = support.children().get(child);
+		support.remove(child);
+		support.records.assertRecord("validatePendingRemove", child,
+				Boolean.TRUE);
+		support.records.assertRecord("childJustRemovedHook", child, bcsChild,
+				null);
+		support.records.assertEndOfRecords();
+		assertTrue(l1.lastEventRemove);
+		assertMembershipEvent(l1.lastEvent, support, null, child);
+
+		assertNull(child.getBeanContext());
+		assertEquals(0, support.size());
+	}
+
+	/*
+	 * Class under test for boolean remove(java.lang.Object)
+	 */
+	public void testRemoveObject_BCP() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextMembershipListener l1 = new MockBeanContextMembershipListener();
+		support.addBeanContextMembershipListener(l1);
+
+		BeanContextChild childPeer = new MockBeanContextChild();
+		BeanContextProxy child = new MockBeanContextProxy(childPeer);
+		support.add(child);
+		support.records.assertRecord("initialize", null);
+		support.records.assertRecord("validatePendingAdd", child, Boolean.TRUE);
+		support.records.assertRecord("createBCSChild", child, childPeer,
+				support.children().get(child));
+		support.records.assertRecord("createBCSChild", childPeer, child,
+				support.children().get(childPeer));
+		support.records.assertRecord("childJustAddedHook", child, support
+				.children().get(child), null);
+		support.records.assertRecord("childJustAddedHook", childPeer, support
+				.children().get(childPeer), null);
+		support.records.assertEndOfRecords();
+		assertTrue(l1.lastEventAdd);
+		assertMembershipEvent(l1.lastEvent, support, null, Arrays
+				.asList(new Object[] { child, childPeer }));
+		support.records.clear();
+		l1.clearLastEvent();
+
+		Object bcsChild = support.children().get(child);
+		Object bcsChildPeer = support.children().get(childPeer);
+		support.remove(child);
+		support.records.assertRecord("validatePendingRemove", child,
+				Boolean.TRUE);
+		support.records.assertRecord("childJustRemovedHook", child, bcsChild,
+				null);
+		support.records.assertRecord("childJustRemovedHook", childPeer,
+				bcsChildPeer, null);
+		support.records.assertEndOfRecords();
+		assertTrue(l1.lastEventRemove);
+		assertMembershipEvent(l1.lastEvent, support, null, Arrays
+				.asList(new Object[] { child, childPeer }));
+
+		assertNull(childPeer.getBeanContext());
+		assertEquals(0, support.size());
+	}
+
+	/*
+	 * Class under test for boolean remove(java.lang.Object)
+	 */
+	public void testRemoveObject_BCP2() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextMembershipListener l1 = new MockBeanContextMembershipListener();
+		support.addBeanContextMembershipListener(l1);
+
+		BeanContextChild childPeer = new MockBeanContextChild();
+		BeanContextProxy child = new MockBeanContextProxy(childPeer);
+		support.add(child);
+		support.records.assertRecord("initialize", null);
+		support.records.assertRecord("validatePendingAdd", child, Boolean.TRUE);
+		support.records.assertRecord("createBCSChild", child, childPeer,
+				support.children().get(child));
+		support.records.assertRecord("createBCSChild", childPeer, child,
+				support.children().get(childPeer));
+		support.records.assertRecord("childJustAddedHook", child, support
+				.children().get(child), null);
+		support.records.assertRecord("childJustAddedHook", childPeer, support
+				.children().get(childPeer), null);
+		support.records.assertEndOfRecords();
+		assertTrue(l1.lastEventAdd);
+		assertMembershipEvent(l1.lastEvent, support, null, Arrays
+				.asList(new Object[] { child, childPeer }));
+		support.records.clear();
+		l1.clearLastEvent();
+
+		Object bcsChild = support.children().get(child);
+		Object bcsChildPeer = support.children().get(childPeer);
+		support.remove(childPeer);
+		support.records.assertRecord("validatePendingRemove", childPeer,
+				Boolean.TRUE);
+		support.records.assertRecord("childJustRemovedHook", childPeer,
+				bcsChildPeer, null);
+		support.records.assertRecord("childJustRemovedHook", child, bcsChild,
+				null);
+		support.records.assertEndOfRecords();
+		assertTrue(l1.lastEventRemove);
+		assertMembershipEvent(l1.lastEvent, support, null, Arrays
+				.asList(new Object[] { child, childPeer }));
+
+		assertNull(childPeer.getBeanContext());
+		assertEquals(0, support.size());
+	}
+
+	/*
+	 * Class under test for boolean remove(java.lang.Object)
+	 */
+	public void testRemoveObject_NonExist() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextMembershipListener l1 = new MockBeanContextMembershipListener();
+		support.addBeanContextMembershipListener(l1);
+
+		support.remove(new MockBeanContextChild());
+		support.records.assertRecord("initialize", null);
+		support.records.assertEndOfRecords();
+		assertNull(l1.lastEvent);
+
+		assertEquals(0, support.size());
+	}
+
+	/*
+	 * Class under test for boolean remove(java.lang.Object)
+	 */
+	public void testRemoveObject_Veto() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextMembershipListener l1 = new MockBeanContextMembershipListener();
+		support.addBeanContextMembershipListener(l1);
+
+		BeanContextChild child = new MockBeanContextChild();
+		support.add(child);
+		support.records.assertRecord("initialize", null);
+		support.records.assertRecord("validatePendingAdd", child, Boolean.TRUE);
+		support.records.assertRecord("createBCSChild", child, null, support
+				.children().get(child));
+		support.records.assertRecord("childJustAddedHook", child, support
+				.children().get(child), null);
+		support.records.assertEndOfRecords();
+		assertTrue(l1.lastEventAdd);
+		assertMembershipEvent(l1.lastEvent, support, null, child);
+		support.records.clear();
+		l1.clearLastEvent();
+
+		Object bcsChild = support.children().get(child);
+		support.vetoAddRemove = true;
+		try {
+			support.remove(child);
+			fail();
+		} catch (IllegalStateException e) {
+			// expected
+		}
+		support.records.assertRecord("validatePendingRemove", child,
+				Boolean.FALSE);
+		support.records.assertEndOfRecords();
+		assertNull(l1.lastEvent);
+
+		assertSame(support, child.getBeanContext());
+		assertEquals(1, support.size());
+	}
+
+	/*
+	 * Class under test for boolean remove(java.lang.Object, boolean)
+	 */
+	public void testRemoveObjectboolean() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockBeanContextMembershipListener l1 = new MockBeanContextMembershipListener();
+		support.addBeanContextMembershipListener(l1);
+
+		BeanContextChild child = new MockBeanContextChild();
+		support.add(child);
+		support.records.assertRecord("initialize", null);
+		support.records.assertRecord("validatePendingAdd", child, Boolean.TRUE);
+		support.records.assertRecord("createBCSChild", child, null, support
+				.children().get(child));
+		support.records.assertRecord("childJustAddedHook", child, support
+				.children().get(child), null);
+		support.records.assertEndOfRecords();
+		assertTrue(l1.lastEventAdd);
+		assertMembershipEvent(l1.lastEvent, support, null, child);
+		support.records.clear();
+		l1.clearLastEvent();
+
+		Object bcsChild = support.children().get(child);
+		support.publicRemove(child, false); // don't call child's setBeanContext
+		support.records.assertRecord("validatePendingRemove", child,
+				Boolean.TRUE);
+		support.records.assertRecord("childJustRemovedHook", child, bcsChild,
+				null);
+		support.records.assertEndOfRecords();
+		assertTrue(l1.lastEventRemove);
+		assertMembershipEvent(l1.lastEvent, support, null, child);
+
+		assertSame(support, child.getBeanContext());
+		assertEquals(0, support.size());
+	}
+
+	public void testRetainAll() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		try {
+			support.retainAll(Collections.EMPTY_LIST);
+			fail();
+		} catch (UnsupportedOperationException e) {
+			// expected
+		}
+	}
+
+	public void testSerialize() {
+		// covered by testBcsPreSerializationHook
+	}
+
+	public void testSetDesignTime() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockPropertyChangeListener l1 = new MockPropertyChangeListener();
+		MockVetoableChangeListener l2 = new MockVetoableChangeListener();
+		support.addPropertyChangeListener("designTime", l1);
+		support.addVetoableChangeListener("designTime", l2);
+		assertFalse(support.isDesignTime());
+		support.records.assertRecord("initialize", null);
+		support.records.assertEndOfRecords();
+
+		support.setDesignTime(true);
+		support.records.assertEndOfRecords();
+		assertNull(l1.lastEvent);
+		assertNull(l2.lastEvent);
+	}
+
+	public void testSetLocale_NullParam() throws PropertyVetoException {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		support.setLocale(Locale.ITALY);
+		assertSame(Locale.ITALY, support.getLocale());
+		support.records.assertRecord("initialize", null);
+		support.records.assertEndOfRecords();
+
+		support.setLocale(null);
+		assertSame(Locale.ITALY, support.getLocale());
+		support.records.assertEndOfRecords();
+	}
+
+	public void testSetLocale() throws PropertyVetoException {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockPropertyChangeListener l1 = new MockPropertyChangeListener();
+		MockVetoableChangeListener l2 = new MockVetoableChangeListener();
+		support.addPropertyChangeListener("locale", l1);
+		support.addVetoableChangeListener("locale", l2);
+		assertSame(Locale.getDefault(), support.getLocale());
+		support.records.assertRecord("initialize", null);
+		support.records.assertEndOfRecords();
+
+		support.setLocale(Locale.ITALY);
+		assertSame(Locale.ITALY, support.getLocale());
+		support.records.assertEndOfRecords();
+		assertSame(support, l1.lastEvent.getSource());
+		assertEquals("locale", l1.lastEvent.getPropertyName());
+		assertEquals(Locale.getDefault(), l1.lastEvent.getOldValue());
+		assertEquals(Locale.ITALY, l1.lastEvent.getNewValue());
+		assertSame(support, l2.lastEvent.getSource());
+		assertEquals("locale", l2.lastEvent.getPropertyName());
+		assertEquals(Locale.getDefault(), l2.lastEvent.getOldValue());
+		assertEquals(Locale.ITALY, l2.lastEvent.getNewValue());
+	}
+
+	public void testSetLocale_Veto() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockPropertyChangeListener l1 = new MockPropertyChangeListener();
+		MockVetoChangeListener l2 = new MockVetoChangeListener();
+		support.addPropertyChangeListener("locale", l1);
+		support.addVetoableChangeListener("locale", l2);
+		assertSame(Locale.getDefault(), support.getLocale());
+		support.records.assertRecord("initialize", null);
+		support.records.assertEndOfRecords();
+
+		try {
+			support.setLocale(Locale.ITALY);
+			fail();
+		} catch (PropertyVetoException e) {
+			// expected
+		}
+		assertSame(Locale.getDefault(), support.getLocale());
+		support.records.assertEndOfRecords();
+		assertNull(l1.lastEvent);
+		assertSame(support, l2.lastEvent.getSource());
+		assertEquals("locale", l2.lastEvent.getPropertyName());
+		assertEquals(Locale.getDefault(), l2.lastEvent.getNewValue());
+		assertEquals(Locale.ITALY, l2.lastEvent.getOldValue());
+	}
+
+	public void testSize() {
+		// covered by other testcases
+	}
+
+	/*
+	 * Class under test for java.lang.Object[] toArray()
+	 */
+	public void testToArray() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+
+		Object[] array = support.toArray();
+		assertEquals(0, array.length);
+
+		support.add(new Integer(1000));
+		support.add("a child");
+		support.add(new MockBeanContextChild());
+		array = support.toArray();
+		assertEquals(3, array.length);
+		int count = 0;
+		for (int i = 0; i < array.length; i++) {
+			if (array[i] instanceof Integer) {
+				assertEquals(new Integer(1000), array[i]);
+				count += 1;
+			}
+			if (array[i] instanceof String) {
+				assertEquals("a child", array[i]);
+				count += 2;
+			}
+			if (array[i] instanceof MockBeanContextChild) {
+				count += 4;
+			}
+		}
+		assertEquals(7, count);
+	}
+
+	/*
+	 * Class under test for java.lang.Object[] toArray(java.lang.Object[])
+	 */
+	public void testToArrayObjectArray_NullParam() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		try {
+			support.toArray(null);
+			fail();
+		} catch (NullPointerException e) {
+			// expected
+		}
+	}
+
+	/*
+	 * Class under test for java.lang.Object[] toArray(java.lang.Object[])
+	 */
+	public void testToArrayObjectArray_WrongType() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		support.add("a");
+		support.add("b");
+		support.add("c");
+		try {
+			support.toArray(new Integer[0]);
+			fail();
+		} catch (ArrayStoreException e) {
+			// expected
+		}
+	}
+
+	/*
+	 * Class under test for java.lang.Object[] toArray(java.lang.Object[])
+	 */
+	public void testToArrayObjectArray_LesserLength() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		support.add("a");
+		support.add("b");
+		support.add("c");
+		String in[] = new String[] { "1" };
+		String out[] = (String[]) support.toArray(in);
+		assertNotSame(in, out);
+		List expected = Arrays.asList(new String[] { "a", "b", "c" });
+		assertEquals(expected.size(), out.length);
+		for (int i = 0; i < out.length; i++) {
+			assertTrue(expected.contains(out[i]));
+		}
+	}
+
+	/*
+	 * Class under test for java.lang.Object[] toArray(java.lang.Object[])
+	 */
+	public void testToArrayObjectArray_RightLength() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		support.add("a");
+		support.add("b");
+		support.add("c");
+		String in[] = new String[3];
+		String out[] = (String[]) support.toArray(in);
+		assertSame(in, out);
+		List expected = Arrays.asList(new String[] { "a", "b", "c" });
+		assertEquals(expected.size(), out.length);
+		for (int i = 0; i < out.length; i++) {
+			assertTrue(expected.contains(out[i]));
+		}
+	}
+
+	/*
+	 * Class under test for java.lang.Object[] toArray(java.lang.Object[])
+	 */
+	public void testToArrayObjectArray_GreaterLength() {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		support.add("a");
+		support.add("b");
+		support.add("c");
+		String in[] = new String[5];
+		String out[] = (String[]) support.toArray(in);
+		assertSame(in, out);
+		List expected = Arrays.asList(new String[] { "a", "b", "c" });
+		for (int i = 0; i < expected.size(); i++) {
+			assertTrue(expected.contains(out[i]));
+		}
+		assertNull(out[3]);
+		assertNull(out[4]);
+	}
+
+	public void testValidatePendingAdd() {
+		// coverd by testAdd
+	}
+
+	public void testValidatePendingRemove() {
+		// coverd by testRemove
+	}
+
+	public void testVetoableChange() throws PropertyVetoException {
+		MockBeanContextSupport support = new MockBeanContextSupport();
+		MockVetoableChangeListener l1 = new MockVetoableChangeListener();
+		support.addVetoableChangeListener("locale", l1);
+		support.records.assertRecord("initialize", null);
+
+		support.setLocale(Locale.ITALY);
+		support.records.assertEndOfRecords();
+		assertSame(support, l1.lastEvent.getSource());
+		assertSame(Locale.getDefault(), l1.lastEvent.getOldValue());
+		assertSame(Locale.ITALY, l1.lastEvent.getNewValue());
+
+		support.addVetoableChangeListener("locale", support);
+		support.setLocale(Locale.CANADA);
+		PropertyChangeEvent evt = (PropertyChangeEvent) support.records
+				.getArg(0);
+		assertSame(support, evt.getSource());
+		assertEquals("locale", evt.getPropertyName());
+		assertSame(Locale.ITALY, l1.lastEvent.getOldValue());
+		assertSame(Locale.CANADA, l1.lastEvent.getNewValue());
+		support.records.assertRecord("vetoableChange", evt, null);
+		support.records.assertEndOfRecords();
+	}
+
+	public void testWriteChildren() {
+		// covered by testReadChildren()
+	}
+
+	public void testSerialization_NoPeer() throws IOException,
+			ClassNotFoundException {
+		BeanContextSupport support = new BeanContextSupport(null, Locale.ITALY,
+				true, true);
+		support
+				.addBeanContextMembershipListener(new MockBeanContextMembershipListener());
+		support
+				.addBeanContextMembershipListener(new MockBeanContextMembershipListenerS(
+						"l2"));
+		support
+				.addBeanContextMembershipListener(new MockBeanContextMembershipListenerS(
+						"l3"));
+		support
+				.addBeanContextMembershipListener(new MockBeanContextMembershipListener());
+		support.add("abcd");
+		support.add(new MockBeanContextChild());
+		support.add(new MockBeanContextChildS("a child"));
+		support.add(new MockBeanContextChild());
+		support.add("1234");
+		support.add(new MockBeanContextProxyS("proxy",
+				new MockBeanContextChildS("b child")));
+
+		assertEqualsSerially(support, (BeanContextSupport) SerializationTester
+				.getDeserilizedObject(support));
+	}
+
+	public void testSerialization_Peer() throws IOException,
+			ClassNotFoundException {
+		MockBeanContextDelegateS mock = new MockBeanContextDelegateS("main id");
+		BeanContextSupport support = mock.support;
+		support
+				.addBeanContextMembershipListener(new MockBeanContextMembershipListener());
+		support
+				.addBeanContextMembershipListener(new MockBeanContextMembershipListenerS(
+						"l2"));
+		support
+				.addBeanContextMembershipListener(new MockBeanContextMembershipListenerS(
+						"l3"));
+		support
+				.addBeanContextMembershipListener(new MockBeanContextMembershipListener());
+		support.add("abcd");
+		support.add(new MockBeanContextChild());
+		support.add(new MockBeanContextChildS("a child"));
+		support.add(new MockBeanContextChild());
+		support.add("1234");
+		support.add(new MockBeanContextProxyS("proxy",
+				new MockBeanContextChildS("b child")));
+
+		MockBeanContextDelegateS serMock = (MockBeanContextDelegateS) SerializationTester
+				.getDeserilizedObject(mock);
+		assertEquals(mock.id, serMock.id);
+		assertSame(mock, mock.support.beanContextChildPeer);
+		assertSame(serMock, serMock.support.beanContextChildPeer);
+		assertEqualsSerially(mock.support, serMock.support);
+	}
+
+	public void testSerialization_Compatibility() throws Exception {
+		MockBeanContextDelegateS mock = new MockBeanContextDelegateS("main id");
+		BeanContextSupport support = mock.support;
+		support
+				.addBeanContextMembershipListener(new MockBeanContextMembershipListener());
+		support
+				.addBeanContextMembershipListener(new MockBeanContextMembershipListenerS(
+						"l2"));
+		support
+				.addBeanContextMembershipListener(new MockBeanContextMembershipListenerS(
+						"l3"));
+		support
+				.addBeanContextMembershipListener(new MockBeanContextMembershipListener());
+		support.add("abcd");
+		support.add(new MockBeanContextChild());
+		support.add(new MockBeanContextChildS("a child"));
+		support.add(new MockBeanContextChild());
+		support.add("1234");
+
+		MockBeanContextDelegateS serMock = (MockBeanContextDelegateS) SerializationTester
+				.readObject(mock,
+						"tests/api/java/beans/beancontext/BeanContextSupport.ser");
+		assertEquals(mock.id, serMock.id);
+		assertSame(mock, mock.support.beanContextChildPeer);
+		assertSame(serMock, serMock.support.beanContextChildPeer);
+		assertEqualsSerially(mock.support, serMock.support);
+	}
+
+	private byte[] serialize(Serializable obj) {
+		try {
+			ByteArrayOutputStream bout = new ByteArrayOutputStream();
+			ObjectOutputStream oout = new ObjectOutputStream(bout);
+			oout.writeObject(obj);
+			oout.close();
+			return bout.toByteArray();
+		} catch (IOException e) {
+			e.printStackTrace();
+			throw new RuntimeException();
+		}
+	}
+
+	private Object deserialize(byte[] bytes) {
+		try {
+			ByteArrayInputStream bin = new ByteArrayInputStream(bytes);
+			ObjectInputStream oin = new ObjectInputStream(bin);
+			Object result = oin.readObject();
+			oin.close();
+			return result;
+		} catch (Exception e) {
+			e.printStackTrace();
+			throw new RuntimeException();
+		}
+	}
+
+	private void assertMembershipEvent(BeanContextMembershipEvent evt,
+			BeanContext ctx, BeanContext pFrom, Object changes) {
+		assertSame(ctx, evt.getSource());
+		assertSame(ctx, evt.getBeanContext());
+		assertSame(pFrom, evt.getPropagatedFrom());
+		if (changes instanceof Collection) {
+			Collection changeCollection = (Collection) changes;
+			assertEquals(changeCollection.size(), evt.size());
+			for (Iterator iter = changeCollection.iterator(); iter.hasNext();) {
+				assertTrue(evt.contains(iter.next()));
+			}
+		} else {
+			assertEquals(1, evt.size());
+			assertTrue(evt.contains(changes));
+		}
+	}
+
+	public static void assertEqualsSerially(BeanContextSupport orig,
+			BeanContextSupport ser) {
+
+		// check bcmListeners
+		ArrayList origBcmListeners = (ArrayList) Utils.getField(orig,
+				"bcmListeners");
+		ArrayList serBcmListeners = (ArrayList) Utils.getField(ser,
+				"bcmListeners");
+		int i = 0, j = 0;
+		while (i < origBcmListeners.size()) {
+			Object l1 = origBcmListeners.get(i);
+			if (l1 instanceof Serializable) {
+				Object l2 = serBcmListeners.get(j);
+				assertSame(l1.getClass(), l2.getClass());
+				if (l1 instanceof MockBeanContextMembershipListenerS) {
+					assertEquals(((MockBeanContextMembershipListenerS) l1).id,
+							((MockBeanContextMembershipListenerS) l2).id);
+				}
+				j++;
+			}
+			i++;
+		}
+		assertEquals(j, serBcmListeners.size());
+
+		// check children
+		HashMap origChildren = (HashMap) Utils.getField(orig, "children");
+		HashMap serChildren = (HashMap) Utils.getField(ser, "children");
+		int count = 0;
+		for (Iterator iter = origChildren.keySet().iterator(); iter.hasNext();) {
+			Object child = iter.next();
+			if (child instanceof Serializable) {
+				if (child instanceof String) {
+					assertTrue(serChildren.containsKey(child));
+				}
+				if (child instanceof MockBeanContextChildS) {
+					assertTrue(serChildren.containsKey(child));
+					MockBeanContextChildS serChild = (MockBeanContextChildS) Utils
+							.getField(serChildren.get(child), "child");
+					assertSame(ser.getBeanContextPeer(), serChild
+							.getBeanContext());
+				}
+				if (child instanceof MockBeanContextProxyS) {
+					assertTrue(serChildren.containsKey(child));
+				}
+				count++;
+			}
+		}
+		assertEquals(count, serChildren.size());
+
+		// check other fields
+		assertEquals(Utils.getField(orig, "locale"), Utils.getField(ser,
+				"locale"));
+		assertEquals(Utils.getField(orig, "okToUseGui"), Utils.getField(ser,
+				"okToUseGui"));
+		assertEquals(Utils.getField(orig, "designTime"), Utils.getField(ser,
+				"designTime"));
+	}
+}

Added: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/beancontext/InterfacesTest.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/beancontext/InterfacesTest.java?rev=394923&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/beancontext/InterfacesTest.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/beancontext/InterfacesTest.java Tue Apr 18 05:11:09 2006
@@ -0,0 +1,111 @@
+/* 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.beancontext;
+
+import java.beans.BeanInfo;
+import java.beans.DesignMode;
+import java.beans.Visibility;
+import java.beans.beancontext.BeanContext;
+import java.beans.beancontext.BeanContextChild;
+import java.beans.beancontext.BeanContextChildComponentProxy;
+import java.beans.beancontext.BeanContextContainerProxy;
+import java.beans.beancontext.BeanContextMembershipListener;
+import java.beans.beancontext.BeanContextProxy;
+import java.beans.beancontext.BeanContextServiceProvider;
+import java.beans.beancontext.BeanContextServiceProviderBeanInfo;
+import java.beans.beancontext.BeanContextServiceRevokedListener;
+import java.beans.beancontext.BeanContextServices;
+import java.beans.beancontext.BeanContextServicesListener;
+import java.util.Collection;
+import java.util.EventListener;
+
+import tests.api.java.beans.beancontext.mock.MockBeanContext;
+import tests.api.java.beans.beancontext.mock.MockBeanContextChild;
+import tests.api.java.beans.beancontext.mock.MockBeanContextChildComponentProxy;
+import tests.api.java.beans.beancontext.mock.MockBeanContextContainerProxy;
+import tests.api.java.beans.beancontext.mock.MockBeanContextMembershipListener;
+import tests.api.java.beans.beancontext.mock.MockBeanContextProxy;
+import tests.api.java.beans.beancontext.mock.MockBeanContextServiceProvider;
+import tests.api.java.beans.beancontext.mock.MockBeanContextServiceProviderBeanInfo;
+import tests.api.java.beans.beancontext.mock.MockBeanContextServiceRevokedListener;
+import tests.api.java.beans.beancontext.mock.MockBeanContextServices;
+import tests.api.java.beans.beancontext.mock.MockBeanContextServicesListener;
+import junit.framework.TestCase;
+
+/**
+ * Test all interfaces of package java.beans.beancontext
+ */
+public class InterfacesTest extends TestCase {
+
+	public static void main(String[] args) {
+		junit.textui.TestRunner.run(InterfacesTest.class);
+	}
+
+	public void testBeanContext() {
+		BeanContext mock = new MockBeanContext();
+		assertTrue(mock instanceof BeanContextChild);
+		assertTrue(mock instanceof Collection);
+		assertTrue(mock instanceof DesignMode);
+		assertTrue(mock instanceof Visibility);
+	}
+
+	public void testBeanContextChild() {
+		BeanContextChild mock = new MockBeanContextChild();
+	}
+
+	public void testBeanContextChildComponentProxy() {
+		BeanContextChildComponentProxy mock = new MockBeanContextChildComponentProxy();
+	}
+
+	public void testBeanContextContainerProxy() {
+		BeanContextContainerProxy mock = new MockBeanContextContainerProxy();
+	}
+
+	public void testBeanContextMembershipListener() {
+		BeanContextMembershipListener mock = new MockBeanContextMembershipListener();
+		assertTrue(mock instanceof EventListener);
+	}
+
+	public void testBeanContextProxy() {
+		BeanContextProxy mock = new MockBeanContextProxy();
+	}
+
+	public void testBeanContextServiceProvider() {
+		BeanContextServiceProvider mock = new MockBeanContextServiceProvider();
+	}
+
+	public void testBeanContextServiceProviderBeanInfo() {
+		BeanContextServiceProviderBeanInfo mock = new MockBeanContextServiceProviderBeanInfo();
+		assertTrue(mock instanceof BeanInfo);
+	}
+
+	public void testBeanContextServiceRevokedListener() {
+		BeanContextServiceRevokedListener mock = new MockBeanContextServiceRevokedListener();
+		assertTrue(mock instanceof EventListener);
+	}
+
+	public void testBeanContextServices() {
+		BeanContextServices mock = new MockBeanContextServices();
+		assertTrue(mock instanceof BeanContext);
+		assertTrue(mock instanceof BeanContextServicesListener);
+	}
+
+	public void testBeanContextServicesListener() {
+		BeanContextServicesListener mock = new MockBeanContextServicesListener();
+		assertTrue(mock instanceof BeanContextServiceRevokedListener);
+	}
+
+}

Added: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/beancontext/MethodInvocationRecords.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/beancontext/MethodInvocationRecords.java?rev=394923&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/beancontext/MethodInvocationRecords.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/beancontext/MethodInvocationRecords.java Tue Apr 18 05:11:09 2006
@@ -0,0 +1,222 @@
+/* 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.beancontext;
+
+import java.util.ArrayList;
+
+import junit.framework.Assert;
+
+/**
+ * Record method invocation input and output.
+ */
+public class MethodInvocationRecords extends Assert {
+
+	public static final Object IGNORE = "IGNORE";
+
+	private ArrayList records = new ArrayList();
+
+	private int assertIndex = 0;
+
+	public void clear() {
+		records.clear();
+		assertIndex = 0;
+	}
+
+	public void add(String methodName, Object returnValue) {
+		ArrayList rec = new ArrayList();
+		rec.add(methodName);
+		rec.add(returnValue);
+		records.add(rec);
+	}
+
+	public void add(String methodName, Object arg1, Object returnValue) {
+		ArrayList rec = new ArrayList();
+		rec.add(methodName);
+		rec.add(arg1);
+		rec.add(returnValue);
+		records.add(rec);
+	}
+
+	public void add(String methodName, Object arg1, Object arg2,
+			Object returnValue) {
+		ArrayList rec = new ArrayList();
+		rec.add(methodName);
+		rec.add(arg1);
+		rec.add(arg2);
+		rec.add(returnValue);
+		records.add(rec);
+	}
+
+	public void add(String methodName, Object arg1, Object arg2, Object arg3,
+			Object returnValue) {
+		ArrayList rec = new ArrayList();
+		rec.add(methodName);
+		rec.add(arg1);
+		rec.add(arg2);
+		rec.add(arg3);
+		rec.add(returnValue);
+		records.add(rec);
+	}
+
+	public void add(String methodName, Object arg1, Object arg2, Object arg3,
+			Object arg4, Object returnValue) {
+		ArrayList rec = new ArrayList();
+		rec.add(methodName);
+		rec.add(arg1);
+		rec.add(arg2);
+		rec.add(arg3);
+		rec.add(arg4);
+		rec.add(returnValue);
+		records.add(rec);
+	}
+
+	public void assertRecord(String methodName, Object returnValue) {
+		ArrayList rec = (ArrayList) records.get(assertIndex++);
+		int count = 0;
+		assertEquals(methodName, rec.get(count++));
+		if (returnValue != IGNORE) {
+			assertEquals(returnValue, rec.get(count++));
+		} else {
+			count++;
+		}
+		assertEquals(count, rec.size());
+	}
+
+	public void assertRecord(String methodName, Object arg1, Object returnValue) {
+		ArrayList rec = (ArrayList) records.get(assertIndex++);
+		int count = 0;
+		assertEquals(methodName, rec.get(count++));
+		if (arg1 != IGNORE) {
+			assertEquals(arg1, rec.get(count++));
+		} else {
+			count++;
+		}
+		if (returnValue != IGNORE) {
+			assertEquals(returnValue, rec.get(count++));
+		} else {
+			count++;
+		}
+		assertEquals(count, rec.size());
+	}
+
+	public void assertRecord(String methodName, Object arg1, Object arg2,
+			Object returnValue) {
+		ArrayList rec = (ArrayList) records.get(assertIndex++);
+		int count = 0;
+		assertEquals(methodName, rec.get(count++));
+		if (arg1 != IGNORE) {
+			assertEquals(arg1, rec.get(count++));
+		} else {
+			count++;
+		}
+		if (arg2 != IGNORE) {
+			assertEquals(arg2, rec.get(count++));
+		} else {
+			count++;
+		}
+		if (returnValue != IGNORE) {
+			assertEquals(returnValue, rec.get(count++));
+		} else {
+			count++;
+		}
+		assertEquals(count, rec.size());
+	}
+
+	public void assertRecord(String methodName, Object arg1, Object arg2,
+			Object arg3, Object returnValue) {
+		ArrayList rec = (ArrayList) records.get(assertIndex++);
+		int count = 0;
+		assertEquals(methodName, rec.get(count++));
+		if (arg1 != IGNORE) {
+			assertEquals(arg1, rec.get(count++));
+		} else {
+			count++;
+		}
+		if (arg2 != IGNORE) {
+			assertEquals(arg2, rec.get(count++));
+		} else {
+			count++;
+		}
+		if (arg3 != IGNORE) {
+			assertEquals(arg3, rec.get(count++));
+		} else {
+			count++;
+		}
+		if (returnValue != IGNORE) {
+			assertEquals(returnValue, rec.get(count++));
+		} else {
+			count++;
+		}
+		assertEquals(count, rec.size());
+	}
+
+	public void assertRecord(String methodName, Object arg1, Object arg2,
+			Object arg3, Object arg4, Object returnValue) {
+		ArrayList rec = (ArrayList) records.get(assertIndex++);
+		int count = 0;
+		assertEquals(methodName, rec.get(count++));
+		if (arg1 != IGNORE) {
+			assertEquals(arg1, rec.get(count++));
+		} else {
+			count++;
+		}
+		if (arg2 != IGNORE) {
+			assertEquals(arg2, rec.get(count++));
+		} else {
+			count++;
+		}
+		if (arg3 != IGNORE) {
+			assertEquals(arg3, rec.get(count++));
+		} else {
+			count++;
+		}
+		if (arg4 != IGNORE) {
+			assertEquals(arg4, rec.get(count++));
+		} else {
+			count++;
+		}
+		if (returnValue != IGNORE) {
+			assertEquals(returnValue, rec.get(count++));
+		} else {
+			count++;
+		}
+		assertEquals(count, rec.size());
+	}
+
+	public void assertEndOfRecords() {
+		assertEquals(assertIndex, records.size());
+	}
+
+	public String getMethodName() {
+		ArrayList rec = (ArrayList) records.get(assertIndex);
+		return (String) rec.get(0);
+	}
+
+	public Object getArg(int i) {
+		ArrayList rec = (ArrayList) records.get(assertIndex);
+		return rec.get(i + 1);
+	}
+
+	public Object getReturnValue(int i) {
+		ArrayList rec = (ArrayList) records.get(assertIndex);
+		return rec.get(rec.size() - 1);
+	}
+
+	public String toString() {
+		return records.toString();
+	}
+
+}

Added: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/beancontext/Utils.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/beancontext/Utils.java?rev=394923&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/beancontext/Utils.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/beancontext/Utils.java Tue Apr 18 05:11:09 2006
@@ -0,0 +1,37 @@
+/* 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.beancontext;
+
+import java.lang.reflect.Field;
+
+/**
+ * Util class
+ */
+public class Utils {
+
+    public static Object getField(Object obj, String fieldName) {
+        try {
+            Field fld = obj.getClass().getDeclaredField(fieldName);
+            fld.setAccessible(true);
+            return fld.get(obj);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("failed to get field by force");
+        }
+    }
+
+}
+