package es.jonatantierno.scrumdailytimer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; @RunWith(RobolectricTestRunner.class) @Config(manifest = "../ScrumDailyTimer/AndroidManifest.xml") public class SlotSeekBarControllerTest { SlotSeekBarController out; OnSeekBarChangeListener capturedListener; SeekBar mockSeekBar; ChronoInterface mockChronoInterface; @Before public void setUp() throws Exception { // Fixture mockSeekBar = mock(SeekBar.class); mockChronoInterface = mock(ChronoInterface.class); out = new SlotSeekBarController(); out.configure(mockSeekBar, mockChronoInterface); capturedListener = out.getListener(); } /** * A listener must be assigned to the seekbar. */ @Test public void whenSeekBarIsSetThenAssignListener() { verify(mockSeekBar).setOnSeekBarChangeListener(out.getListener()); } /** * Values allowed are multiples of the mininum increment (30 secs). Also, miminum is 30. */ @Test public void whenDragThenMoveToNearestMultipleOfTheMinimumIncrement() { capturedListener.onProgressChanged(mockSeekBar, 50, false); verify(mockSeekBar).setProgress(60); capturedListener.onProgressChanged(mockSeekBar, 100, false); verify(mockSeekBar).setProgress(90); capturedListener.onProgressChanged(mockSeekBar, 0, false); verify(mockSeekBar).setProgress(30); capturedListener.onProgressChanged(mockSeekBar, 290, false); verify(mockSeekBar).setProgress(300); } /** * Values allowed are multiples of the mininum increment (30 secs). Also, miminum is 30. */ @Test public void whenStoppedThenMoveToNearestMultipleOfTheMinimumIncrement() { when(mockSeekBar.getProgress()).thenReturn(50).thenReturn(100).thenReturn(0).thenReturn(290); capturedListener.onStopTrackingTouch(mockSeekBar); verify(mockSeekBar).setProgress(60); capturedListener.onStopTrackingTouch(mockSeekBar); verify(mockSeekBar).setProgress(90); capturedListener.onStopTrackingTouch(mockSeekBar); verify(mockSeekBar).setProgress(30); capturedListener.onStopTrackingTouch(mockSeekBar); verify(mockSeekBar).setProgress(300); } /** * Should update chrono view */ @Test public void shouldUpdateChrono() { capturedListener.onProgressChanged(mockSeekBar, 50, false); verify(mockChronoInterface).setTime(60); capturedListener.onProgressChanged(mockSeekBar, 100, false); verify(mockChronoInterface).setTime(90); capturedListener.onProgressChanged(mockSeekBar, 0, false); verify(mockChronoInterface).setTime(30); capturedListener.onProgressChanged(mockSeekBar, 290, false); verify(mockChronoInterface).setTime(300); } }