MockBeanContextSupport support = new MockBeanContextSupport();
support.waitOnChildInHooks = false;
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());
}