blob: d68360539296532d703c64213343e5fa11e7840b [file] [log] [blame]
/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockito.internal.stubbing.answers;
import java.lang.reflect.Method;
import java.nio.charset.CharacterCodingException;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.internal.invocation.InvocationBuilder;
import org.mockito.invocation.Invocation;
import org.mockitousage.IMethods;
import org.mockitoutil.TestBase;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockitoutil.TestBase.getLastInvocation;
public class InvocationInfoTest {
@Test
public void should_know_valid_throwables() throws Exception {
//when
Invocation invocation = new InvocationBuilder().method("canThrowException").toInvocation();
InvocationInfo info = new InvocationInfo(invocation);
//then
assertThat(info.isValidException(new Exception())).isFalse();
assertThat(info.isValidException(new CharacterCodingException())).isTrue();
}
@Test
public void should_know_valid_return_types() throws Exception {
assertThat(new InvocationInfo(new InvocationBuilder().method("integerReturningMethod").toInvocation()).isValidReturnType(Integer.class)).isTrue();
assertThat(new InvocationInfo(new InvocationBuilder().method("integerReturningMethod").toInvocation()).isValidReturnType(int.class)).isTrue();
assertThat(new InvocationInfo(new InvocationBuilder().method("intReturningMethod").toInvocation()).isValidReturnType(Integer.class)).isTrue();
assertThat(new InvocationInfo(new InvocationBuilder().method("intReturningMethod").toInvocation()).isValidReturnType(int.class)).isTrue();
assertThat(new InvocationInfo(new InvocationBuilder().method("integerReturningMethod").toInvocation()).isValidReturnType(String.class)).isFalse();
}
@Test
public void should_know_when_invocation_returns_primitive() {
assertThat(new InvocationInfo(new InvocationBuilder().method("intReturningMethod").toInvocation()).returnsPrimitive()).isTrue();
assertThat(new InvocationInfo(new InvocationBuilder().method("integerReturningMethod").toInvocation()).returnsPrimitive()).isFalse();
}
@Test
public void should_know_when_invocation_returns_void() {
assertThat(new InvocationInfo(new InvocationBuilder().method("voidMethod").toInvocation()).isVoid()).isTrue();
assertThat(new InvocationInfo(new InvocationBuilder().method("integerReturningMethod").toInvocation()).isVoid()).isFalse();
}
@Test
public void should_read_the_method_name() {
assertThat(new InvocationInfo(new InvocationBuilder().method("voidMethod").toInvocation()).getMethodName()).isEqualTo("voidMethod");
}
@Test
public void should_read_the_method_return_name() {
assertThat(new InvocationInfo(new InvocationBuilder().method("voidMethod").toInvocation()).printMethodReturnType()).isEqualTo("void");
assertThat(new InvocationInfo(new InvocationBuilder().method("integerReturningMethod").toInvocation()).printMethodReturnType()).isEqualTo("Integer");
assertThat(new InvocationInfo(new InvocationBuilder().method("intReturningMethod").toInvocation()).printMethodReturnType()).isEqualTo("int");
}
@Test
public void should_know_abstract_method() throws Exception { // To be extended with Java 8
assertThat(new InvocationInfo(new InvocationBuilder().method(iAmAbstract()).toInvocation()).isAbstract()).isTrue();
assertThat(new InvocationInfo(new InvocationBuilder().method(iAmNotAbstract()).toInvocation()).isAbstract()).isFalse();
}
@Test
public void should_know_method_is_declared_on_interface() throws Exception {
assertThat(new InvocationInfo(new InvocationBuilder().method(iAmAbstract()).toInvocation()).isDeclaredOnInterface()).isFalse();
assertThat(new InvocationInfo(new InvocationBuilder().method("voidMethod").toInvocation()).isDeclaredOnInterface()).isTrue();
}
@Test
public void isVoid_invocationOnVoidMethod_returnTrue(){
mock(IMethods.class).voidMethod();
InvocationInfo voidMethod = new InvocationInfo(getLastInvocation());
assertThat(voidMethod.isVoid()).isTrue();
}
@Test
public void isVoid_invocationOnVoidReturningMethod_returnTrue(){
mock(IMethods.class).voidReturningMethod();
InvocationInfo voidRetuningMethod = new InvocationInfo(getLastInvocation());
assertThat(voidRetuningMethod.isVoid()).isTrue();
}
@Test
public void isVoid_invocationNonVoidMethod_returnFalse(){
mock(IMethods.class).simpleMethod();
InvocationInfo stringReturningMethod = new InvocationInfo(getLastInvocation());
assertThat(stringReturningMethod.isVoid()).isFalse();
}
private Method iAmAbstract() throws NoSuchMethodException {
abstract class TheAbstract {
abstract void iAmAbstract();
}
return TheAbstract.class.getDeclaredMethod("iAmAbstract");
}
private Method iAmNotAbstract() throws NoSuchMethodException {
abstract class TheNotAbstract {
void iAmNotAbstract() {};
}
return TheNotAbstract.class.getDeclaredMethod("iAmNotAbstract");
}
}