12637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpackage org.mockito.internal.framework;
22637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
32637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.Mockito;
42637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.MockitoAnnotations;
52637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.MockitoSession;
62637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.exceptions.misusing.RedundantListenerException;
72637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.internal.exceptions.Reporter;
82637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.internal.junit.TestFinishedEvent;
92637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.internal.junit.UniversalTestListener;
102637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.internal.util.MockitoLogger;
112637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.quality.Strictness;
122637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
132637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpublic class DefaultMockitoSession implements MockitoSession {
142637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
152637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    private final Object testClassInstance;
162637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    private final UniversalTestListener listener;
172637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
182637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public DefaultMockitoSession(Object testClassInstance, Strictness strictness, MockitoLogger logger) {
192637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        this.testClassInstance = testClassInstance;
202637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        listener = new UniversalTestListener(strictness, logger);
212637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        try {
222637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            //So that the listener can capture mock creation events
232637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            Mockito.framework().addListener(listener);
242637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        } catch (RedundantListenerException e) {
252637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            Reporter.unfinishedMockingSession();
262637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        }
272637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        MockitoAnnotations.initMocks(testClassInstance);
282637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
292637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
302637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void finishMocking() {
312637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        //Cleaning up the state, we no longer need the listener hooked up
322637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        //The listener implements MockCreationListener and at this point
332637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        //we no longer need to listen on mock creation events. We are wrapping up the session
342637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        Mockito.framework().removeListener(listener);
352637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
362637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        //Emit test finished event so that validation such as strict stubbing can take place
372637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        listener.testFinished(new TestFinishedEvent() {
382637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            public Throwable getFailure() {
392637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                return null;
402637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            }
412637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            public Object getTestClassInstance() {
422637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                return testClassInstance;
432637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            }
442637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            public String getTestMethodName() {
452637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin                return null;
462637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            }
472637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        });
482637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
492637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        //Finally, validate user's misuse of Mockito framework.
502637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        Mockito.validateMockitoUsage();
512637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
522637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin}
53