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.debugging;
6
7import org.mockito.MockitoDebugger;
8import org.mockito.internal.invocation.UnusedStubsFinder;
9import org.mockito.internal.invocation.finder.AllInvocationsFinder;
10import org.mockito.invocation.Invocation;
11
12import java.util.List;
13
14import static java.util.Arrays.asList;
15
16public class MockitoDebuggerImpl implements MockitoDebugger {
17
18    private AllInvocationsFinder allInvocationsFinder = new AllInvocationsFinder();
19    private UnusedStubsFinder unusedStubsFinder = new UnusedStubsFinder();
20
21    public String printInvocations(Object ... mocks) {
22        String out = "";
23        List<Invocation> invocations = allInvocationsFinder.find(asList(mocks));
24        out += line("********************************");
25        out += line("*** Mockito interactions log ***");
26        out += line("********************************");
27        for(Invocation i:invocations) {
28            out += line(i.toString());
29            out += line(" invoked: " + i.getLocation());
30            if (i.stubInfo() != null) {
31                out += line(" stubbed: " + i.stubInfo().stubbedAt().toString());
32            }
33        }
34
35        invocations = unusedStubsFinder.find(asList(mocks));
36        if (invocations.isEmpty()) {
37            return print(out);
38        }
39        out += line("********************************");
40        out += line("***       Unused stubs       ***");
41        out += line("********************************");
42
43        for(Invocation i:invocations) {
44            out += line(i.toString());
45            out += line(" stubbed: " + i.getLocation());
46        }
47        return print(out);
48    }
49
50    private String line(String text) {
51        return text + "\n";
52    }
53
54    private String print(String out) {
55        System.out.println(out);
56        return out;
57    }
58}