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