blob: 84ad4821037242d4c788e231ac7e0f34dac8ddc4 [file] [log] [blame]
/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockitousage.matchers;
import org.junit.Before;
import org.junit.Test;
import org.mockito.exceptions.verification.junit.ArgumentsAreDifferent;
import org.mockitoutil.TestBase;
import static org.mockito.Matchers.refEq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@SuppressWarnings("all")
public class ReflectionMatchersTest extends TestBase {
class Parent {
private int parentField;
protected String protectedParentField;
public Parent(int parentField, String protectedParentField) {
this.parentField = parentField;
this.protectedParentField = protectedParentField;
}
}
class Child extends Parent {
private int childFieldOne;
private Object childFieldTwo;
public Child(int parentField, String protectedParentField, int childFieldOne, Object childFieldTwo) {
super(parentField, protectedParentField);
this.childFieldOne = childFieldOne;
this.childFieldTwo = childFieldTwo;
}
}
interface MockMe {
void run(Child child);
}
MockMe mock;
@Before
public void setup() {
mock = mock(MockMe.class);
Child actual = new Child(1, "foo", 2, "bar");
mock.run(actual);
}
@Test
public void shouldMatchWhenFieldValuesEqual() throws Exception {
Child wanted = new Child(1, "foo", 2, "bar");
verify(mock).run(refEq(wanted));
}
@Test(expected=ArgumentsAreDifferent.class)
public void shouldNotMatchWhenFieldValuesDiffer() throws Exception {
Child wanted = new Child(1, "foo", 2, "bar XXX");
verify(mock).run(refEq(wanted));
}
@Test(expected=ArgumentsAreDifferent.class)
public void shouldNotMatchAgain() throws Exception {
Child wanted = new Child(1, "foo", 999, "bar");
verify(mock).run(refEq(wanted));
}
@Test(expected=ArgumentsAreDifferent.class)
public void shouldNotMatchYetAgain() throws Exception {
Child wanted = new Child(1, "XXXXX", 2, "bar");
verify(mock).run(refEq(wanted));
}
@Test(expected=ArgumentsAreDifferent.class)
public void shouldNotMatch() throws Exception {
Child wanted = new Child(234234, "foo", 2, "bar");
verify(mock).run(refEq(wanted));
}
@Test
public void shouldMatchWhenFieldValuesEqualWithOneFieldExcluded() throws Exception {
Child wanted = new Child(1, "foo", 2, "excluded");
verify(mock).run(refEq(wanted, "childFieldTwo"));
}
@Test
public void shouldMatchWhenFieldValuesEqualWithTwoFieldsExcluded() throws Exception {
Child wanted = new Child(234234, "foo", 2, "excluded");
verify(mock).run(refEq(wanted, "childFieldTwo", "parentField"));
verify(mock).run(refEq(wanted, "parentField", "childFieldTwo"));
}
@Test(expected=ArgumentsAreDifferent.class)
public void shouldNotMatchWithFieldsExclusion() throws Exception {
Child wanted = new Child(234234, "foo", 2, "excluded");
verify(mock).run(refEq(wanted, "childFieldTwo"));
}
}