001 package org.picocontainer.doc.advanced; 002 003 import junit.framework.TestCase; 004 005 import org.picocontainer.MutablePicoContainer; 006 import org.picocontainer.Parameter; 007 import org.picocontainer.defaults.CollectionComponentParameter; 008 import org.picocontainer.defaults.ComponentParameter; 009 import org.picocontainer.defaults.DefaultPicoContainer; 010 011 import java.util.Arrays; 012 import java.util.List; 013 014 015 /** 016 * @author Aslak Hellesøy 017 * @author Jörg Schaible 018 * @version $Revision: 1804 $ 019 */ 020 public class ArraysTestCase 021 extends TestCase 022 implements CollectionDemoClasses { 023 private MutablePicoContainer pico; 024 025 protected void setUp() throws Exception { 026 pico = new DefaultPicoContainer(); 027 } 028 029 private void explanation() { 030 // START SNIPPET: explanation 031 032 Shark shark = new Shark(); 033 Cod cod = new Cod(); 034 035 Fish[] fishes = new Fish[]{shark, cod}; 036 Cod[] cods = new Cod[]{cod}; 037 038 Bowl bowl = new Bowl(fishes, cods); 039 // END SNIPPET: explanation 040 } 041 042 // START SNIPPET: bowl 043 044 public static class Bowl { 045 private final Fish[] fishes; 046 private final Cod[] cods; 047 048 public Bowl(Fish[] fishes, Cod[] cods) { 049 this.fishes = fishes; 050 this.cods = cods; 051 } 052 053 public Fish[] getFishes() { 054 return fishes; 055 } 056 057 public Cod[] getCods() { 058 return cods; 059 } 060 } 061 062 // END SNIPPET: bowl 063 064 public void testShouldCreateBowlWithFishCollection() { 065 066 // START SNIPPET: usage 067 068 pico.registerComponentImplementation(Shark.class); 069 pico.registerComponentImplementation(Cod.class); 070 pico.registerComponentImplementation(Bowl.class); 071 072 Bowl bowl = (Bowl) pico.getComponentInstance(Bowl.class); 073 // END SNIPPET: usage 074 075 Shark shark = (Shark) pico.getComponentInstanceOfType(Shark.class); 076 Cod cod = (Cod) pico.getComponentInstanceOfType(Cod.class); 077 078 List fishes = Arrays.asList(bowl.getFishes()); 079 assertEquals(2, fishes.size()); 080 assertTrue(fishes.contains(shark)); 081 assertTrue(fishes.contains(cod)); 082 083 List cods = Arrays.asList(bowl.getCods()); 084 assertEquals(1, cods.size()); 085 assertTrue(cods.contains(cod)); 086 } 087 088 public void testShouldCreateBowlWithCodsOnly() { 089 090 // START SNIPPET: directUsage 091 092 pico.registerComponentImplementation(Shark.class); 093 pico.registerComponentImplementation(Cod.class); 094 pico.registerComponentImplementation(Bowl.class); 095 pico.registerComponentInstance(new Fish[]{}); 096 097 Bowl bowl = (Bowl) pico.getComponentInstance(Bowl.class); 098 // END SNIPPET: directUsage 099 100 Cod cod = (Cod) pico.getComponentInstanceOfType(Cod.class); 101 102 // START SNIPPET: directDemo 103 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 // END SNIPPET: directDemo 110 111 assertTrue(cods.contains(cod)); 112 } 113 114 public void testShouldCreateBowlWithFishCollectionAnyway() { 115 116 // START SNIPPET: ensureArray 117 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 // END SNIPPET: ensureArray 127 128 Shark shark = (Shark) pico.getComponentInstanceOfType(Shark.class); 129 Cod cod = (Cod) pico.getComponentInstanceOfType(Cod.class); 130 131 // START SNIPPET: ensureDemo 132 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 // END SNIPPET: ensureDemo 139 140 assertTrue(fishes.contains(shark)); 141 assertTrue(fishes.contains(cod)); 142 assertTrue(cods.contains(cod)); 143 } 144 145 public void testShouldCreateBowlWithNoFishAtAll() { 146 147 // START SNIPPET: emptyArray 148 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 // END SNIPPET: emptyArray 154 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 // START SNIPPET: useKeyType 164 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 // END SNIPPET: useKeyType 172 173 // START SNIPPET: ensureKeyType 174 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 // END SNIPPET: ensureKeyType 181 } 182 }