1 package org.picocontainer.doc.advanced; 2 3 import junit.framework.TestCase; 4 5 import org.picocontainer.MutablePicoContainer; 6 import org.picocontainer.Parameter; 7 import org.picocontainer.defaults.CollectionComponentParameter; 8 import org.picocontainer.defaults.ComponentParameter; 9 import org.picocontainer.defaults.DefaultPicoContainer; 10 11 import java.util.Arrays ; 12 import java.util.List ; 13 14 15 20 public class ArraysTestCase 21 extends TestCase 22 implements CollectionDemoClasses { 23 private MutablePicoContainer pico; 24 25 protected void setUp() throws Exception { 26 pico = new DefaultPicoContainer(); 27 } 28 29 private void explanation() { 30 32 Shark shark = new Shark(); 33 Cod cod = new Cod(); 34 35 Fish[] fishes = new Fish[]{shark, cod}; 36 Cod[] cods = new Cod[]{cod}; 37 38 Bowl bowl = new Bowl(fishes, cods); 39 } 41 42 44 public static class Bowl { 45 private final Fish[] fishes; 46 private final Cod[] cods; 47 48 public Bowl(Fish[] fishes, Cod[] cods) { 49 this.fishes = fishes; 50 this.cods = cods; 51 } 52 53 public Fish[] getFishes() { 54 return fishes; 55 } 56 57 public Cod[] getCods() { 58 return cods; 59 } 60 } 61 62 64 public void testShouldCreateBowlWithFishCollection() { 65 66 68 pico.registerComponentImplementation(Shark.class); 69 pico.registerComponentImplementation(Cod.class); 70 pico.registerComponentImplementation(Bowl.class); 71 72 Bowl bowl = (Bowl) pico.getComponentInstance(Bowl.class); 73 75 Shark shark = (Shark) pico.getComponentInstanceOfType(Shark.class); 76 Cod cod = (Cod) pico.getComponentInstanceOfType(Cod.class); 77 78 List fishes = Arrays.asList(bowl.getFishes()); 79 assertEquals(2, fishes.size()); 80 assertTrue(fishes.contains(shark)); 81 assertTrue(fishes.contains(cod)); 82 83 List cods = Arrays.asList(bowl.getCods()); 84 assertEquals(1, cods.size()); 85 assertTrue(cods.contains(cod)); 86 } 87 88 public void testShouldCreateBowlWithCodsOnly() { 89 90 92 pico.registerComponentImplementation(Shark.class); 93 pico.registerComponentImplementation(Cod.class); 94 pico.registerComponentImplementation(Bowl.class); 95 pico.registerComponentInstance(new Fish[]{}); 96 97 Bowl bowl = (Bowl) pico.getComponentInstance(Bowl.class); 98 100 Cod cod = (Cod) pico.getComponentInstanceOfType(Cod.class); 101 102 104 List cods = Arrays.asList(bowl.getCods()); 105 assertEquals(1, cods.size()); 106 107 List fishes = Arrays.asList(bowl.getFishes()); 108 assertEquals(0, fishes.size()); 109 111 assertTrue(cods.contains(cod)); 112 } 113 114 public void testShouldCreateBowlWithFishCollectionAnyway() { 115 116 118 pico.registerComponentImplementation(Shark.class); 119 pico.registerComponentImplementation(Cod.class); 120 Parameter parameter = new CollectionComponentParameter(); 121 pico.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{parameter, parameter}); 122 pico.registerComponentInstance(new Fish[]{}); 123 pico.registerComponentInstance(new Cod[]{}); 124 125 Bowl bowl = (Bowl) pico.getComponentInstance(Bowl.class); 126 128 Shark shark = (Shark) pico.getComponentInstanceOfType(Shark.class); 129 Cod cod = (Cod) pico.getComponentInstanceOfType(Cod.class); 130 131 133 List fishes = Arrays.asList(bowl.getFishes()); 134 assertEquals(2, fishes.size()); 135 136 List cods = Arrays.asList(bowl.getCods()); 137 assertEquals(1, cods.size()); 138 140 assertTrue(fishes.contains(shark)); 141 assertTrue(fishes.contains(cod)); 142 assertTrue(cods.contains(cod)); 143 } 144 145 public void testShouldCreateBowlWithNoFishAtAll() { 146 147 149 Parameter parameter = CollectionComponentParameter.ARRAY_ALLOW_EMPTY; 150 pico.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{parameter, parameter}); 151 152 Bowl bowl = (Bowl) pico.getComponentInstance(Bowl.class); 153 155 List fishes = Arrays.asList(bowl.getFishes()); 156 assertEquals(0, fishes.size()); 157 List cods = Arrays.asList(bowl.getCods()); 158 assertEquals(0, cods.size()); 159 } 160 161 public void testShouldCreateBowlWithNamedFishesOnly() { 162 163 165 pico.registerComponentImplementation(Shark.class); 166 pico.registerComponentImplementation("Nemo", Cod.class); 167 pico.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{ 168 new ComponentParameter(String .class, Fish.class, false), new ComponentParameter(Cod.class, false)}); 169 170 Bowl bowl = (Bowl) pico.getComponentInstanceOfType(Bowl.class); 171 173 175 List fishes = Arrays.asList(bowl.getFishes()); 176 List cods = Arrays.asList(bowl.getCods()); 177 assertEquals(1, fishes.size()); 178 assertEquals(1, cods.size()); 179 assertEquals(fishes, cods); 180 } 182 } | Popular Tags |