/*
* Copyright (c) 2006 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit;
import static org.junit.Assert.*;
import org.junit.*;
@SuppressWarnings({"ObjectEqualsNull", "SimplifiableJUnitAssertion"})
public final class ObjectOverridesAndInjectableMocksTest
{
@Injectable ClassWithObjectOverrides a;
@Injectable ClassWithObjectOverrides b;
@Test
public void verifyStandardBehaviorOfOverriddenEqualsMethodsInMockedClass()
{
assertDefaultEqualsBehavior(a, b);
assertDefaultEqualsBehavior(b, a);
}
void assertDefaultEqualsBehavior(Object obj1, Object obj2)
{
assertFalse(obj1.equals(null));
assertFalse(obj1.equals("test"));
assertTrue(obj1.equals(obj1));
assertFalse(obj1.equals(obj2));
}
@Test
public void allowAnyInvocationsOnOverriddenObjectMethodsForStrictMocks()
{
new Expectations() {{ a.getIntValue(); result = 58; }};
assertFalse(a.equals(b));
assertTrue(a.equals(a));
assertEquals(58, a.getIntValue());
assertFalse(b.equals(a));
assertFalse(a.equals(b));
}
static class BaseClass
{
final int value;
BaseClass(int value) { this.value = value; }
@Override public boolean equals(Object obj) { return value == ((BaseClass) obj).value; }
}
static class Subclass1 extends BaseClass { Subclass1() { super(1); } }
static class Subclass2 extends BaseClass { Subclass2() { super(2); } }
@Test
public void executeEqualsOverrideOnInstancesOfDifferentSubclassThanTheOneMocked(@Injectable Subclass1 mocked)
{
Object s1 = new Subclass2();
Object s2 = new Subclass2();
boolean cmp = s1.equals(s2);
assertTrue(cmp);
}
}