blob: 30b03dfe11be7bdd08c4c883f850cb59e2572f52 [file] [log] [blame]
/*
* 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();
}
}