import java.util.*;

/**
 * The test class BoardTest.
 *
 * @author  (your name)
 * @version (a version number or a date)
 */
public class BoardTest extends junit.framework.TestCase
{
    /**
     * Default constructor for test class BoardTest
     */
    public BoardTest()
    {
    }

    /**
     * Sets up the test fixture.
     *
     * Called before every test case method.
     */
    protected void setUp()
    {
    }

    /**
     * Tears down the test fixture.
     *
     * Called after every test case method.
     */
    protected void tearDown()
    {
    }

    public void testConstructor()
    {
        Board board1 = new Board();
        // By chance, this test might fail
        // if you happen to get a winning board by default
        assertFalse(board1.isWin());
    }

    public void testSetWin()
    {
        Board board1 = new Board();
        board1.setBoard("1 2 3 4 5 6 7 8 9");
        assertTrue(board1.isWin());
    }

    public void testIsWin()
    {
        Board board1 = new Board();
        board1.setBoard("9 1 8 2 7 3 6 4 5");
        assertTrue(board1.isWin());
        board1.setBoard("1 8 2 7 3 6 4 5");
        assertFalse(board1.isWin());
        board1.setBoard("1 1 8 2 7 3 6 4 5");
        assertFalse(board1.isWin());
        board1.setBoard("9 9 1 2 7 3 6 4 5");
        assertFalse(board1.isWin());
    }

    public void testPlayRound()
    {
        Board board1 = new Board();
        board1.setBoard("2 3 4 5 6 7 8 10");
        board1.playRound();
        assertTrue(board1.isWin());

        board1 = new Board();
        board1.setBoard("2 2 2 4 5 6 7 8 9");
        board1.playRound();
        // Can fail if implementation of toString() changes
        assertEquals("1 1 1 3 4 5 6 7 8 9",board1.toString());
    }

    public void testPlayRoundSimple()
    {
        Board board1 = new Board();
        // simplest game
        board1.setBoard("2 3 4 5 6 7 8 10");
        board1.playRound();
        Integer[] expectedArray = {1,2,3,4,5,6,7,9,8};
        List<Integer> expected = Arrays.asList(expectedArray);
        assertEquals(expected, board1.getBoard());
    }
    public void testRound1()
    {
        Board board1 = new Board();
        board1.setBoard("10 8 7 6 5 4 3 2");
        board1.playRound();
        Integer[] expectedArray = {9,7,6,5,4,3,2,1,8};
        List<Integer> expected =  Arrays.asList(expectedArray);
        assertEquals(expected, board1.getBoard());
    }
    public void testRound2()
    {
        Board board1 = new Board();
        board1.setBoard("3 8 4 7 5 6 2 10");
        board1.playRound();
        Integer[] expectedArray = {2,7,3,6,4,5,1,9,8};
        List<Integer> expected = Arrays.asList(expectedArray);
        assertEquals(expected, board1.getBoard());
    }
    public void testRound3()
    {
        Board board1 = new Board();
        board1.setBoard("2 2 2 4 5 6 7 8 9");
        board1.playRound();
        board1.playRound();
        board1.playRound();
        Integer[] expectedArray = {1,2,3,4,5,6,7,9,8};
        List<Integer> expected = Arrays.asList(expectedArray);
        assertEquals(expected, board1.getBoard());
    }
}