blob: 5dba3467f1d52cd75760c5394c02f725f1f3d352 [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 static org.mockito.internal.exceptions.Reporter.cannotMockClass;
import static org.mockito.internal.exceptions.Reporter.extraInterfacesCannotContainMockedType;
import static org.mockito.internal.exceptions.Reporter.mockedTypeIsInconsistentWithDelegatedInstanceType;
import static org.mockito.internal.exceptions.Reporter.mockedTypeIsInconsistentWithSpiedInstanceType;
import static org.mockito.internal.exceptions.Reporter.usingConstructorWithFancySerializable;
import java.util.Collection;
import org.mockito.mock.SerializableMode;
import org.mockito.plugins.MockMaker.TypeMockability;
@SuppressWarnings("unchecked")
public class MockCreationValidator {
public void validateType(Class<?> classToMock) {
TypeMockability typeMockability = MockUtil.typeMockabilityOf(classToMock);
if (!typeMockability.mockable()) {
throw cannotMockClass(classToMock, typeMockability.nonMockableReason());
}
}
public void validateExtraInterfaces(Class<?> classToMock, Collection<Class<?>> extraInterfaces) {
if (extraInterfaces == null) {
return;
}
for (Class<?> i : extraInterfaces) {
if (classToMock == i) {
throw extraInterfacesCannotContainMockedType(classToMock);
}
}
}
public void validateMockedType(Class<?> classToMock, Object spiedInstance) {
if (classToMock == null || spiedInstance == null) {
return;
}
if (!classToMock.equals(spiedInstance.getClass())) {
throw mockedTypeIsInconsistentWithSpiedInstanceType(classToMock, spiedInstance);
}
}
public void validateDelegatedInstance(Class<?> classToMock, Object delegatedInstance) {
if (classToMock == null || delegatedInstance == null) {
return;
}
if (delegatedInstance.getClass().isAssignableFrom(classToMock)) {
throw mockedTypeIsInconsistentWithDelegatedInstanceType(classToMock, delegatedInstance);
}
}
public void validateConstructorUse(boolean usingConstructor, SerializableMode mode) {
if (usingConstructor && mode == SerializableMode.ACROSS_CLASSLOADERS) {
throw usingConstructorWithFancySerializable(mode);
}
}
}