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.Collection ; 12 import java.util.HashSet ; 13 import java.util.LinkedList ; 14 import java.util.Set ; 15 16 17 21 public class CollectionsTestCase 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 LinkedList fishes; 34 private final Collection cods; 35 36 public Bowl(LinkedList fishes, Collection cods) { 37 this.fishes = fishes; 38 this.cods = cods; 39 } 40 41 public Collection getFishes() { 42 return fishes; 43 } 44 45 public Collection getCods() { 46 return cods; 47 } 48 } 49 50 52 public void testShouldCreateBowlWithFishCollection() { 53 54 56 pico.registerComponentImplementation(Shark.class); 57 pico.registerComponentImplementation(Cod.class); 58 pico.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{ 59 new ComponentParameter(Fish.class, false), new ComponentParameter(Cod.class, false)}); 60 62 Shark shark = (Shark) pico.getComponentInstanceOfType(Shark.class); 63 Cod cod = (Cod) pico.getComponentInstanceOfType(Cod.class); 64 Bowl bowl = (Bowl) pico.getComponentInstanceOfType(Bowl.class); 65 66 Collection fishes = bowl.getFishes(); 67 assertEquals(2, fishes.size()); 68 assertTrue(fishes.contains(shark)); 69 assertTrue(fishes.contains(cod)); 70 71 Collection cods = bowl.getCods(); 72 assertEquals(1, cods.size()); 73 assertTrue(cods.contains(cod)); 74 } 75 76 public void testShouldCreateBowlWithFishesOnly() { 77 78 80 final Set set = new HashSet (); 81 pico.registerComponentImplementation(Shark.class); 82 pico.registerComponentImplementation(Cod.class); 83 pico.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{ 84 new ComponentParameter(Fish.class, false), new ComponentParameter(Cod.class, false)}); 85 pico.registerComponentInstance(set); 86 87 Bowl bowl = (Bowl) pico.getComponentInstance(Bowl.class); 88 90 Shark shark = (Shark) pico.getComponentInstanceOfType(Shark.class); 91 Cod cod = (Cod) pico.getComponentInstanceOfType(Cod.class); 92 93 95 Collection cods = bowl.getCods(); 96 assertEquals(0, cods.size()); 97 assertSame(set, cods); 98 99 Collection fishes = bowl.getFishes(); 100 assertEquals(2, fishes.size()); 101 103 assertTrue(fishes.contains(cod)); 104 assertTrue(fishes.contains(shark)); 105 } 106 107 public void testShouldCreateBowlWithFishCollectionAnyway() { 108 109 111 pico.registerComponentImplementation(Shark.class); 112 pico.registerComponentImplementation(Cod.class); 113 pico.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{ 114 new CollectionComponentParameter(Fish.class, false), new CollectionComponentParameter(Cod.class, false)}); 115 pico.registerComponentInstance(new LinkedList ()); 117 118 Bowl bowl = (Bowl) pico.getComponentInstance(Bowl.class); 119 121 Shark shark = (Shark) pico.getComponentInstanceOfType(Shark.class); 122 Cod cod = (Cod) pico.getComponentInstanceOfType(Cod.class); 123 124 Collection fishes = bowl.getFishes(); 125 assertEquals(2, fishes.size()); 126 Collection cods = bowl.getCods(); 127 assertEquals(1, cods.size()); 128 129 assertTrue(fishes.contains(shark)); 130 assertTrue(fishes.contains(cod)); 131 assertTrue(cods.contains(cod)); 132 } 133 134 public void testShouldCreateBowlWithNoFishAtAll() { 135 136 138 pico.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{ 139 new ComponentParameter(Fish.class, true), new ComponentParameter(Cod.class, true)}); 140 141 Bowl bowl = (Bowl) pico.getComponentInstance(Bowl.class); 142 144 Collection fishes = bowl.getFishes(); 145 assertEquals(0, fishes.size()); 146 Collection cods = bowl.getCods(); 147 assertEquals(0, cods.size()); 148 } 149 } | Popular Tags |