package rmblworx.tools.timey;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.when;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import rmblworx.tools.timey.exception.NullArgumentException;
import rmblworx.tools.timey.vo.TimeDescriptor;
/*
* Copyright 2014-2015 Christian Raue
* MIT License http://opensource.org/licenses/mit-license.php
*/
/**
* Tests für die Countdown Implementierung.
*
* @author mmatthies
*/
public class CountdownTest {
/**
* Irgend ein Zeitwert. Der Wert spielt hier keine Rolle.
*/
private static final Long EXPECTED_MILLISECONDS = 1000L;
/**
* Fehlermeldungstext für ausbleibende Exception.
*/
private static final String KEINE_AUSNAHME_GEWORFEN = "Es wurde keine Ausnahme geworfen!";
/**
* Fehlermeldungstext.
*/
private static final String UNERWARTETER_RUECKGABEWERT = "Unerwartete Rückgabe!";
/**
* Zu testende Klasse.
*/
private ICountdown countdown;
/**
* Gemocktes CountdownTimer-Objekt.
*/
@Mock
private ICountdownTimer countdownTimer;
/**
* Gemocktes TimeDescriptor-Objekt.
*/
@Mock
private TimeDescriptor timeDescriptor;
/**
* @throws java.lang.Exception
* wenn eine Ausnahme auftritt.
*/
@Before
public final void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
this.setupMockedTimeDescriptor();
this.setupMockedCountdownTimer();
this.countdown = new Countdown(this.countdownTimer, 1, TimeUnit.MILLISECONDS);
}
/**
* Setup-Methode für das CountdownTimer-Objekt.
*/
private void setupMockedCountdownTimer() {
when(this.countdownTimer.setCountdownTime(this.timeDescriptor)).thenReturn(Boolean.TRUE);
when(this.countdownTimer.startCountdown(1, TimeUnit.MILLISECONDS)).thenReturn(this.timeDescriptor);
when(this.countdownTimer.stopCountdown()).thenReturn(Boolean.TRUE);
}
/**
* Setup-Methode für das TimeDescriptor-Objekt.
*/
private void setupMockedTimeDescriptor() {
when(this.timeDescriptor.getMilliSeconds()).thenReturn(EXPECTED_MILLISECONDS);
}
/**
* @throws java.lang.Exception
* wenn eine Ausnahme auftritt.
*/
@After
public final void tearDown() throws Exception {
this.countdownTimer = null;
this.timeDescriptor = null;
this.countdown = null;
}
/**
* Test method for {@link Countdown#setCountdownTime(TimeDescriptor)}.
*/
@Test
public final void testSetCountdownTime() {
final Boolean actual = this.countdown.setCountdownTime(this.timeDescriptor);
assertTrue(UNERWARTETER_RUECKGABEWERT, actual);
}
/**
* Test method for {@link Countdown#setCountdownTime(TimeDescriptor)}.
*/
@Test(expected = NullArgumentException.class)
public final void testSetCountdownTimeShouldThrowNullArgumentException() {
this.countdown.setCountdownTime(null);
fail(KEINE_AUSNAHME_GEWORFEN);
}
/**
* Test method for {@link Countdown#startCountdown()}.
*/
@Test
public final void testStartCountdown() {
final TimeDescriptor actual = this.countdown.startCountdown();
assertNotNull(UNERWARTETER_RUECKGABEWERT, actual);
}
/**
* Test method for {@link Countdown#stopCountdown()}.
*/
@Test
public final void testStopCountdown() {
final Boolean actual = this.countdown.stopCountdown();
assertTrue(UNERWARTETER_RUECKGABEWERT, actual);
}
}