package zenproject.meditation.android.sketch.painting; import android.view.MotionEvent; import com.juankysoriano.rainbow.core.drawing.RainbowDrawer; import org.fest.assertions.api.Assertions; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; import zenproject.meditation.android.BuildConfig; import zenproject.meditation.android.RobolectricLauncherGradleTestRunner; import zenproject.meditation.android.ZenTestBase; import zenproject.meditation.android.sketch.ZenSketch; import zenproject.meditation.android.sketch.painting.ink.InkPerformer; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @RunWith(RobolectricLauncherGradleTestRunner.class) @Config(constants = BuildConfig.class) public class SketchInteractionListenerTest extends ZenTestBase { @Mock private InkPerformer inkPerformer; @Mock private RainbowDrawer rainbowDrawer; @Mock private ZenSketch.PaintListener listener; @Mock private MotionEvent motionEvent; private SketchInteractionListener sketchInteractionListener; @Before public void setUp() { MockitoAnnotations.initMocks(this); sketchInteractionListener = new SketchInteractionListener(inkPerformer); } @Test public void testThatOnScreenTouchedPerformsResetOnInkPerformer() { sketchInteractionListener.onSketchTouched(motionEvent, rainbowDrawer); verify(inkPerformer).reset(); } @Test public void testThatIfHaveOnPaintingListenerThenOnScreenTouchFiresOnPaintingStart() { givenThatHasPaintingListener(); sketchInteractionListener.onSketchTouched(motionEvent, rainbowDrawer); verify(listener).onPaintingStart(); } @Test public void testThatIfDoesNotHaveOnPaintingListenerThenOnScreenTouchDoesNotFireOnPaintingStart() { sketchInteractionListener.onSketchTouched(motionEvent, rainbowDrawer); verify(listener, never()).onPaintingStart(); } @Test public void testThatIfHaveOnPaintingListenerThenOnScreenReleasedFiresOnPaintingEnd() { givenThatHasPaintingListener(); sketchInteractionListener.onSketchReleased(motionEvent, rainbowDrawer); verify(listener).onPaintingEnd(); } @Test public void testThatIfDoesNotHaveOnPaintingListenerThenOnScreenReleasedDoesNotFireOnPaintingEnd() { sketchInteractionListener.onSketchReleased(motionEvent, rainbowDrawer); verify(listener, never()).onPaintingEnd(); } @Test public void testThatOnFingerDraggedDoesStepOnInkPerformer() { sketchInteractionListener.onFingerDragged(motionEvent, rainbowDrawer); verify(inkPerformer).doStep(); } @Test public void testThatNewInstanceReturnsNotNullSketchInteractionListener() { Assertions.assertThat(SketchInteractionListener.newInstance(inkPerformer)).isNotNull(); } @Test public void testThatNewInstanceReturnsANewInstance() { SketchInteractionListener firstInstance = SketchInteractionListener.newInstance(inkPerformer); SketchInteractionListener secondInstance = SketchInteractionListener.newInstance(inkPerformer); Assertions.assertThat(firstInstance).isNotEqualTo(secondInstance); } private void givenThatHasPaintingListener() { sketchInteractionListener.setPaintListener(listener); } }