1 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 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
|