@Test public void testComponentAdapterRegistrationOrderIsMaintained() throws NoSuchMethodException {
ConstructorInjection.ConstructorInjector c1 = new ConstructorInjection.ConstructorInjector<Object>("1", Object.class);
ConstructorInjection.ConstructorInjector c2 = new ConstructorInjection.ConstructorInjector<String>("2", String.class);
MutablePicoContainer picoContainer = createPicoContainer(null);
picoContainer.addAdapter(c1).addAdapter(c2);
Collection<ComponentAdapter<?>> list2 = picoContainer.getComponentAdapters();
assertEquals(2, list2.size());
assertEquals(c1.getComponentKey(), ((ComponentAdapter)list2.toArray()[0]).getComponentKey());
assertEquals(c2.getComponentKey(), ((ComponentAdapter)list2.toArray()[1]).getComponentKey());
picoContainer.getComponents();
assertFalse("instances should be created in same order as adapters are created",
picoContainer.getComponents().get(0) instanceof String);
assertTrue("instances should be created in same order as adapters are created",
picoContainer.getComponents().get(1) instanceof String);
MutablePicoContainer reversedPicoContainer = createPicoContainer(null);
reversedPicoContainer.addAdapter(c2);
reversedPicoContainer.addAdapter(c1);
list2 = reversedPicoContainer.getComponentAdapters();
assertEquals(2, list2.size());
assertEquals(c2.getComponentKey(), ((ComponentAdapter)list2.toArray()[0]).getComponentKey());
assertEquals(c1.getComponentKey(), ((ComponentAdapter)list2.toArray()[1]).getComponentKey());
reversedPicoContainer.getComponents();
assertTrue("instances should be created in same order as adapters are created",
reversedPicoContainer.getComponents().get(0) instanceof String);
assertFalse("instances should be created in same order as adapters are created",
reversedPicoContainer.getComponents().get(1) instanceof String);
}