1 package org.picocontainer.doc.advanced; 2 3 import java.util.Collection ; 4 import java.util.Map ; 5 import java.util.TreeMap ; 6 7 import junit.framework.TestCase; 8 9 import org.picocontainer.ComponentAdapter; 10 import org.picocontainer.MutablePicoContainer; 11 import org.picocontainer.Parameter; 12 import org.picocontainer.defaults.CollectionComponentParameter; 13 import org.picocontainer.defaults.ComponentParameter; 14 import org.picocontainer.defaults.DefaultPicoContainer; 15 16 17 21 public class MapsTestCase 22 extends TestCase 23 implements CollectionDemoClasses { 24 private MutablePicoContainer pico; 25 26 protected void setUp() throws Exception { 27 pico = new DefaultPicoContainer(); 28 } 29 30 32 public static class Bowl { 33 private final TreeMap fishes; 34 private final Map cods; 35 36 public Bowl(TreeMap fishes, Map cods) { 37 this.fishes = fishes; 38 this.cods = cods; 39 } 40 41 public Map getFishes() { 42 return fishes; 43 } 44 45 public Map getCods() { 46 return cods; 47 } 48 } 49 50 52 public void testShouldCreateBowlWithFishCollection() { 53 54 56 pico.registerComponentImplementation("Shark", Shark.class); 57 pico.registerComponentImplementation("Cod", Cod.class); 58 pico.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{ 59 new ComponentParameter(Fish.class, false), 60 new ComponentParameter(Cod.class, false) 61 }); 62 64 Shark shark = (Shark) pico.getComponentInstanceOfType(Shark.class); 65 Cod cod = (Cod) pico.getComponentInstanceOfType(Cod.class); 66 Bowl bowl = (Bowl) pico.getComponentInstanceOfType(Bowl.class); 67 68 Map fishMap = bowl.getFishes(); 69 assertEquals(2, fishMap.size()); 70 Collection fishes = fishMap.values(); 71 assertTrue(fishes.contains(shark)); 72 assertTrue(fishes.contains(cod)); 73 74 Map codMap = bowl.getCods(); 75 assertEquals(1, codMap.size()); 76 Collection cods = fishMap.values(); 77 assertTrue(cods.contains(cod)); 78 } 79 80 public void testShouldCreateBowlWithNamedFishesOnly() { 81 82 84 pico.registerComponentImplementation(Shark.class); 85 pico.registerComponentImplementation("Nemo", Cod.class); 86 pico.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{ 87 new ComponentParameter(String .class, Fish.class, false), 88 new ComponentParameter(Cod.class, false) 89 }); 90 91 Bowl bowl = (Bowl) pico.getComponentInstanceOfType(Bowl.class); 92 94 96 Cod cod = (Cod) pico.getComponentInstanceOfType(Cod.class); 97 Map fishMap = bowl.getFishes(); 98 Map codMap = bowl.getCods(); 99 assertEquals(1, fishMap.size()); 100 assertEquals(1, codMap.size()); 101 assertEquals(fishMap, codMap); 102 assertSame(cod,fishMap.get("Nemo")); 103 } 105 106 public void testShouldCreateBowlWithFishesFromParent() { 107 108 110 MutablePicoContainer parent = new DefaultPicoContainer(); 111 parent.registerComponentImplementation("Tom", Cod.class); 112 parent.registerComponentImplementation("Harry", Cod.class); 113 MutablePicoContainer child = new DefaultPicoContainer(parent); 114 child.registerComponentImplementation("Dick", Cod.class); 115 child.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{ 116 new ComponentParameter(Fish.class, false), 117 new ComponentParameter(Cod.class, false) 118 }); 119 Bowl bowl = (Bowl) child.getComponentInstance(Bowl.class); 120 assertEquals(3, bowl.fishes.size()); 121 assertEquals(3, bowl.cods.size()); 122 123 } 125 126 public void testShouldCreateBowlWith2CodsOnly() { 127 128 130 MutablePicoContainer parent = new DefaultPicoContainer(); 131 parent.registerComponentImplementation("Tom", Cod.class); 132 parent.registerComponentImplementation("Dick", Cod.class); 133 parent.registerComponentImplementation("Harry", Cod.class); 134 MutablePicoContainer child = new DefaultPicoContainer(parent); 135 child.registerComponentImplementation("Dick", Shark.class); 136 child.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{ 137 new ComponentParameter(Fish.class, false), 138 new ComponentParameter(Cod.class, false) 139 }); 140 Bowl bowl = (Bowl) child.getComponentInstance(Bowl.class); 141 assertEquals(3, bowl.fishes.size()); 142 assertEquals(2, bowl.cods.size()); 143 144 } 146 147 public void testShouldCreateBowlWithoutTom() { 148 149 151 MutablePicoContainer mpc = new DefaultPicoContainer(); 152 mpc.registerComponentImplementation("Tom", Cod.class); 153 mpc.registerComponentImplementation("Dick", Cod.class); 154 mpc.registerComponentImplementation("Harry", Cod.class); 155 mpc.registerComponentImplementation("Sharky", Shark.class); 156 mpc.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{ 157 new CollectionComponentParameter(Fish.class, false), 158 new CollectionComponentParameter(Cod.class, false) { 159 protected boolean evaluate(ComponentAdapter adapter) { 160 return !"Tom".equals(adapter.getComponentKey()); 161 } 162 } 163 }); 164 Cod tom = (Cod) mpc.getComponentInstance("Tom"); 165 Bowl bowl = (Bowl) mpc.getComponentInstance(Bowl.class); 166 assertTrue(bowl.fishes.values().contains(tom)); 167 assertFalse(bowl.cods.values().contains(tom)); 168 169 } 171 } | Popular Tags |