KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > picocontainer > gems > constraints > ConstraintIntegrationTestCase


1 /*****************************************************************************
2  * Copyright (C) PicoContainer Organization. All rights reserved. *
3  * ------------------------------------------------------------------------- *
4  * The software in this package is published under the terms of the BSD *
5  * style license a copy of which has been included with this distribution in *
6  * the LICENSE.txt file. *
7  *****************************************************************************/

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 JavaDoc;
28 import java.util.List JavaDoc;
29
30 /**
31  * Integration tests using Constraints.
32  *
33  * @author Nick Sieger
34  * @version 1.1
35  */

36 public class ConstraintIntegrationTestCase
37     extends TestCase {
38
39     MutablePicoContainer container;
40
41     protected void setUp() throws Exception JavaDoc {
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 JavaDoc.class, new ArrayList JavaDoc());
49         container.registerComponentInstance(Object JavaDoc[].class, new Object JavaDoc[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             // success
62
}
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 JavaDoc[] dependencies = doa.getDependencies();
137         assertEquals(5, dependencies.length);
138     }
139
140 }
141
Popular Tags