blob: e1a92a4a8433104efff0173378c06de25c5bf8c9 [file] [log] [blame]
/*
* Copyright (c) 2016 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockito.internal.stubbing.answers;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.mockito.stubbing.Answer1;
import org.mockito.stubbing.Answer2;
import org.mockito.stubbing.Answer3;
import org.mockito.stubbing.Answer4;
import org.mockito.stubbing.Answer5;
import org.mockito.stubbing.VoidAnswer1;
import org.mockito.stubbing.VoidAnswer2;
import org.mockito.stubbing.VoidAnswer3;
import org.mockito.stubbing.VoidAnswer4;
import org.mockito.stubbing.VoidAnswer5;
/**
* Functional interfaces to make it easy to implement answers in Java 8
*
* @since 2.1.0
*/
public class AnswerFunctionalInterfaces {
/**
* Hide constructor to avoid instantiation of class with only static methods
*/
private AnswerFunctionalInterfaces() {
}
/**
* Construct an answer from a two parameter answer interface
* @param answer answer interface
* @param <T> return type
* @param <A> input parameter 1 type
* @return a new answer object
*/
public static <T, A> Answer<T> toAnswer(final Answer1<T, A> answer) {
return new Answer<T>() {
@SuppressWarnings("unchecked")
public T answer(InvocationOnMock invocation) throws Throwable {
return answer.answer((A)invocation.getArgument(0));
}
};
}
/**
* Construct an answer from a two parameter answer interface
* @param answer answer interface
* @param <A> input parameter 1 type
* @return a new answer object
*/
public static <A> Answer<Void> toAnswer(final VoidAnswer1<A> answer) {
return new Answer<Void>() {
@SuppressWarnings("unchecked")
public Void answer(InvocationOnMock invocation) throws Throwable {
answer.answer((A)invocation.getArgument(0));
return null;
}
};
}
/**
* Construct an answer from a two parameter answer interface
* @param answer answer interface
* @param <T> return type
* @param <A> input parameter 1 type
* @param <B> input parameter 2 type
* @return a new answer object
*/
public static <T, A, B> Answer<T> toAnswer(final Answer2<T, A, B> answer) {
return new Answer<T>() {
@SuppressWarnings("unchecked")
public T answer(InvocationOnMock invocation) throws Throwable {
return answer.answer(
(A)invocation.getArgument(0),
(B)invocation.getArgument(1));
}
};
}
/**
* Construct an answer from a two parameter answer interface
* @param answer answer interface
* @param <A> input parameter 1 type
* @param <B> input parameter 2 type
* @return a new answer object
*/
public static <A, B> Answer<Void> toAnswer(final VoidAnswer2<A, B> answer) {
return new Answer<Void>() {
@SuppressWarnings("unchecked")
public Void answer(InvocationOnMock invocation) throws Throwable {
answer.answer(
(A)invocation.getArgument(0),
(B)invocation.getArgument(1));
return null;
}
};
}
/**
* Construct an answer from a three parameter answer interface
* @param answer answer interface
* @param <T> return type
* @param <A> input parameter 1 type
* @param <B> input parameter 2 type
* @param <C> input parameter 3 type
* @return a new answer object
*/
public static <T, A, B, C> Answer<T> toAnswer(final Answer3<T, A, B, C> answer) {
return new Answer<T>() {
@SuppressWarnings("unchecked")
public T answer(InvocationOnMock invocation) throws Throwable {
return answer.answer(
(A)invocation.getArgument(0),
(B)invocation.getArgument(1),
(C)invocation.getArgument(2));
}
};
}
/**
* Construct an answer from a three parameter answer interface
* @param answer answer interface
* @param <A> input parameter 1 type
* @param <B> input parameter 2 type
* @param <C> input parameter 3 type
* @return a new answer object
*/
public static <A, B, C> Answer<Void> toAnswer(final VoidAnswer3<A, B, C> answer) {
return new Answer<Void>() {
@SuppressWarnings("unchecked")
public Void answer(InvocationOnMock invocation) throws Throwable {
answer.answer(
(A)invocation.getArgument(0),
(B)invocation.getArgument(1),
(C)invocation.getArgument(2));
return null;
}
};
}
/**
* Construct an answer from a four parameter answer interface
* @param answer answer interface
* @param <T> return type
* @param <A> input parameter 1 type
* @param <B> input parameter 2 type
* @param <C> input parameter 3 type
* @param <D> input parameter 4 type
* @return a new answer object
*/
public static <T, A, B, C, D> Answer<T> toAnswer(final Answer4<T, A, B, C, D> answer) {
return new Answer<T>() {
@SuppressWarnings("unchecked")
public T answer(InvocationOnMock invocation) throws Throwable {
return answer.answer(
(A)invocation.getArgument(0),
(B)invocation.getArgument(1),
(C)invocation.getArgument(2),
(D)invocation.getArgument(3));
}
};
}
/**
* Construct an answer from a four parameter answer interface
* @param answer answer interface
* @param <A> input parameter 1 type
* @param <B> input parameter 2 type
* @param <C> input parameter 3 type
* @param <D> input parameter 4 type
* @return a new answer object
*/
public static <A, B, C, D> Answer<Void> toAnswer(final VoidAnswer4<A, B, C, D> answer) {
return new Answer<Void>() {
@SuppressWarnings("unchecked")
public Void answer(InvocationOnMock invocation) throws Throwable {
answer.answer(
(A)invocation.getArgument(0),
(B)invocation.getArgument(1),
(C)invocation.getArgument(2),
(D)invocation.getArgument(3));
return null;
}
};
}
/**
* Construct an answer from a five parameter answer interface
* @param answer answer interface
* @param <T> return type
* @param <A> input parameter 1 type
* @param <B> input parameter 2 type
* @param <C> input parameter 3 type
* @param <D> input parameter 4 type
* @param <E> input parameter 5 type
* @return a new answer object
*/
public static <T, A, B, C, D, E> Answer<T> toAnswer(final Answer5<T, A, B, C, D, E> answer) {
return new Answer<T>() {
@SuppressWarnings("unchecked")
public T answer(InvocationOnMock invocation) throws Throwable {
return answer.answer(
(A)invocation.getArgument(0),
(B)invocation.getArgument(1),
(C)invocation.getArgument(2),
(D)invocation.getArgument(3),
(E)invocation.getArgument(4));
}
};
}
/**
* Construct an answer from a five parameter answer interface
* @param answer answer interface
* @param <A> input parameter 1 type
* @param <B> input parameter 2 type
* @param <C> input parameter 3 type
* @param <D> input parameter 4 type
* @param <E> input parameter 5 type
* @return a new answer object
*/
public static <A, B, C, D, E> Answer<Void> toAnswer(final VoidAnswer5<A, B, C, D, E> answer) {
return new Answer<Void>() {
@SuppressWarnings("unchecked")
public Void answer(InvocationOnMock invocation) throws Throwable {
answer.answer(
(A)invocation.getArgument(0),
(B)invocation.getArgument(1),
(C)invocation.getArgument(2),
(D)invocation.getArgument(3),
(E)invocation.getArgument(4));
return null;
}
};
}
}