1 /* 2 * Copyright (c) 2007 Mockito contributors 3 * This program is made available under the terms of the MIT License. 4 */ 5 package org.mockito.internal.stubbing; 6 7 import org.mockito.internal.stubbing.answers.CallsRealMethods; 8 import org.mockito.internal.stubbing.answers.Returns; 9 import org.mockito.internal.stubbing.answers.ThrowsException; 10 import org.mockito.internal.stubbing.answers.ThrowsExceptionClass; 11 import org.mockito.stubbing.DeprecatedOngoingStubbing; 12 import org.mockito.stubbing.OngoingStubbing; 13 14 public abstract class BaseStubbing<T> implements OngoingStubbing<T>, DeprecatedOngoingStubbing<T> { thenReturn(T value)15 public OngoingStubbing<T> thenReturn(T value) { 16 return thenAnswer(new Returns(value)); 17 } 18 thenReturn(T value, T... values)19 public OngoingStubbing<T> thenReturn(T value, T... values) { 20 OngoingStubbing<T> stubbing = thenReturn(value); 21 if (values == null) { 22 return stubbing.thenReturn(null); 23 } 24 for (T v: values) { 25 stubbing = stubbing.thenReturn(v); 26 } 27 return stubbing; 28 } 29 thenThrow(Throwable throwable)30 private OngoingStubbing<T> thenThrow(Throwable throwable) { 31 return thenAnswer(new ThrowsException(throwable)); 32 } 33 thenThrow(Throwable... throwables)34 public OngoingStubbing<T> thenThrow(Throwable... throwables) { 35 if (throwables == null) { 36 thenThrow((Throwable) null); 37 } 38 OngoingStubbing<T> stubbing = null; 39 for (Throwable t: throwables) { 40 if (stubbing == null) { 41 stubbing = thenThrow(t); 42 } else { 43 stubbing = stubbing.thenThrow(t); 44 } 45 } 46 return stubbing; 47 } 48 thenThrow(Class<? extends Throwable> throwableClass)49 private OngoingStubbing<T> thenThrow(Class<? extends Throwable> throwableClass) { 50 return thenAnswer(new ThrowsExceptionClass(throwableClass)); 51 } 52 thenThrow(Class<? extends Throwable>.... throwableClasses)53 public OngoingStubbing<T> thenThrow(Class<? extends Throwable>... throwableClasses) { 54 if (throwableClasses == null) { 55 thenThrow((Throwable) null); 56 } 57 OngoingStubbing<T> stubbing = null; 58 for (Class<? extends Throwable> t: throwableClasses) { 59 if (stubbing == null) { 60 stubbing = thenThrow(t); 61 } else { 62 stubbing = stubbing.thenThrow(t); 63 } 64 } 65 return stubbing; 66 } 67 thenCallRealMethod()68 public OngoingStubbing<T> thenCallRealMethod() { 69 return thenAnswer(new CallsRealMethods()); 70 } 71 toReturn(T value)72 public DeprecatedOngoingStubbing<T> toReturn(T value) { 73 return toAnswer(new Returns(value)); 74 } 75 toThrow(Throwable throwable)76 public DeprecatedOngoingStubbing<T> toThrow(Throwable throwable) { 77 return toAnswer(new ThrowsException(throwable)); 78 } 79 } 80