1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/* 2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors 3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License. 4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 5e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito.internal.stubbing.answers; 6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.exceptions.base.MockitoException; 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.invocation.InvocationOnMock; 9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.stubbing.Answer; 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.util.Collection; 12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.util.LinkedList; 13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/** 15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Returns elements of the collection. Keeps returning the last element forever. 16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Might be useful on occasion when you have a collection of elements to return. 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <pre class="code"><code class="java"> 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * //this: 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * when(mock.foo()).thenReturn(1, 2, 3); 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * //is equivalent to: 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * when(mock.foo()).thenAnswer(new ReturnsElementsOf(Arrays.asList(1, 2, 3))); 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </code></pre> 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </p> 25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Also you might better want to use the static factory there 28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * {@link org.mockito.AdditionalAnswers#returnsElementsOf(java.util.Collection)} 29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </p> 30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * 31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @see org.mockito.AdditionalAnswers 32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class ReturnsElementsOf implements Answer<Object> { 34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private final LinkedList<Object> elements; 36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public ReturnsElementsOf(Collection<?> elements) { 38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (elements == null) { 39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson throw new MockitoException("ReturnsElementsOf does not accept null as constructor argument.\n" + 40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson "Please pass a collection instance"); 41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 42e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson this.elements = new LinkedList<Object>(elements); 43e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 45e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public Object answer(InvocationOnMock invocation) throws Throwable { 46e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (elements.size() == 1) 47e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return elements.get(0); 48e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson else 49e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return elements.poll(); 50e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 51e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}