| /* |
| * 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; |
| } |
| }; |
| } |
| } |