package zenproject.meditation.android.sketch.painting.flowers.branch; import com.juankysoriano.rainbow.core.matrix.RVector; import org.junit.Test; import org.junit.runner.RunWith; 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 static org.fest.assertions.api.Assertions.assertThat; @RunWith(RobolectricLauncherGradleTestRunner.class) @Config(constants = BuildConfig.class) public class BranchTest extends ZenTestBase { private static final float ANY_POSITION = 10; private static final float MIN_RADIUS = ContextRetriever.INSTANCE.getResources().getDimension(R.dimen.branch_min_radius); private static final float RADIUS_OVER_MIN = MIN_RADIUS * 2; private static final float RADIUS_UNDER_MIN = MIN_RADIUS / 2; private static final float MIN_RADIUS_TO_BLOOM = ContextRetriever.INSTANCE.getResources().getDimension(R.dimen.branch_min_bloom_radius); private static final float RADIUS_TO_BLOOM_OVER_MIN = MIN_RADIUS_TO_BLOOM * 2; private static final float RADIUS_TO_BLOOM_UNDER_MIN = MIN_RADIUS_TO_BLOOM / 2; private static final float ANY_RADIUS = 2; private static final float ANY_ANGLE = 2; private Branch branch; @Test public void testThatCreateFromCreatesBranchFromThePositionOfPassedBranch() { Branch otherBranch = Branch.createAt(ANY_POSITION, ANY_POSITION); branch = Branch.createFrom(otherBranch); assertThat(branch.getX()).isEqualTo(otherBranch.getX()); assertThat(branch.getY()).isEqualTo(otherBranch.getY()); } @Test public void testThatCreateAtCreatesBranchFromThePositionPassed() { branch = Branch.createAt(ANY_POSITION, ANY_POSITION); assertThat(branch.getX()).isEqualTo(ANY_POSITION); assertThat(branch.getY()).isEqualTo(ANY_POSITION); } @Test public void testThatIsDeadReturnsTrueIfRadiusIsLowerThanMinRadius() { branch = new Branch(new RVector(ANY_POSITION, ANY_POSITION), ANY_ANGLE, RADIUS_UNDER_MIN, 0); assertThat(branch.isDead()).isTrue(); } @Test public void testThatIsDeadReturnsFalseIFRadiusIsGreaterThanMinRadius() { branch = new Branch(new RVector(ANY_POSITION, ANY_POSITION), ANY_ANGLE, RADIUS_OVER_MIN, 0); assertThat(branch.isDead()).isFalse(); } @Test public void testThatCanBloomReturnsFalseIfRadiusIsLowerThanMinBloomRadius() { branch = new Branch(new RVector(ANY_POSITION, ANY_POSITION), ANY_ANGLE, RADIUS_TO_BLOOM_UNDER_MIN, 0); assertThat(branch.canBloom()).isFalse(); } @Test public void testThatIsDeadReturnsTrueIfRadiusIsGreaterThanMinBloomRadius() { branch = new Branch(new RVector(ANY_POSITION, ANY_POSITION), ANY_ANGLE, RADIUS_TO_BLOOM_OVER_MIN, 0); assertThat(branch.canBloom()).isTrue(); } @Test public void testThatUpdateChangesPosition() { branch = new Branch(new RVector(ANY_POSITION, ANY_POSITION), ANY_ANGLE, ANY_RADIUS, 0); branch.update(); assertThat(branch.getX()).isNotEqualTo(branch.getOldX()); assertThat(branch.getX()).isNotEqualTo(branch.getOldY()); } @Test public void testThatUpdateBacksUpPosition() { branch = new Branch(new RVector(ANY_POSITION, ANY_POSITION), ANY_ANGLE, ANY_RADIUS, 0); branch.update(); assertThat(branch.getX()).isNotEqualTo(ANY_POSITION); assertThat(branch.getX()).isNotEqualTo(ANY_POSITION); assertThat(branch.getOldX()).isEqualTo(ANY_POSITION); assertThat(branch.getOldY()).isEqualTo(ANY_POSITION); } }