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