| /******************************************************************************* |
| * Copyright (c) 2010 The Eclipse Foundation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * The Eclipse Foundation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.epp.mpc.tests.util; |
| |
| import org.mockito.Mockito; |
| import org.mockito.invocation.InvocationOnMock; |
| import org.mockito.stubbing.Answer; |
| |
| public class PropertyStub<T> { |
| private final Class<T> type; |
| |
| private T value; |
| |
| public PropertyStub(Class<T> type) { |
| super(); |
| this.type = type; |
| } |
| |
| private final Answer<Void> setterAnswer = new Answer<Void>() { |
| |
| @Override |
| public Void answer(InvocationOnMock invocation) throws Throwable { |
| value = type.cast(invocation.getArguments()[0]); |
| return null; |
| } |
| }; |
| |
| private final Answer<T> getterAnswer = new Answer<T>() { |
| |
| @Override |
| public T answer(InvocationOnMock invocation) throws Throwable { |
| return value; |
| } |
| }; |
| |
| public T getValue() { |
| return value; |
| } |
| |
| public void setValue(T value) { |
| this.value = value; |
| } |
| |
| public Answer<Void> getSetterAnswer() { |
| return setterAnswer; |
| } |
| |
| public Answer<T> getGetterAnswer() { |
| return getterAnswer; |
| } |
| |
| public static <X, T> X mock(X mock, Class<T> type, T getterCall) { |
| PropertyStub<T> propertyStub = new PropertyStub<>(type); |
| Mockito.when(getterCall).thenAnswer(propertyStub.getGetterAnswer()); |
| return Mockito.doAnswer(propertyStub.getSetterAnswer()).when(mock); |
| } |
| } |