de/joshuagleitze/tilinggame/test

BoardInteractionTest.java

Download file
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()); // true
		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()); // false
		assertTrue(b.isValid()); // true
		assertThat(b.toString(), isCorrectingNewline(
				"------;GGY-Y-;------;\n------;RGRGYY;------;\n------;------;------;\n------;------;------;"));
		assertThat(b.getConnectedPathColor(new int[] {1, 4}), is(YELLOW)); // LineType.YELLOW
		b.rotateTileClockwise(1);
		assertFalse(b.isValid()); // false
		assertThat(b.toString(), isCorrectingNewline(
				"------;-GGY-Y;------;\n------;RGRGYY;------;\n------;------;------;\n------;------;------;"));
		assertThat(b.getConnectedPathColor(new int[] {1, 4}), is(NONE)); // LineType.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));
	}
}