package zenproject.meditation.android.sketch;
import com.juankysoriano.rainbow.core.drawing.RainbowDrawer;
import com.juankysoriano.rainbow.core.event.RainbowInputController;
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.ContextRetriever;
import zenproject.meditation.android.R;
import zenproject.meditation.android.RobolectricLauncherGradleTestRunner;
import zenproject.meditation.android.ZenTestBase;
import zenproject.meditation.android.sketch.music.MusicPerformer;
import zenproject.meditation.android.sketch.painting.SketchInteractionListener;
import zenproject.meditation.android.sketch.painting.flowers.Flower;
import zenproject.meditation.android.sketch.painting.flowers.branch.BranchPerformer;
import zenproject.meditation.android.sketch.painting.flowers.branch.BranchesList;
import zenproject.meditation.android.sketch.painting.ink.InkPerformer;
import static org.mockito.Mockito.verify;
@RunWith(RobolectricLauncherGradleTestRunner.class)
@Config(constants = BuildConfig.class)
public class ZenSketchTest extends ZenTestBase {
private static final int DEFAULT_COLOR = ContextRetriever.INSTANCE.getResources().getColor(R.color.colorSketch);
private ZenSketch zenSketch;
@Mock
private MusicPerformer musicPerformer;
@Mock
private InkPerformer inkPerformer;
@Mock
private BranchPerformer branchPerformer;
@Mock
private BranchesList branchesList;
@Mock
private RainbowDrawer rainbowDrawer;
@Mock
private RainbowInputController rainbowInputController;
@Mock
private SketchInteractionListener sketchInteractionListener;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
zenSketch = new ZenSketch(musicPerformer,
inkPerformer,
branchPerformer,
rainbowDrawer,
rainbowInputController,
sketchInteractionListener);
}
@Test
public void testThatOnSketchSetupInitInkPerformer() {
zenSketch.onSketchSetup();
verify(inkPerformer).init();
}
@Test
public void testThatOnSketchSetupInitBranchPerformer() {
zenSketch.onSketchSetup();
verify(branchPerformer).init();
}
@Test
public void testThatOnSketchSetupInitMusicPerformer() {
zenSketch.onSketchSetup();
verify(musicPerformer).init();
}
@Test
public void testThatOnDrawingStepPerformsStepOnBranchPerformer() {
zenSketch.onDrawingStep();
verify(branchPerformer).doStep();
}
@Test
public void testThatOnDrawingStepPerformsStepOnMusicPerformer() {
zenSketch.onDrawingStep();
verify(musicPerformer).doStep();
}
@Test
public void testThatOnDrawingPauseDisablesMusicPerformer() {
zenSketch.onDrawingPause();
verify(musicPerformer).disable();
}
@Test
public void testThatOnDrawingResumeEnablesMusicPerformer() {
zenSketch.onDrawingResume();
verify(musicPerformer).enable();
}
@Test
public void testThatOnFlowerSelectedDelegatesToBranchDrawer() {
zenSketch.onFlowerSelected(Flower.POPPY);
verify(branchPerformer).onFlowerSelected(Flower.POPPY);
}
@Test
public void testThatClearRestoresDefaultColorToRainbowDrawer() {
zenSketch.clear();
verify(rainbowDrawer).background(DEFAULT_COLOR);
}
@Test
public void testThatClearPerformsResetOnBranchPerformer() {
zenSketch.clear();
verify(branchPerformer).reset();
}
@Test
public void testThatNewInstanceReturnsNotNullBrushOptionsPreferences() {
Assertions.assertThat(ZenSketch.newInstance()).isNotNull();
}
@Test
public void testThatNewInstanceReturnsANewInstance() {
ZenSketch firstInstance = ZenSketch.newInstance();
ZenSketch secondInstance = ZenSketch.newInstance();
Assertions.assertThat(firstInstance).isNotEqualTo(secondInstance);
}
}