blob: d3a535ab771e1172b80536dd5d9ec21717fb730e [file] [log] [blame]
/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockito.internal.util;
import org.mockito.exceptions.Reporter;
import org.mockito.internal.util.reflection.Constructors;
import java.io.Serializable;
import java.util.Collection;
@SuppressWarnings("unchecked")
public class MockCreationValidator {
private final MockUtil mockUtil = new MockUtil();
public void validateType(Class classToMock) {
if (!mockUtil.isTypeMockable(classToMock)) {
new Reporter().cannotMockFinalClass(classToMock);
}
}
public void validateExtraInterfaces(Class classToMock, Collection<Class> extraInterfaces) {
if (extraInterfaces == null) {
return;
}
for (Class i : extraInterfaces) {
if (classToMock == i) {
new Reporter().extraInterfacesCannotContainMockedType(classToMock);
}
}
}
public void validateMockedType(Class classToMock, Object spiedInstance) {
if (classToMock == null || spiedInstance == null) {
return;
}
if (!classToMock.equals(spiedInstance.getClass())) {
new Reporter().mockedTypeIsInconsistentWithSpiedInstanceType(classToMock, spiedInstance);
}
}
public void validateDelegatedInstance(Class classToMock, Object delegatedInstance) {
if (classToMock == null || delegatedInstance == null) {
return;
}
if (delegatedInstance.getClass().isAssignableFrom(classToMock)) {
new Reporter().mockedTypeIsInconsistentWithDelegatedInstanceType(classToMock, delegatedInstance);
}
}
public void validateSerializable(Class classToMock, boolean serializable) {
// We can't catch all the errors with this piece of code
// Having a **superclass that do not implements Serializable** might fail as well when serialized
// Though it might prevent issues when mockito is mocking a class without superclass.
if(serializable
&& !classToMock.isInterface()
&& !(Serializable.class.isAssignableFrom(classToMock))
&& Constructors.noArgConstructorOf(classToMock) == null
) {
new Reporter().serializableWontWorkForObjectsThatDontImplementSerializable(classToMock);
}
}
}