KickJava   Java API By Example, From Geeks To Geeks.

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


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.jmock.Mock;
12 import org.jmock.MockObjectTestCase;
13 import org.picocontainer.ComponentAdapter;
14 import org.picocontainer.PicoVisitor;
15 import org.picocontainer.gems.constraints.And;
16 import org.picocontainer.gems.constraints.Constraint;
17 import org.picocontainer.gems.constraints.Not;
18 import org.picocontainer.gems.constraints.Or;
19
20 /**
21  * Test the <code>And, Or, Not</code> constraints.
22  *
23  * @author Nick Sieger
24  * @author J&ouml;rg Schaible
25  * @version 1.1
26  */

27 public class AndOrNotTestCase extends MockObjectTestCase {
28
29     Mock mockAdapter = mock(ComponentAdapter.class);
30     ComponentAdapter adapter = (ComponentAdapter) mockAdapter.proxy();
31     Mock mockVisior = mock(PicoVisitor.class);
32     PicoVisitor visitor = (PicoVisitor) mockVisior.proxy();
33
34     Mock mockC1 = mock(Constraint.class, "constraint 1");
35     Mock mockC2 = mock(Constraint.class, "constraint 2");
36     Mock mockC3 = mock(Constraint.class, "constraint 3");
37     Constraint c1 = (Constraint) mockC1.proxy();
38     Constraint c2 = (Constraint) mockC2.proxy();
39     Constraint c3 = (Constraint) mockC3.proxy();
40
41     public void testAndAllChildrenConstraintsTrueGivesTrue() {
42         Constraint c = new And(c1, c2, c3);
43
44         mockC1.expects(once()).method("evaluate")
45             .with(same(adapter))
46             .will(returnValue(Boolean.TRUE)).id("c1");
47         mockC2.expects(once()).method("evaluate")
48             .with(same(adapter)).after(mockC1, "c1")
49             .will(returnValue(Boolean.TRUE)).id("c2");
50         mockC3.expects(once()).method("evaluate")
51             .with(same(adapter)).after(mockC2, "c2")
52             .will(returnValue(Boolean.TRUE));
53
54         assertTrue(c.evaluate(adapter));
55     }
56     
57     public void testAndAllChildrenAreVisitedBreadthFirst() {
58         Constraint c = new And(c1, c2, c3);
59         
60         mockVisior.expects(once()).method("visitParameter")
61             .with(same(c)).id("v");
62         mockC1.expects(once()).method("accept")
63             .with(same(visitor)).after(mockVisior, "v");
64         mockC2.expects(once()).method("accept")
65             .with(same(visitor)).after(mockVisior, "v");
66         mockC3.expects(once()).method("accept")
67             .with(same(visitor)).after(mockVisior, "v");
68         
69         c.accept(visitor);
70     }
71
72     public void testAndAllChildrenConstraintsTrueGivesTrueUsingAlternateConstructor() {
73         Constraint c = new And(new Constraint[] {c1, c2, c3});
74
75         mockC1.expects(once()).method("evaluate")
76             .with(same(adapter))
77             .will(returnValue(Boolean.TRUE)).id("c1");
78         mockC2.expects(once()).method("evaluate")
79             .with(same(adapter)).after(mockC1, "c1")
80             .will(returnValue(Boolean.TRUE)).id("c2");
81         mockC3.expects(once()).method("evaluate")
82             .with(same(adapter)).after(mockC2, "c2")
83             .will(returnValue(Boolean.TRUE));
84
85         assertTrue(c.evaluate(adapter));
86     }
87
88     public void testAndShortCircuitGivesFalse() {
89         Constraint c = new And(c1, c2, c3);
90
91         mockC1.expects(once()).method("evaluate")
92             .with(same(adapter))
93             .will(returnValue(Boolean.TRUE)).id("c1");
94         mockC2.expects(once()).method("evaluate")
95             .with(same(adapter)).after(mockC1, "c1")
96             .will(returnValue(Boolean.FALSE));
97         mockC3.expects(never()).method("evaluate");
98
99         assertFalse(c.evaluate(adapter));
100     }
101
102     public void testOrAllChildrenConstraintsFalseGivesFalse() {
103         Constraint c = new Or(c1, c2, c3);
104
105         mockC1.expects(once()).method("evaluate")
106             .with(same(adapter))
107             .will(returnValue(Boolean.FALSE)).id("c1");
108         mockC2.expects(once()).method("evaluate")
109             .with(same(adapter)).after(mockC1, "c1")
110             .will(returnValue(Boolean.FALSE)).id("c2");
111         mockC3.expects(once()).method("evaluate")
112             .with(same(adapter)).after(mockC2, "c2")
113             .will(returnValue(Boolean.FALSE));
114
115         assertFalse(c.evaluate(adapter));
116     }
117     
118     public void testOrAllChildrenAreVisitedBreadthFirst() {
119         Constraint c = new Or(c1, c2, c3);
120         
121         mockVisior.expects(once()).method("visitParameter")
122             .with(same(c)).id("v");
123         mockC1.expects(once()).method("accept")
124             .with(same(visitor)).after(mockVisior, "v");
125         mockC2.expects(once()).method("accept")
126             .with(same(visitor)).after(mockVisior, "v");
127         mockC3.expects(once()).method("accept")
128             .with(same(visitor)).after(mockVisior, "v");
129         
130         c.accept(visitor);
131     }
132
133     public void testMixingOrAndNot() {
134         Constraint c = new Or(c1, new Not(c2), c3);
135
136         mockC1.expects(once()).method("evaluate")
137             .with(same(adapter))
138             .will(returnValue(Boolean.FALSE)).id("c1");
139         mockC2.expects(once()).method("evaluate")
140             .with(same(adapter)).after(mockC1, "c1")
141             .will(returnValue(Boolean.FALSE));
142         mockC3.expects(never()).method("evaluate");
143
144         assertTrue(c.evaluate(adapter));
145     }
146     
147     public void testNotChildIdVisitedBreadthFirst() {
148         Constraint c = new Not(c1);
149         
150         mockVisior.expects(once()).method("visitParameter")
151             .with(same(c)).id("v");
152         mockC1.expects(once()).method("accept")
153             .with(same(visitor)).after(mockVisior, "v");
154         
155         c.accept(visitor);
156     }
157 }
158
Popular Tags