1/*
2 * Copyright (c) 2007 Mockito contributors
3 * This program is made available under the terms of the MIT License.
4 */
5package org.mockito.internal.matchers;
6
7import org.mockito.ArgumentMatcher;
8
9import static org.mockito.internal.exceptions.Reporter.noArgumentValueWasCaptured;
10
11import java.io.Serializable;
12import java.util.LinkedList;
13import java.util.List;
14
15@SuppressWarnings("unchecked")
16public class CapturingMatcher<T> implements ArgumentMatcher<T>, CapturesArguments, VarargMatcher, Serializable {
17
18    private final LinkedList<Object> arguments = new LinkedList<Object>();
19
20    public boolean matches(Object argument) {
21        return true;
22    }
23
24    public String toString() {
25        return "<Capturing argument>";
26    }
27
28    public T getLastValue() {
29        if (arguments.isEmpty()) {
30            throw noArgumentValueWasCaptured();
31        }
32
33        return (T) arguments.getLast();
34
35    }
36
37    public List<T> getAllValues() {
38        return (List) arguments;
39    }
40
41    public void captureFrom(Object argument) {
42        this.arguments.add(argument);
43    }
44}
45