1 8 9 package org.picocontainer.gems.constraints; 10 11 import junit.framework.TestCase; 12 13 import org.picocontainer.MutablePicoContainer; 14 import org.picocontainer.Parameter; 15 import org.picocontainer.defaults.AmbiguousComponentResolutionException; 16 import org.picocontainer.defaults.ComponentParameter; 17 import org.picocontainer.defaults.DefaultPicoContainer; 18 import org.picocontainer.testmodel.AlternativeTouchable; 19 import org.picocontainer.testmodel.DecoratedTouchable; 20 import org.picocontainer.testmodel.DependsOnArray; 21 import org.picocontainer.testmodel.DependsOnList; 22 import org.picocontainer.testmodel.DependsOnTouchable; 23 import org.picocontainer.testmodel.DependsOnTwoComponents; 24 import org.picocontainer.testmodel.SimpleTouchable; 25 import org.picocontainer.testmodel.Touchable; 26 27 import java.util.ArrayList ; 28 import java.util.List ; 29 30 36 public class ConstraintIntegrationTestCase 37 extends TestCase { 38 39 MutablePicoContainer container; 40 41 protected void setUp() throws Exception { 42 super.setUp(); 43 44 container = new DefaultPicoContainer(); 45 container.registerComponentImplementation(SimpleTouchable.class); 46 container.registerComponentImplementation(DependsOnTouchable.class); 47 container.registerComponentImplementation(DependsOnTwoComponents.class); 48 container.registerComponentInstance(ArrayList .class, new ArrayList ()); 49 container.registerComponentInstance(Object [].class, new Object [0]); 50 } 51 52 53 public void testAmbiguouTouchableDependency() { 54 container.registerComponentImplementation(AlternativeTouchable.class); 55 container.registerComponentImplementation(DecoratedTouchable.class); 56 57 try { 58 container.getComponentInstance(DecoratedTouchable.class); 59 fail("AmbiguousComponentResolutionException expected"); 60 } catch (AmbiguousComponentResolutionException acre) { 61 } 63 } 64 65 public void testTouchableDependencyWithComponentKeyParameter() { 66 container.registerComponentImplementation(AlternativeTouchable.class); 67 container.registerComponentImplementation(DecoratedTouchable.class, 68 DecoratedTouchable.class, 69 new Parameter[] { new ComponentParameter(SimpleTouchable.class) }); 70 71 Touchable t = (Touchable) container.getComponentInstance(DecoratedTouchable.class); 72 assertNotNull(t); 73 } 74 75 public void testTouchableDependencyInjectedViaConstraint() { 76 container.registerComponentImplementation(AlternativeTouchable.class); 77 container.registerComponentImplementation(DecoratedTouchable.class, 78 DecoratedTouchable.class, 79 new Parameter[] { new Not(new IsType(SimpleTouchable.class)) }); 80 Touchable t = (Touchable) container.getComponentInstance(DecoratedTouchable.class); 81 assertNotNull(t); 82 } 83 84 public void testComponentDependsOnCollectionOfEverythingElse() { 85 container.registerComponentImplementation(DependsOnList.class, 86 DependsOnList.class, 87 new Parameter[] { new CollectionConstraint(Anything.ANYTHING) }); 88 DependsOnList dol = (DependsOnList) container.getComponentInstance(DependsOnList.class); 89 assertNotNull(dol); 90 List dependencies = dol.getDependencies(); 91 assertEquals(5, dependencies.size()); 92 } 93 94 public void testComponentDependsOnCollectionOfTouchables() { 95 container.registerComponentImplementation(AlternativeTouchable.class); 96 container.registerComponentImplementation(DecoratedTouchable.class, 97 DecoratedTouchable.class, 98 new Parameter[] { new Not(new IsType(SimpleTouchable.class)) }); 99 container.registerComponentImplementation(DependsOnList.class, 100 DependsOnList.class, 101 new Parameter[] { new CollectionConstraint(new IsType(Touchable.class)) }); 102 DependsOnList dol = (DependsOnList) container.getComponentInstance(DependsOnList.class); 103 assertNotNull(dol); 104 List dependencies = dol.getDependencies(); 105 assertEquals(3, dependencies.size()); 106 } 107 108 public void testComponentDependsOnCollectionOfSpecificTouchables() { 109 container.registerComponentImplementation(AlternativeTouchable.class); 110 container.registerComponentImplementation(DecoratedTouchable.class, 111 DecoratedTouchable.class, 112 new Parameter[] { new Not(new IsType(SimpleTouchable.class)) }); 113 container.registerComponentImplementation(DependsOnList.class, 114 DependsOnList.class, 115 new Parameter[] { 116 new CollectionConstraint(new Or(new IsType(AlternativeTouchable.class), 117 new IsType(DecoratedTouchable.class))) 118 }); 119 120 DependsOnList dol = (DependsOnList) container.getComponentInstance(DependsOnList.class); 121 AlternativeTouchable at = (AlternativeTouchable) container.getComponentInstance(AlternativeTouchable.class); 122 DecoratedTouchable dt = (DecoratedTouchable) container.getComponentInstance(DecoratedTouchable.class); 123 assertNotNull(dol); 124 List dependencies = dol.getDependencies(); 125 assertEquals(2, dependencies.size()); 126 assertTrue(dependencies.contains(at)); 127 assertTrue(dependencies.contains(dt)); 128 } 129 130 public void testComponentDependsOnArrayOfEverythingElse() { 131 container.registerComponentImplementation(DependsOnArray.class, 132 DependsOnArray.class, 133 new Parameter[] { new CollectionConstraint(Anything.ANYTHING) }); 134 DependsOnArray doa = (DependsOnArray) container.getComponentInstance(DependsOnArray.class); 135 assertNotNull(doa); 136 Object [] dependencies = doa.getDependencies(); 137 assertEquals(5, dependencies.length); 138 } 139 140 } 141
| Popular Tags
|