1 /* Copyright (c) 2000-2003, jMock.org. See bundled LICENSE.txt */ 2 package org.jmock.constraint; 3 4 import junit.framework.TestCase; 5 import org.jmock.Constraint; 6 import org.jmock.Mock; 7 import org.jmock.dynamic.DummyInterface; 8 import org.jmock.expectation.AssertMo; 9 10 import java.util.EventObject; 11 12 public class ConstraintsTest extends TestCase { 13 class True implements Constraint { 14 public boolean eval(Object o) { 15 return true; 16 } 17 } 18 19 class False implements Constraint { 20 public boolean eval(Object o) { 21 return false; 22 } 23 } 24 25 /*** 26 * Creates a new instance of Test_Predicates 27 */ 28 public ConstraintsTest(String test) { 29 super(test); 30 } 31 32 public void testIsNull() { 33 Constraint p = new IsNull(); 34 35 assertTrue(p.eval(null)); 36 assertTrue(!p.eval(new Object())); 37 } 38 39 public void testIsSame() { 40 Object o1 = new Object(); 41 Object o2 = new Object(); 42 Constraint p = new IsSame(o1); 43 44 assertTrue(p.eval(o1)); 45 assertTrue(!p.eval(o2)); 46 } 47 48 public void testIsEqual() { 49 Integer i1 = new Integer(1); 50 Integer i2 = new Integer(2); 51 Constraint p = new IsEqual(i1); 52 53 assertTrue(p.eval(i1)); 54 assertTrue(p.eval(new Integer(1))); 55 assertTrue(!p.eval(i2)); 56 } 57 58 public void testIsEqualObjectArray() { 59 String[] s1 = new String[]{"a", "b"}; 60 String[] s2 = new String[]{"a", "b"}; 61 String[] s3 = new String[]{"c", "d"}; 62 String[] s4 = new String[]{"a", "b", "c", "d"}; 63 64 Constraint p = new IsEqual(s1); 65 66 assertTrue("Should equal itself", p.eval(s1)); 67 assertTrue("Should equal a similar array", p.eval(s2)); 68 assertTrue("Should not equal a different array", !p.eval(s3)); 69 assertTrue("Should not equal a different sized array", !p.eval(s4)); 70 } 71 72 public void testIsEqualToStringForNestedConstraint() { 73 assertEquals("Should get an obvious toString to reflect nesting if viewed in a debugger", 74 " = = NestedConstraint", new IsEqual(new IsEqual("NestedConstraint")).toString()); 75 } 76 77 public void testIsEqualToStringOnProxyArgument() { 78 // Required for error message reporting 79 Mock mockDummyInterface = new Mock(DummyInterface.class, "MockName"); 80 Constraint p = new IsEqual(mockDummyInterface.proxy()); 81 82 AssertMo.assertIncludes("Should get resolved toString() with no expectation error", "MockName", p.toString()); 83 } 84 85 public void testIsEqualEquals() throws Exception { 86 assertEquals("Should be equal", new IsEqual("a"), new IsEqual("a")); 87 assertFalse("Should not be equal - same type different values", new IsEqual("a").equals(new IsEqual("b"))); 88 assertFalse("Should not be equal - different type", new IsEqual("a").equals("b")); 89 } 90 91 public void testIsGreaterThan() { 92 Constraint p = new IsGreaterThan(new Integer(1)); 93 94 assertTrue(!p.eval(new Integer(0))); 95 assertTrue(!p.eval(new Integer(1))); 96 assertTrue(p.eval(new Integer(2))); 97 } 98 99 public void testIsLessThan() { 100 Constraint p = new IsLessThan(new Integer(1)); 101 102 assertTrue(p.eval(new Integer(0))); 103 assertTrue(!p.eval(new Integer(1))); 104 assertTrue(!p.eval(new Integer(2))); 105 } 106 107 public void testIsAnything() { 108 Constraint p = new IsAnything(); 109 assertTrue(p.eval(null)); 110 assertTrue(p.eval(new Object())); 111 } 112 113 public void testIsInstanceOf() { 114 Constraint p = new IsInstanceOf(Number.class); 115 assertTrue(p.eval(new Integer(1))); 116 assertTrue(p.eval(new Double(1.0))); 117 assertTrue(!p.eval("a string")); 118 assertTrue(!p.eval(null)); 119 } 120 121 public void testIsNot() { 122 Constraint p = new IsNot(new True()); 123 assertTrue(!p.eval(null)); 124 assertTrue(!p.eval(new Object())); 125 } 126 127 public void testAnd() { 128 Object o = new Object(); 129 assertTrue(new And(new True(), new True()).eval(o)); 130 assertTrue(!new And(new False(), new True()).eval(o)); 131 assertTrue(!new And(new True(), new False()).eval(o)); 132 assertTrue(!new And(new False(), new False()).eval(o)); 133 } 134 135 public void testOr() { 136 Object o = new Object(); 137 assertTrue(new Or(new True(), new True()).eval(o)); 138 assertTrue(new Or(new False(), new True()).eval(o)); 139 assertTrue(new Or(new True(), new False()).eval(o)); 140 assertTrue(!new Or(new False(), new False()).eval(o)); 141 } 142 143 public void testIsEventFrom() { 144 Object o = new Object(); 145 EventObject ev = new EventObject(o); 146 EventObject ev2 = new EventObject(new Object()); 147 148 Constraint p = new IsEventFrom(o); 149 150 assertTrue(p.eval(ev)); 151 assertTrue("p should eval to false for an event not from o", 152 !p.eval(ev2)); 153 assertTrue("p should eval to false for objects that are not events", 154 !p.eval(o)); 155 } 156 157 private static class DerivedEvent extends EventObject { 158 public DerivedEvent(Object source) { 159 super(source); 160 } 161 } 162 163 public void testIsEventSubtypeFrom() { 164 Object o = new Object(); 165 DerivedEvent good_ev = new DerivedEvent(o); 166 DerivedEvent wrong_source = new DerivedEvent(new Object()); 167 EventObject wrong_type = new EventObject(o); 168 EventObject wrong_source_and_type = new EventObject(new Object()); 169 170 Constraint p = new IsEventFrom(DerivedEvent.class, o); 171 172 assertTrue(p.eval(good_ev)); 173 assertTrue("p should eval to false for an event not from o", 174 !p.eval(wrong_source)); 175 assertTrue("p should eval to false for an event of the wrong type", 176 !p.eval(wrong_type)); 177 assertTrue("p should eval to false for an event of the wrong type " + 178 "and from the wrong source", 179 !p.eval(wrong_source_and_type)); 180 } 181 182 public void testIsCloseTo() { 183 Constraint p = new IsCloseTo(1.0, 0.5); 184 185 assertTrue(p.eval(new Double(1.0))); 186 assertTrue(p.eval(new Double(0.5))); 187 assertTrue(p.eval(new Double(1.5))); 188 189 assertTrue(p.eval(new Float(1.0))); 190 assertTrue(p.eval(new Integer(1))); 191 192 assertTrue("number too large", !p.eval(new Double(2.0))); 193 assertTrue("number too small", !p.eval(new Double(0.0))); 194 195 try { 196 p.eval("wrong type"); 197 fail("ClassCastException expected for wrong type of argument"); 198 } catch (ClassCastException ex) { 199 // expected 200 } 201 } 202 }

This page was automatically generated by Maven