package org.teachingextensions.logo.tests; import org.junit.Test; import org.teachingextensions.approvals.lite.Approvals; import org.teachingextensions.approvals.lite.reporters.DelayedClipboardReporter; import org.teachingextensions.approvals.lite.reporters.DiffReporter; import org.teachingextensions.approvals.lite.reporters.UseReporter; import org.teachingextensions.approvals.lite.util.JUnitUtils; import org.teachingextensions.approvals.lite.util.lambda.Function1; import org.teachingextensions.logo.Turtle; import org.teachingextensions.logo.utils.ColorUtils.PenColors; import org.teachingextensions.logo.utils.ColorUtils.Wheel; import java.awt.*; import static org.junit.Assert.assertEquals; @UseReporter({DiffReporter.class, DelayedClipboardReporter.class}) public class TurtleTest { @Test public void testShow() throws Exception { JUnitUtils.assumeNotHeadless(); Turtle turtle = TurtleTestUtils.getTurtle(); Approvals.verify(turtle.getImage()); } @Test public void testRotate() throws Exception { JUnitUtils.assumeNotHeadless(); Turtle turtle = TurtleTestUtils.getTurtle(); turtle.turn(90); Approvals.verify(turtle.getImage()); } @Test public void testRotate45() throws Exception { JUnitUtils.assumeNotHeadless(); Turtle turtle = TurtleTestUtils.getTurtle(); turtle.turn(45); Approvals.verify(turtle.getImage()); assertEquals(45.0, turtle.getAngleInDegrees(), 0.02); } @Test public void testRotate45CounterClockwise() throws Exception { JUnitUtils.assumeNotHeadless(); Turtle turtle = TurtleTestUtils.getTurtle(); turtle.turn(-45); Approvals.verify(turtle.getImage()); } @Test public void testMove() throws Exception { JUnitUtils.assumeNotHeadless(); Turtle turtle = TurtleTestUtils.getTurtle(); turtle.move(50); Approvals.verify(turtle.getImage()); } @Test public void testMove45DegreesLeft() throws Exception { JUnitUtils.assumeNotHeadless(); Turtle turtle = TurtleTestUtils.getTurtle(); turtle.turn(-45); turtle.move(50); Approvals.verify(turtle.getImage()); } @Test public void testPentagonCrazy() throws Exception { JUnitUtils.assumeNotHeadless(); Turtle turtle = TurtleTestUtils.getTurtle(); Wheel<Color> wheel = new Wheel<Color>(); wheel.add(PenColors.Blues.SteelBlue); wheel.add(PenColors.Purples.DarkMagenta); wheel.add(PenColors.Blues.DarkSlateBlue); wheel.add(PenColors.Purples.Indigo); wheel.add(PenColors.Purples.DarkOrchid); Wheel<Integer> thickness = new Wheel<Integer>(1, 2, 3); for (int i = 0; i < 200; i++) { turtle.setPenColor(wheel.next()); turtle.setPenWidth(thickness.next()); turtle.move(i + 1); turtle.turn(360 / 5); turtle.turn(1); } Approvals.verify(turtle.getImage()); } @Test public void testPenDown() throws Exception { JUnitUtils.assumeNotHeadless(); Turtle turtle = TurtleTestUtils.getTurtle(); for (int i = 0; i < 3; i++) { turtle.move(10); turtle.penUp(); turtle.move(10); turtle.penDown(); } Approvals.verify(turtle.getImage()); } @Test public void testHide() throws Exception { JUnitUtils.assumeNotHeadless(); Turtle turtle = TurtleTestUtils.getTurtle(); turtle.move(50); turtle.hide(); Approvals.verify(turtle.getImage()); } @Test public void testSpeed() throws Exception { Integer[] speeds = {-5, 5, 15, Turtle.TEST_SPEED}; Approvals.verifyAll("Speeds", speeds, new Function1<Integer, String>() { @Override public String call(Integer speed) { try { Turtle turtle = TurtleTestUtils.getTurtle(); turtle.setSpeed(speed); return speed + " => " + turtle.getSpeed(); } catch (Exception e) { return speed + " => " + e.getMessage(); } } }); } @Test public void testClear() throws Exception { JUnitUtils.assumeNotHeadless(); Turtle turtle = TurtleTestUtils.getTurtle(); turtle.clear(); Approvals.verify(turtle.getImage()); } }