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.verification; 6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.exceptions.base.MockitoAssertionError; 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.verification.api.VerificationData; 9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.verification.VerificationMode; 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class VerificationWithTimeoutImpl { 12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson VerificationMode delegate; 14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson int timeout; 15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson int treshhold; 16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public VerificationWithTimeoutImpl(int treshhold, int millis, VerificationMode delegate) { 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson this.treshhold = treshhold; 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson this.timeout = millis; 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson this.delegate = delegate; 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public void verify(VerificationData data) { 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson int soFar = 0; 25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson MockitoAssertionError error = null; 26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson while (soFar <= timeout) { 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson try { 28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson delegate.verify(data); 29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return; 30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } catch (MockitoAssertionError e) { 31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson error = e; 32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson soFar += treshhold; 33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson sleep(treshhold); 34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (error != null) { 37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson throw error; 38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson void sleep(int sleep) { 42e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson try { 43e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Thread.sleep(sleep); 44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } catch (InterruptedException ie) { 45e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson // oups. not much luck. 46e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 47e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 48e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 49e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public VerificationMode getDelegate() { 50e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return delegate; 51e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 52e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 53e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public int getTimeout() { 54e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return timeout; 55e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 56e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 57e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public int getTreshhold() { 58e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return treshhold; 59e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 60e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}