Home | History | Annotate | Download | only in matchers
      1 /*
      2  * Copyright (c) 2007 Mockito contributors
      3  * This program is made available under the terms of the MIT License.
      4  */
      5 
      6 package org.mockitousage.matchers;
      7 
      8 import org.junit.Before;
      9 import org.junit.Test;
     10 import org.mockito.exceptions.verification.junit.ArgumentsAreDifferent;
     11 import org.mockitoutil.TestBase;
     12 
     13 import static org.mockito.Matchers.refEq;
     14 import static org.mockito.Mockito.mock;
     15 import static org.mockito.Mockito.verify;
     16 
     17 @SuppressWarnings("all")
     18 public class ReflectionMatchersTest extends TestBase {
     19 
     20     class Parent {
     21         private int parentField;
     22         protected String protectedParentField;
     23         public Parent(int parentField, String protectedParentField) {
     24             this.parentField = parentField;
     25             this.protectedParentField = protectedParentField;
     26         }
     27     }
     28 
     29     class Child extends Parent {
     30         private int childFieldOne;
     31         private Object childFieldTwo;
     32         public Child(int parentField, String protectedParentField, int childFieldOne, Object childFieldTwo) {
     33             super(parentField, protectedParentField);
     34             this.childFieldOne = childFieldOne;
     35             this.childFieldTwo = childFieldTwo;
     36         }
     37     }
     38 
     39     interface MockMe {
     40         void run(Child child);
     41     }
     42 
     43     MockMe mock;
     44 
     45     @Before
     46     public void setup() {
     47         mock = mock(MockMe.class);
     48 
     49         Child actual = new Child(1, "foo", 2, "bar");
     50         mock.run(actual);
     51     }
     52 
     53     @Test
     54     public void shouldMatchWhenFieldValuesEqual() throws Exception {
     55         Child wanted = new Child(1, "foo", 2, "bar");
     56         verify(mock).run(refEq(wanted));
     57     }
     58 
     59     @Test(expected=ArgumentsAreDifferent.class)
     60     public void shouldNotMatchWhenFieldValuesDiffer() throws Exception {
     61         Child wanted = new Child(1, "foo", 2, "bar XXX");
     62         verify(mock).run(refEq(wanted));
     63     }
     64 
     65     @Test(expected=ArgumentsAreDifferent.class)
     66     public void shouldNotMatchAgain() throws Exception {
     67         Child wanted = new Child(1, "foo", 999, "bar");
     68         verify(mock).run(refEq(wanted));
     69     }
     70 
     71     @Test(expected=ArgumentsAreDifferent.class)
     72     public void shouldNotMatchYetAgain() throws Exception {
     73         Child wanted = new Child(1, "XXXXX", 2, "bar");
     74         verify(mock).run(refEq(wanted));
     75     }
     76 
     77     @Test(expected=ArgumentsAreDifferent.class)
     78     public void shouldNotMatch() throws Exception {
     79         Child wanted = new Child(234234, "foo", 2, "bar");
     80         verify(mock).run(refEq(wanted));
     81     }
     82 
     83     @Test
     84     public void shouldMatchWhenFieldValuesEqualWithOneFieldExcluded() throws Exception {
     85         Child wanted = new Child(1, "foo", 2, "excluded");
     86         verify(mock).run(refEq(wanted, "childFieldTwo"));
     87     }
     88 
     89     @Test
     90     public void shouldMatchWhenFieldValuesEqualWithTwoFieldsExcluded() throws Exception {
     91         Child wanted = new Child(234234, "foo", 2, "excluded");
     92         verify(mock).run(refEq(wanted, "childFieldTwo", "parentField"));
     93         verify(mock).run(refEq(wanted, "parentField", "childFieldTwo"));
     94     }
     95 
     96     @Test(expected=ArgumentsAreDifferent.class)
     97     public void shouldNotMatchWithFieldsExclusion() throws Exception {
     98         Child wanted = new Child(234234, "foo", 2, "excluded");
     99         verify(mock).run(refEq(wanted, "childFieldTwo"));
    100     }
    101 }
    102