package de.joshuagleitze.tilinggame.test;
import static de.joshuagleitze.tilinggame.LineType.GREEN;
import static de.joshuagleitze.tilinggame.LineType.NONE;
import static de.joshuagleitze.tilinggame.LineType.RED;
import static de.joshuagleitze.tilinggame.LineType.YELLOW;
import static de.joshuagleitze.tilinggame.test.BoardTestHelper.INVALID_BOARD_DEFINITION;
import static de.joshuagleitze.tilinggame.test.BoardTestHelper.board;
import static de.joshuagleitze.tilinggame.test.BoardTestHelper.isCorrectingNewline;
import static de.joshuagleitze.tilinggame.test.TileTestHelper.isTile;
import static de.joshuagleitze.tilinggame.test.TileTestHelper.tile;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import de.joshuagleitze.tilinggame.Board;
import de.joshuagleitze.tilinggame.LineType;
import de.joshuagleitze.tilinggame.Tile;
public class BoardInteractionTest {
@Test
public void rotateOnlyModifiesOneTile() {
final Board board = new Board();
final String definition = "--RR--";
final Tile tile = tile(definition);
for (int i = 0; i < 12; i++) {
board.setTile(i, tile);
}
board.rotateTileClockwise(0);
for (int i = 1; i < 12; i++) {
assertThat("rotating a tile set multiple times only rotates that specific tile", board.getTile(i),
isTile(definition));
assertThat("rotating a tile set multiple times only rotates that specific tile", board.getTile(i),
isTile(tile));
}
board.rotateTileCounterClockwise(11);
for (int i = 1; i < 11; i++) {
assertThat("rotating a tile set multiple times only rotates that specific tile", board.getTile(i),
isTile(definition));
assertThat("rotating a tile set multiple times only rotates that specific tile", board.getTile(i),
isTile(tile));
}
}
@Test
public void worksheetInteraction() {
final Board b = new Board();
assertTrue(b.isEmpty());
b.setTile(1, new Tile(new LineType[] {GREEN, GREEN, YELLOW, NONE, YELLOW, NONE}));
b.setTile(4, new Tile(new LineType[] {RED, GREEN, RED, GREEN, YELLOW, YELLOW}));
assertFalse(b.isEmpty());
assertTrue(b.isValid());
assertThat(b.toString(), isCorrectingNewline(
"------;GGY-Y-;------;\n------;RGRGYY;------;\n------;------;------;\n------;------;------;"));
assertThat(b.getConnectedPathColor(new int[] {1, 4}), is(YELLOW));
b.rotateTileClockwise(1);
assertFalse(b.isValid());
assertThat(b.toString(), isCorrectingNewline(
"------;-GGY-Y;------;\n------;RGRGYY;------;\n------;------;------;\n------;------;------;"));
assertThat(b.getConnectedPathColor(new int[] {1, 4}), is(NONE));
}
@Test
public void rotationAndToString() {
final Board board = board(INVALID_BOARD_DEFINITION);
board.rotateTileCounterClockwise(1);
board.rotateTileClockwise(2);
board.rotateTileClockwise(3);
assertThat(board.toString(), isCorrectingNewline(
"------;GGY-Y-;-RR---;\n------;RGRGYY;GG----;\nY--YGG;G--RGR;-YY---;\n------;---YY-;YY----;"));
}
@Test
public void numberOfColorsAndRemove() {
final Board board = new Board();
assertThat("the empty board has no colors", board.getNumberOfColors(), is(0));
board.setTile(11, tile("RR----"));
assertThat(board.getNumberOfColors(), is(1));
board.setTile(10, tile("--R--R"));
assertThat(board.getNumberOfColors(), is(1));
board.setTile(9, tile("-Y---Y"));
assertThat(board.getNumberOfColors(), is(2));
board.setTile(8, tile("R-YY-R"));
assertThat(board.getNumberOfColors(), is(2));
board.setTile(7, tile("----GG"));
assertThat(board.getNumberOfColors(), is(3));
board.setTile(6, tile("RRGGYY"));
assertThat(board.getNumberOfColors(), is(3));
board.removeTile(7);
assertThat(board.getNumberOfColors(), is(3));
board.removeTile(9);
assertThat(board.getNumberOfColors(), is(3));
board.removeTile(6);
assertThat(board.getNumberOfColors(), is(2));
board.removeTile(11);
board.removeTile(10);
assertThat(board.getNumberOfColors(), is(2));
board.removeTile(8);
assertThat(board.getNumberOfColors(), is(0));
}
}