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.handler; 6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.InternalMockHandler; 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.progress.HandyReturnValues; 9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.stubbing.InvocationContainer; 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.invocation.Invocation; 11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.mock.MockCreationSettings; 12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.stubbing.VoidMethodStubbable; 13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.util.List; 15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/** 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Protects the results from delegate MockHandler. Makes sure the results are valid. 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * by Szczepan Faber, created at: 5/22/12 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonclass NullResultGuardian implements InternalMockHandler { 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private final InternalMockHandler delegate; 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public NullResultGuardian(InternalMockHandler delegate) { 25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson this.delegate = delegate; 26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public Object handle(Invocation invocation) throws Throwable { 29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Object result = delegate.handle(invocation); 30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Class<?> returnType = invocation.getMethod().getReturnType(); 31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if(result == null && returnType.isPrimitive()) { 32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson //primitive values cannot be null 33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return new HandyReturnValues().returnFor(returnType); 34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } else { 35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return result; 36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson //boring delegation: 40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public MockCreationSettings getMockSettings() { 42e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return delegate.getMockSettings(); 43e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 45e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public VoidMethodStubbable voidMethodStubbable(Object mock) { 46e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return delegate.voidMethodStubbable(mock); 47e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 48e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 49e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public void setAnswersForStubbing(List answers) { 50e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson delegate.setAnswersForStubbing(answers); 51e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 52e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 53e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public InvocationContainer getInvocationContainer() { 54e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return delegate.getInvocationContainer(); 55e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 56e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson} 57