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.debugging;
6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.invocation.InvocationMatcher;
8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.util.MockitoLogger;
9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.invocation.Invocation;
10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport static org.mockito.internal.util.StringJoiner.join;
12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class LoggingListener implements FindingsListener {
14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    private boolean warnAboutUnstubbed;
15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    private final MockitoLogger logger;
16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public LoggingListener(boolean warnAboutUnstubbed, MockitoLogger logger) {
18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        this.warnAboutUnstubbed = warnAboutUnstubbed;
19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        this.logger = logger;
20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public void foundStubCalledWithDifferentArgs(Invocation unused, InvocationMatcher unstubbed) {
23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        logger.log(join(
24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                " *** Stubbing warnings from Mockito: *** ",
25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                "",
26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                "stubbed with those args here   " + unused.getLocation(),
27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                "BUT called with different args " + unstubbed.getInvocation().getLocation(),
28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                ""));
29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public void foundUnusedStub(Invocation unused) {
32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        logger.log("This stubbing was never used   " + unused.getLocation() + "\n");
33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public void foundUnstubbed(InvocationMatcher unstubbed) {
36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        if (warnAboutUnstubbed) {
37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            logger.log(join(
38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                    "This method was not stubbed ",
39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                    unstubbed,
40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                    unstubbed.getInvocation().getLocation(),
41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                    ""));
42e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        }
43e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
45e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public boolean isWarnAboutUnstubbed() {
46e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        return warnAboutUnstubbed;
47e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
48e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
49e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public MockitoLogger getLogger() {
50e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        return logger;
51e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
52e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}