12637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin/*
22637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin * Copyright (c) 2007 Mockito contributors
32637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin * This program is made available under the terms of the MIT License.
42637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin */
52637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpackage org.mockito.verification;
62637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
72637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.junit.Test;
82637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.InOrder;
92637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.Mock;
102637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.exceptions.base.MockitoAssertionError;
112637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.internal.util.Timer;
122637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.internal.verification.VerificationDataImpl;
132637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockitoutil.TestBase;
142637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
1508bd32ce48b12ae751dd5c4829ff09a6fb9894f0Philip P. Moltmannimport static org.junit.Assert.fail;
162637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.Mockito.*;
172637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
182637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpublic class TimeoutTest extends TestBase {
192637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
202637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Mock
212637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    VerificationMode mode;
222637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Mock
232637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    VerificationDataImpl data;
242637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Mock
252637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    Timer timer;
262637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
272637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    private final MockitoAssertionError error = new MockitoAssertionError("");
282637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
292637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
302637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void should_pass_when_verification_passes() {
312637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        Timeout t = new Timeout(1, mode, timer);
322637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
332637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        when(timer.isCounting()).thenReturn(true);
342637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        doNothing().when(mode).verify(data);
352637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
362637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        t.verify(data);
372637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
382637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        InOrder inOrder = inOrder(timer);
392637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        inOrder.verify(timer).start();
402637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        inOrder.verify(timer).isCounting();
412637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
422637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
432637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
442637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void should_fail_because_verification_fails() {
452637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        Timeout t = new Timeout(1, mode, timer);
462637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
472637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        when(timer.isCounting()).thenReturn(true, true, true, false);
482637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        doThrow(error).
492637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        doThrow(error).
502637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        doThrow(error).
512637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        when(mode).verify(data);
522637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
532637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        try {
542637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            t.verify(data);
552637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            fail();
562637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        } catch (MockitoAssertionError e) {}
572637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
582637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        verify(timer, times(4)).isCounting();
592637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
602637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
612637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
622637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void should_pass_even_if_first_verification_fails() {
632637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        Timeout t = new Timeout(1, mode, timer);
642637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
652637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        when(timer.isCounting()).thenReturn(true, true, true, false);
662637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        doThrow(error).
672637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        doThrow(error).
682637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        doNothing().
692637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        when(mode).verify(data);
702637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
712637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        t.verify(data);
722637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        verify(timer, times(3)).isCounting();
732637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
742637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
752637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
762637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void should_try_to_verify_correct_number_of_times() {
772637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        Timeout t = new Timeout(10, mode, timer);
782637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
792637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        doThrow(error).when(mode).verify(data);
802637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        when(timer.isCounting()).thenReturn(true, true, true, true, true, false);
812637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
822637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        try {
832637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            t.verify(data);
842637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            fail();
852637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        } catch (MockitoAssertionError e) {}
862637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
872637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        verify(mode, times(5)).verify(data);
882637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
892637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
902637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin}
91