144 lines
5.1 KiB
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);
|
|
}
|
|
}
|