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 Parkinson 6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito.internal.progress; 7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.MockSettings; 9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.exceptions.Reporter; 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.configuration.GlobalConfiguration; 11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.debugging.Localized; 12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.debugging.LocationImpl; 13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.listeners.MockingProgressListener; 14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.listeners.MockingStartedListener; 15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.invocation.Invocation; 16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.invocation.Location; 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.verification.VerificationMode; 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson@SuppressWarnings("unchecked") 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class MockingProgressImpl implements MockingProgress { 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private final Reporter reporter = new Reporter(); 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private final ArgumentMatcherStorage argumentMatcherStorage = new ArgumentMatcherStorageImpl(); 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson IOngoingStubbing iOngoingStubbing; 26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private Localized<VerificationMode> verificationMode; 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private Location stubbingInProgress = null; 28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private MockingProgressListener listener; 29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public void reportOngoingStubbing(IOngoingStubbing iOngoingStubbing) { 31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson this.iOngoingStubbing = iOngoingStubbing; 32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public IOngoingStubbing pullOngoingStubbing() { 35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson IOngoingStubbing temp = iOngoingStubbing; 36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson iOngoingStubbing = null; 37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return temp; 38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public void verificationStarted(VerificationMode verify) { 41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson validateState(); 42e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson resetOngoingStubbing(); 43e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson verificationMode = new Localized(verify); 44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 45e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 46e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson /* (non-Javadoc) 47e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @see org.mockito.internal.progress.MockingProgress#resetOngoingStubbing() 48e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 49e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public void resetOngoingStubbing() { 50e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson iOngoingStubbing = null; 51e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 52e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 53e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public VerificationMode pullVerificationMode() { 54e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (verificationMode == null) { 55e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return null; 56e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 57e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 58e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson VerificationMode temp = verificationMode.getObject(); 59e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson verificationMode = null; 60e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return temp; 61e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 62e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 63e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public void stubbingStarted() { 64e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson validateState(); 65e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson stubbingInProgress = new LocationImpl(); 66e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 67e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 68e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public void validateState() { 69e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson validateMostStuff(); 70e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 71e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson //validate stubbing: 72e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (stubbingInProgress != null) { 73e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Location temp = stubbingInProgress; 74e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson stubbingInProgress = null; 75e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson reporter.unfinishedStubbing(temp); 76e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 77e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 78e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 79e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private void validateMostStuff() { 80e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson //State is cool when GlobalConfiguration is already loaded 81e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson //this cannot really be tested functionally because I cannot dynamically mess up org.mockito.configuration.MockitoConfiguration class 82e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson GlobalConfiguration.validate(); 83e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 84e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (verificationMode != null) { 85e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Location location = verificationMode.getLocation(); 86e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson verificationMode = null; 87e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson reporter.unfinishedVerificationException(location); 88e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 89e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 90e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson getArgumentMatcherStorage().validateState(); 91e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 92e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 93e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public void stubbingCompleted(Invocation invocation) { 94e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson stubbingInProgress = null; 95e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 96e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 97e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public String toString() { 98e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return "iOngoingStubbing: " + iOngoingStubbing + 99e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson ", verificationMode: " + verificationMode + 100e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson ", stubbingInProgress: " + stubbingInProgress; 101e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 102e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 103e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public void reset() { 104e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson stubbingInProgress = null; 105e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson verificationMode = null; 106e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson getArgumentMatcherStorage().reset(); 107e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 108e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 109e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public ArgumentMatcherStorage getArgumentMatcherStorage() { 110e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return argumentMatcherStorage; 111e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 112e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 113e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public void mockingStarted(Object mock, Class classToMock) { 114e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (listener != null && listener instanceof MockingStartedListener) { 115e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson ((MockingStartedListener) listener).mockingStarted(mock, classToMock); 116e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 117e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson validateMostStuff(); 118e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 119e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 120e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public void setListener(MockingProgressListener listener) { 121e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson this.listener = listener; 122e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 123e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}