bastools/api/src/test/java/io/github/applecommander/bastools/api/shapes/ShapesTest.java

144 lines
5.1 KiB
Java

package io.github.applecommander.bastools.api.shapes;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.ByteArrayOutputStream;
import org.junit.Test;
public class ShapesTest {
/**
* This shape is taken from the Applesoft BASIC Programmer's Reference Manual (1987), p146.
*/
public ShapeTable readStandardShapeTable() {
final byte[] sample = { 0x01, 0x00, 0x04, 0x00, 0x12, 0x3F, 0x20, 0x64, 0x2d, 0x15, 0x36, 0x1e, 0x07, 0x00 };
ShapeTable st = ShapeTable.read(sample);
assertNotNull(st);
assertNotNull(st.shapes);
assertEquals(1, st.shapes.size());
return st;
}
@Test
public void testStandardShapeTableVectors() {
ShapeTable st = readStandardShapeTable();
VectorShape expected = new VectorShape()
.moveDown().moveDown()
.plotLeft().plotLeft()
.moveUp().plotUp().plotUp().plotUp()
.moveRight().plotRight().plotRight().plotRight()
.moveDown().plotDown().plotDown().plotDown()
.moveLeft().plotLeft();
Shape s = st.shapes.get(0);
assertNotNull(s);
assertEquals(expected.vectors, s.toVector().vectors);
}
@Test
public void testStandardShapeTableBitmap() {
ShapeTable st = readStandardShapeTable();
BitmapShape expected = new BitmapShape(5, 5);
for (int i=1; i<=3; i++) {
expected.plot(i, 0);
expected.plot(i, 4);
expected.plot(0, i);
expected.plot(4, i);
}
Shape s = st.shapes.get(0);
assertEquals(expected.grid, s.toBitmap().grid);
}
@Test
public void testTextShapeExporterNoBorder() {
ShapeTable st = readStandardShapeTable();
final String expected = ".XXX.\n"
+ "X...X\n"
+ "X.+.X\n"
+ "X...X\n"
+ ".XXX.\n";
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ShapeExporter exp = ShapeExporter.text().noBorder().build();
exp.export(st.shapes.get(0), outputStream);
String actual = new String(outputStream.toByteArray());
assertEquals(expected, actual);
}
@Test
public void testTextShapeExporterAsciiBorder() {
ShapeTable st = readStandardShapeTable();
final String expected = "+-----+\n"
+ "|.XXX.|\n"
+ "|X...X|\n"
+ "|X.+.X|\n"
+ "|X...X|\n"
+ "|.XXX.|\n"
+ "+-----+\n";
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ShapeExporter exp = ShapeExporter.text().asciiTextBorder().build();
exp.export(st.shapes.get(0), outputStream);
String actual = new String(outputStream.toByteArray());
assertEquals(expected, actual);
}
@Test
public void testTextShapeTableExporterNoBorder() {
ShapeTable st = readStandardShapeTable();
// Simulate 4 of these identical shapes by adding 3 more
st.shapes.add(st.shapes.get(0));
st.shapes.add(st.shapes.get(0));
st.shapes.add(st.shapes.get(0));
final String oneExpectedRow = ".XXX. .XXX.\n"
+ "X...X X...X\n"
+ "X.+.X X.+.X\n"
+ "X...X X...X\n"
+ ".XXX. .XXX.\n";
String expected = oneExpectedRow + "\n" + oneExpectedRow;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ShapeExporter exp = ShapeExporter.text().maxWidth(12).noBorder().build();
exp.export(st, outputStream);
String actual = new String(outputStream.toByteArray());
assertEquals(expected, actual);
}
@Test
public void testTextShapeTableExporterAsciiBorder() {
ShapeTable st = readStandardShapeTable();
// Simulate 4 of these identical shapes by adding 3 more
st.shapes.add(st.shapes.get(0));
st.shapes.add(st.shapes.get(0));
st.shapes.add(st.shapes.get(0));
final String divider = "+-----+-----+\n";
final String oneExpectedRow = divider
+ "|.XXX.|.XXX.|\n"
+ "|X...X|X...X|\n"
+ "|X.+.X|X.+.X|\n"
+ "|X...X|X...X|\n"
+ "|.XXX.|.XXX.|\n";
String expected = oneExpectedRow + oneExpectedRow + divider;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ShapeExporter exp = ShapeExporter.text().maxWidth(12).asciiTextBorder().build();
exp.export(st, outputStream);
String actual = new String(outputStream.toByteArray());
assertEquals(expected, actual);
}
}