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 */ 52637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpackage org.mockito.internal.stubbing.answers; 62637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 72637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport java.io.Serializable; 82637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 92637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.invocation.InvocationOnMock; 102637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.stubbing.Answer; 112637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.stubbing.ValidableAnswer; 122637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 132637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.internal.exceptions.Reporter.cannotStubVoidMethodWithAReturnValue; 142637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.internal.exceptions.Reporter.wrongTypeOfReturnValue; 152637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 162637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpublic class Returns implements Answer<Object>, ValidableAnswer, Serializable { 172637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 182637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin private static final long serialVersionUID = -6245608253574215396L; 192637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin private final Object value; 202637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 212637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public Returns(Object value) { 222637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin this.value = value; 232637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 242637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 252637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public Object answer(InvocationOnMock invocation) throws Throwable { 262637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return value; 272637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 282637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 292637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin @Override 302637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public void validateFor(InvocationOnMock invocation) { 312637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin InvocationInfo invocationInfo = new InvocationInfo(invocation); 322637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin if (invocationInfo.isVoid()) { 332637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin throw cannotStubVoidMethodWithAReturnValue(invocationInfo.getMethodName()); 342637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 352637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 362637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin if (returnsNull() && invocationInfo.returnsPrimitive()) { 372637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin throw wrongTypeOfReturnValue(invocationInfo.printMethodReturnType(), "null", invocationInfo.getMethodName()); 382637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 392637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 402637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin if (!returnsNull() && !invocationInfo.isValidReturnType(returnType())) { 412637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin throw wrongTypeOfReturnValue(invocationInfo.printMethodReturnType(), printReturnType(), invocationInfo.getMethodName()); 422637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 432637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 442637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 452637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin private String printReturnType() { 462637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return value.getClass().getSimpleName(); 472637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 482637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 492637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin private Class<?> returnType() { 502637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return value.getClass(); 512637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 522637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 532637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin private boolean returnsNull() { 542637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return value == null; 552637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 562637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 572637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin @Override 582637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public String toString() { 592637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return "Returns: " + value; 602637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 612637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin} 62