143b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann/*
243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * Copyright (C) 2017 The Android Open Source Project
343b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann *
443b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * Licensed under the Apache License, Version 2.0 (the "License");
543b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * you may not use this file except in compliance with the License.
643b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * You may obtain a copy of the License at
743b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann *
843b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann *      http://www.apache.org/licenses/LICENSE-2.0
943b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann *
1043b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * Unless required by applicable law or agreed to in writing, software
1143b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * distributed under the License is distributed on an "AS IS" BASIS,
1243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1343b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * See the License for the specific language governing permissions and
1443b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * limitations under the License.
1543b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann */
1643b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
1743b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmannpackage com.android.dx.mockito.tests;
1843b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
1943b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmannimport android.support.test.runner.AndroidJUnit4;
2043b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
21d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmannimport org.junit.Ignore;
2243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmannimport org.junit.Test;
2343b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmannimport org.junit.runner.RunWith;
24d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmannimport org.mockito.exceptions.base.MockitoException;
25b7b69641b6305f6f49808c5b4828e00858d9483fPhilip P. Moltmannimport org.mockito.exceptions.verification.NoInteractionsWanted;
2643b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
27d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmannimport java.util.ArrayList;
28d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmannimport java.util.Arrays;
29d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
30d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmannimport static org.junit.Assert.assertArrayEquals;
3143b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmannimport static org.junit.Assert.assertEquals;
32d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmannimport static org.junit.Assert.assertNotNull;
3343b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmannimport static org.junit.Assert.assertNull;
34b7b69641b6305f6f49808c5b4828e00858d9483fPhilip P. Moltmannimport static org.junit.Assert.assertTrue;
35d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmannimport static org.junit.Assert.fail;
36d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmannimport static org.mockito.ArgumentMatchers.anyString;
37d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmannimport static org.mockito.ArgumentMatchers.eq;
38d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmannimport static org.mockito.ArgumentMatchers.isNull;
3943b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmannimport static org.mockito.Mockito.mock;
4043b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmannimport static org.mockito.Mockito.spy;
41b7b69641b6305f6f49808c5b4828e00858d9483fPhilip P. Moltmannimport static org.mockito.Mockito.verifyNoMoreInteractions;
4243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmannimport static org.mockito.Mockito.when;
4343b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
4443b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann@RunWith(AndroidJUnit4.class)
45b7b69641b6305f6f49808c5b4828e00858d9483fPhilip P. Moltmannpublic class GeneralMocking {
4643b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    public static class TestClass {
4743b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        public String returnA() {
4843b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann            return "A";
4943b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        }
50d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
51d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        public String throwThrowable() throws Throwable {
52d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann            throw new Throwable();
53d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        }
54d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
55d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        public String throwOutOfMemoryError() throws OutOfMemoryError {
56d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann            throw new OutOfMemoryError();
57d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        }
58d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
59d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        public void throwNullPointerException() {
60d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann            throw new NullPointerException();
61d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        }
62d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
63d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        public String concat(String a, String b) {
64d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann            return a + b;
65d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        }
66d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    }
67d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
68d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    public static class TestSubClass extends TestClass {
69d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
7043b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    }
7143b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
7243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    public interface TestInterface {
7343b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        String returnA();
74d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
75d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        String concat(String a, String b);
7643b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    }
7743b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
7843b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    @Test
7943b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    public void mockClass() throws Exception {
8043b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        TestClass t = mock(TestClass.class);
8143b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
8243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        assertNull(t.returnA());
8343b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
8443b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        when(t.returnA()).thenReturn("B");
8543b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        assertEquals("B", t.returnA());
8643b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    }
8743b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
8843b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    @Test
8943b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    public void mockInterface() throws Exception {
9043b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        TestInterface t = mock(TestInterface.class);
9143b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
9243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        assertNull(t.returnA());
9343b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
9443b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        when(t.returnA()).thenReturn("B");
9543b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        assertEquals("B", t.returnA());
9643b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    }
9743b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
9843b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    @Test
9943b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    public void spyClass() throws Exception {
10043b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        TestClass originalT = new TestClass();
10143b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        TestClass t = spy(originalT);
10243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
10343b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        assertEquals("A", t.returnA());
10443b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
10543b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        when(t.returnA()).thenReturn("B");
10643b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        assertEquals("B", t.returnA());
10743b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
10843b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        // Wrapped object is not affected by mocking
10943b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        assertEquals("A", originalT.returnA());
11043b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    }
11143b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
11243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    @Test
11343b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    public void spyNewClass() throws Exception {
11443b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        TestClass t = spy(TestClass.class);
11543b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
11643b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        assertEquals("A", t.returnA());
11743b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
11843b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        when(t.returnA()).thenReturn("B");
11943b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        assertEquals("B", t.returnA());
12043b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    }
12143b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
12243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    @Test
123b7b69641b6305f6f49808c5b4828e00858d9483fPhilip P. Moltmann    public void verifyAdditionalInvocations() {
12443b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        TestClass t = mock(TestClass.class);
12543b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
126b7b69641b6305f6f49808c5b4828e00858d9483fPhilip P. Moltmann        t.returnA();
127b7b69641b6305f6f49808c5b4828e00858d9483fPhilip P. Moltmann        t.returnA();
12843b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann
12943b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        try {
130b7b69641b6305f6f49808c5b4828e00858d9483fPhilip P. Moltmann            verifyNoMoreInteractions(t);
131b7b69641b6305f6f49808c5b4828e00858d9483fPhilip P. Moltmann        } catch (NoInteractionsWanted e) {
13243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann            try {
13343b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann                throw new Exception();
13443b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann            } catch (Exception here) {
135b7b69641b6305f6f49808c5b4828e00858d9483fPhilip P. Moltmann                // The error message should indicate where the additional invocations have been made
136b7b69641b6305f6f49808c5b4828e00858d9483fPhilip P. Moltmann                assertTrue(e.getMessage(),
137b7b69641b6305f6f49808c5b4828e00858d9483fPhilip P. Moltmann                        e.getMessage().contains(here.getStackTrace()[0].getMethodName()));
13843b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann            }
139d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        }
140d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    }
141d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
142d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    @Test
143d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    public void spyThrowingMethod() throws Exception {
144d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        TestClass t = spy(TestClass.class);
145d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
146d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        try {
147d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann            t.throwThrowable();
148d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        } catch (Throwable e) {
149d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann            assertEquals("throwThrowable", e.getStackTrace()[0].getMethodName());
150d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann            return;
151d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        }
152d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
153d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        fail();
154d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    }
155b7b69641b6305f6f49808c5b4828e00858d9483fPhilip P. Moltmann
156d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    @Test()
157d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    public void spyErrorMethod() throws Exception {
158d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        TestClass t = spy(TestClass.class);
159d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
160d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        try {
161d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann            t.throwOutOfMemoryError();
162d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann            fail();
163d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        } catch (OutOfMemoryError e) {
164d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann            assertEquals("throwOutOfMemoryError", e.getStackTrace()[0].getMethodName());
165d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        }
166d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    }
167d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
168d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    @Test()
169d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    public void spyExceptingMethod() throws Exception {
170d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        TestClass t = spy(TestClass.class);
171d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
172d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        try {
173d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann            t.throwNullPointerException();
174d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann            fail();
175d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        } catch (NullPointerException e) {
176d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann            assertEquals("throwNullPointerException", e.getStackTrace()[0].getMethodName());
17743b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann        }
17843b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann    }
179d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
180d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
181d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    @Test
182d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    public void callAbstractRealMethod() throws Exception {
183d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        TestInterface t = mock(TestInterface.class);
184d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
185d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        try {
186d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann            when(t.returnA()).thenCallRealMethod();
187a8266e2df1957adfa83283707bfdc821c591f5c3Philip P. Moltmann            fail();
188d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        } catch (MockitoException e) {
189d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann            assertEquals("callAbstractRealMethod", e.getStackTrace()[0].getMethodName());
190d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        }
191d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    }
192d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
193d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    @Test
194d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    public void callInterfaceWithoutMatcher() throws Exception {
195d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        TestInterface t = mock(TestInterface.class);
196d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
197d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        when(t.concat("a", "b")).thenReturn("match");
198d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
199d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertEquals("match", t.concat("a", "b"));
200d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertNull(t.concat("b", "a"));
201d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    }
202d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
203d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    @Test
204d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    public void callInterfaceWithMatcher() throws Exception {
205d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        TestInterface t = mock(TestInterface.class);
206d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
207d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        when(t.concat(eq("a"), anyString())).thenReturn("match");
208d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
209d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertEquals("match", t.concat("a", "b"));
210d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertNull(t.concat("b", "a"));
211d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    }
212d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
213d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    @Test
214d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    public void callInterfaceWithNullMatcher() throws Exception {
215d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        TestInterface t = mock(TestInterface.class);
216d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
217d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        when(t.concat(eq("a"), (String) isNull())).thenReturn("match");
218d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
219d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertEquals("match", t.concat("a", null));
220d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertNull(t.concat("a", "b"));
221d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    }
222d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
223d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    @Test
224d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    public void callClassWithoutMatcher() throws Exception {
225d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        TestClass t = spy(TestClass.class);
226d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
227d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        when(t.concat("a", "b")).thenReturn("match");
228d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
229d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertEquals("match", t.concat("a", "b"));
230d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertEquals("ba", t.concat("b", "a"));
231d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    }
232d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
233d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    @Test
234d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    public void callClassWithMatcher() throws Exception {
235d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        TestClass t = spy(TestClass.class);
236d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
237d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        when(t.concat(eq("a"), anyString())).thenReturn("match");
238d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
239d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertEquals("match", t.concat("a", "b"));
240d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertEquals("ba", t.concat("b", "a"));
241d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    }
242d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
243d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    @Test
244d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    public void callClassWithNullMatcher() throws Exception {
245d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        TestClass t = spy(TestClass.class);
246d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
247d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        when(t.concat(eq("a"), (String) isNull())).thenReturn("match");
248d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
249d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertEquals("match", t.concat("a", null));
250d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertEquals("ab", t.concat("a", "b"));
251d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    }
252d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
253d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    @Test
254d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    public void callSubClassWithoutMatcher() throws Exception {
255d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        TestSubClass t = spy(TestSubClass.class);
256d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
257d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        when(t.concat("a", "b")).thenReturn("match");
258d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
259d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertEquals("match", t.concat("a", "b"));
260d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertEquals("ba", t.concat("b", "a"));
261d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    }
262d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
263d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    @Test
264d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    public void callSubClassWithMatcher() throws Exception {
265d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        TestSubClass t = spy(TestSubClass.class);
266d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
267d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        when(t.concat(eq("a"), anyString())).thenReturn("match");
268d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
269d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertEquals("match", t.concat("a", "b"));
270d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertEquals("ba", t.concat("b", "a"));
271d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    }
272d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
273d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    @Test
274d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    public void callSubClassWithNullMatcher() throws Exception {
275d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        TestSubClass t = spy(TestSubClass.class);
276d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
277d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        when(t.concat(eq("a"), (String) isNull())).thenReturn("match");
278d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann
279d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertEquals("match", t.concat("a", null));
280d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann        assertEquals("ab", t.concat("a", "b"));
281d4a20568bcbaa34526676e4758e011ea32784825Philip P. Moltmann    }
28243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann}
283