KickJava   Java API By Example, From Geeks To Geeks.

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


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 org.picocontainer.MutablePicoContainer;
12 import org.picocontainer.PicoVisitor;
13 import org.picocontainer.defaults.AmbiguousComponentResolutionException;
14 import org.picocontainer.defaults.DefaultPicoContainer;
15 import org.picocontainer.testmodel.AlternativeTouchable;
16 import org.picocontainer.testmodel.DecoratedTouchable;
17 import org.picocontainer.testmodel.DependsOnTouchable;
18 import org.picocontainer.testmodel.SimpleTouchable;
19 import org.picocontainer.testmodel.Touchable;
20
21 import org.jmock.Mock;
22 import org.jmock.MockObjectTestCase;
23
24 /**
25  * Test some <code>Constraint</code>s.
26  *
27  * @author Nick Sieger
28  * @author J&ouml;rg Schaible
29  * @version 1.1
30  */

31 public class ConstraintsTestCase extends MockObjectTestCase {
32
33     MutablePicoContainer container;
34
35     protected void setUp() throws Exception JavaDoc {
36         super.setUp();
37         
38         container = new DefaultPicoContainer();
39         container.registerComponentImplementation(SimpleTouchable.class);
40         container.registerComponentImplementation(DecoratedTouchable.class);
41         container.registerComponentImplementation(AlternativeTouchable.class);
42         container.registerComponentImplementation(DependsOnTouchable.class);
43     }
44
45     public void testIsKeyConstraint() {
46         Constraint c = new IsKey(SimpleTouchable.class);
47
48         Object JavaDoc object = c.resolveInstance(container,
49                 container.getComponentAdapter(DependsOnTouchable.class),
50                 Touchable.class);
51         assertEquals(SimpleTouchable.class, object.getClass());
52     }
53
54     public void testIsTypeConstraint() {
55         Constraint c = new IsType(AlternativeTouchable.class);
56
57         Object JavaDoc object = c.resolveInstance(container,
58                 container.getComponentAdapter(DependsOnTouchable.class),
59                 Touchable.class);
60         assertEquals(AlternativeTouchable.class, object.getClass());
61     }
62
63     public void testIsKeyTypeConstraint() {
64         container.registerComponentImplementation("Simple", SimpleTouchable.class);
65         container.registerComponentImplementation(new Integer JavaDoc(5), SimpleTouchable.class);
66         container.registerComponentImplementation(Boolean.TRUE, SimpleTouchable.class);
67         Touchable t = (Touchable) container.getComponentInstance(Boolean.TRUE);
68         
69         Constraint c = new IsKeyType(Boolean JavaDoc.class);
70
71         assertSame(t, c.resolveInstance(container,
72                 container.getComponentAdapter(DependsOnTouchable.class),
73                 Touchable.class));
74     }
75
76     public void testConstraintTooBroadThrowsAmbiguityException() {
77         Constraint c = new IsType(Touchable.class);
78
79         try {
80             c.resolveInstance(container,
81                     container.getComponentAdapter(DependsOnTouchable.class),
82                     Touchable.class);
83             fail("did not throw ambiguous resolution exception");
84         } catch (AmbiguousComponentResolutionException acre) {
85             // success
86
}
87     }
88
89     public void testFindCandidateConstraintsExcludingOneImplementation() {
90         Constraint c =
91             new CollectionConstraint(
92                 new And(new IsType(Touchable.class),
93                 new Not(new IsType(DecoratedTouchable.class))));
94         Touchable[] touchables = (Touchable[]) c.resolveInstance(container,
95                 container.getComponentAdapter(DependsOnTouchable.class),
96                 Touchable[].class);
97         assertEquals(2, touchables.length);
98         for (int i = 0; i < touchables.length; i++) {
99             assertFalse(touchables[i] instanceof DecoratedTouchable);
100         }
101     }
102     
103     public void testCollectionChildIdVisitedBreadthFirst() {
104         Mock mockVisior = mock(PicoVisitor.class);
105         PicoVisitor visitor = (PicoVisitor) mockVisior.proxy();
106
107         Mock mockC1 = mock(Constraint.class, "constraint 1");
108         Constraint c1 = (Constraint) mockC1.proxy();
109
110         Constraint c = new CollectionConstraint(c1);
111         
112         mockVisior.expects(once()).method("visitParameter")
113             .with(same(c)).id("v");
114         mockC1.expects(once()).method("accept")
115             .with(same(visitor)).after(mockVisior, "v");
116         
117         c.accept(visitor);
118     }
119 }
120
Popular Tags