package org.teachingextensions.logo.tests;
import java.awt.Color;
import java.util.HashMap;
import junit.framework.TestCase;
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.logo.Turtle;
import org.teachingextensions.logo.utils.ColorUtils.PenColors;
import org.teachingextensions.logo.utils.ColorUtils.Wheel;
@UseReporter({DiffReporter.class, DelayedClipboardReporter.class})
public class RecipeTests extends TestCase
{
public void testSimpleSquare() throws Exception
{
Turtle turtle = new Turtle();
turtle.setSpeed(Turtle.TEST_SPEED);
turtle.show();
for (int i = 0; i < 4; i++)
{
turtle.setPenColor(PenColors.Blues.SteelBlue);
turtle.move(50);
turtle.turn(90);
}
Approvals.verify(turtle.getImage());
}
public void testCircle() throws Exception
{
Turtle turtle = new Turtle();
turtle.setSpeed(Turtle.TEST_SPEED);
turtle.show();
int sides = 35;
for (int i = 0; i < sides; i++)
{
turtle.setPenColor(PenColors.Reds.OrangeRed);
turtle.move(18);
turtle.turn(360.0 / sides);
}
Approvals.verify(turtle.getImage());
}
public void testSpiral() throws Exception
{
Color color = PenColors.Purples.Violet;
Turtle turtle = new Turtle();
turtle.setSpeed(Turtle.TEST_SPEED);
for (int i = 0; i < 25; i++)
{
turtle.setPenColor(color);
turtle.move(3 * i);
turtle.turn(90);
color = PenColors.darken(color);
}
Approvals.verify(turtle.getImage());
}
public void testFourSquare() throws Exception
{
Turtle turtle = new Turtle();
PenColors.mockRandom();
turtle.setSpeed(Turtle.TEST_SPEED);
for (int i = 0; i < 4; i++)
{
drawSquare(turtle);
turtle.turn(90);
}
Approvals.verify(turtle.getImage());
}
private void drawSquare(Turtle turtle)
{
for (int i = 0; i < 4; i++)
{
turtle.setPenColor(PenColors.getRandomColor());
turtle.move(50);
turtle.turn(90);
}
}
public void testDigiGirlzFlower() throws Exception
{
Turtle turtle = new Turtle();
turtle.setSpeed(Turtle.TEST_SPEED);
turtle.show();
turtle.getBackgroundWindow().setColor(PenColors.Grays.Silver);
Wheel<Color> palette = setupColors();
turtle.setPenWidth(3);
for (int i = 0; i < 15; i++)
{
drawOctogon(turtle, palette);
turtle.turn(360 / 15);
}
Approvals.verify(turtle.getImage());
}
private void drawOctogon(Turtle turtle, Wheel<Color> palette)
{
for (int i = 0; i < 8; i++)
{
turtle.setPenColor(palette.next());
turtle.move(50);
turtle.turn(360 / 8);
}
}
private Wheel<Color> setupColors()
{
Color[] colors = {PenColors.Reds.Red,
PenColors.Oranges.DarkOrange,
PenColors.Yellows.Gold,
PenColors.Yellows.Yellow};
Wheel<Color> wheel = new Wheel<Color>();
wheel.add(colors[0]);
wheel.add(colors[1]);
wheel.add(colors[2]);
wheel.add(colors[3]);
wheel.add(colors[3]);
wheel.add(colors[2]);
wheel.add(colors[1]);
wheel.add(colors[0]);
return wheel;
}
public void testTriangleShell() throws Exception
{
Turtle turtle = new Turtle();
turtle.setSpeed(Turtle.TEST_SPEED);
turtle.show();
int number = 60;
int length = 0;
for (int i = 0; i < number; i++)
{
turtle.setPenColor(PenColors.getRandomColor());
length += 4;
drawTriangle(turtle, length);
turtle.turn(360 / number);
}
Approvals.verify(turtle.getImage());
}
private void drawTriangle(Turtle turtle, int length)
{
int sides = 3;
for (int i = 0; i < sides; i++)
{
turtle.move(length);
turtle.turn(360 / sides);
}
}
public void testKnottedRing() throws Exception
{
Turtle turtle = new Turtle();
turtle.setSpeed(Turtle.TEST_SPEED);
Wheel<Color> wheel = new Wheel<Color>(PenColors.Pinks.HotPink, PenColors.Reds.Red, PenColors.Purples.Fuchsia,
PenColors.Oranges.OrangeRed, PenColors.Pinks.DeepPink, PenColors.Pinks.MediumVioletRed,
PenColors.Reds.Crimson, PenColors.Oranges.Tomato);
for (int i = 0; i < 30; i++)
{
turtle.setPenColor(wheel.next());
drawOctogonWithOverlap(turtle);
turtle.turn(360 / 30);
turtle.turn(5);
}
Approvals.verify(turtle.getImage());
}
private void drawOctogonWithOverlap(Turtle turtle)
{
for (int i = 0; i < 9; i++)
{
turtle.move(110);
turtle.turn(360 / 8);
}
}
public void testTurtleTree() throws Exception
{
Turtle turtle = new Turtle();
turtle.setSpeed(Turtle.TEST_SPEED);
turtle.show();
turtle.getBackgroundWindow().setColor(PenColors.Grays.Black);
drawBranch(turtle, 60);
Approvals.verify(turtle.getImage());
}
private void drawBranch(Turtle turtle, int length)
{
pickColorForBranchLenth(turtle, length);
turtle.move(length);
drawLowerBranch(turtle, length - 10);
pickColorForBranchLenth(turtle, length);
turtle.move(-length);
}
private void drawLowerBranch(Turtle turtle, int length)
{
if (length > 0)
{
turtle.turn(30);
drawBranch(turtle, length);
turtle.turn(-60);
drawBranch(turtle, length);
turtle.turn(30);
}
}
private void pickColorForBranchLenth(Turtle turtle, int length)
{
HashMap<Integer, Color> map = new HashMap<Integer, Color>();
map.put(10, PenColors.Greens.LimeGreen);
map.put(20, PenColors.Greens.ForestGreen);
map.put(30, PenColors.Greens.DarkGreen);
map.put(40, PenColors.Greens.Olive);
map.put(50, PenColors.Browns.Sienna);
map.put(60, PenColors.Browns.SaddleBrown);
turtle.setPenColor(map.get(length));
}
}