| /* |
| * Copyright (c) 2007 Mockito contributors |
| * This program is made available under the terms of the MIT License. |
| */ |
| package org.mockito.internal.handler; |
| |
| import org.mockito.internal.InternalMockHandler; |
| import org.mockito.internal.progress.HandyReturnValues; |
| import org.mockito.internal.stubbing.InvocationContainer; |
| import org.mockito.invocation.Invocation; |
| import org.mockito.mock.MockCreationSettings; |
| import org.mockito.stubbing.VoidMethodStubbable; |
| |
| import java.util.List; |
| |
| /** |
| * Protects the results from delegate MockHandler. Makes sure the results are valid. |
| * |
| * by Szczepan Faber, created at: 5/22/12 |
| */ |
| class NullResultGuardian implements InternalMockHandler { |
| private final InternalMockHandler delegate; |
| |
| public NullResultGuardian(InternalMockHandler delegate) { |
| this.delegate = delegate; |
| } |
| |
| public Object handle(Invocation invocation) throws Throwable { |
| Object result = delegate.handle(invocation); |
| Class<?> returnType = invocation.getMethod().getReturnType(); |
| if(result == null && returnType.isPrimitive()) { |
| //primitive values cannot be null |
| return new HandyReturnValues().returnFor(returnType); |
| } else { |
| return result; |
| } |
| } |
| |
| //boring delegation: |
| |
| public MockCreationSettings getMockSettings() { |
| return delegate.getMockSettings(); |
| } |
| |
| public VoidMethodStubbable voidMethodStubbable(Object mock) { |
| return delegate.voidMethodStubbable(mock); |
| } |
| |
| public void setAnswersForStubbing(List answers) { |
| delegate.setAnswersForStubbing(answers); |
| } |
| |
| public InvocationContainer getInvocationContainer() { |
| return delegate.getInvocationContainer(); |
| } |
| } |