@Test public void test_checkMove_exchange() throws GameMoveException { final Dictionary dictionary = createDictionary("abcd", "def", "fefgabcd"); final TilesBank tilesBank = new TilesBank(editor.createTilesBankInfo()); final ScribbleBoard board = new ScribbleBoard( settings, Arrays.asList(player1, player2, player3), tilesBank, dictionary); h1 = board.getPlayerHand(player1); h2 = board.getPlayerHand(player2); h3 = board.getPlayerHand(player3); h1.setTiles(tilesBank.getTiles(0, 3, 6, 9, 12, 15, 18)); // abcdefg h2.setTiles(tilesBank.getTiles(1, 4, 7, 10, 13, 16, 19)); // abcdefg h3.setTiles(tilesBank.getTiles(2, 5, 8, 11, 14, 17, 20)); // abcdefg // roll all tiles back and request tiles from 0 to 20 final int capacity = tilesBank.getBankCapacity(); for (int i = 0; i < capacity; i++) { tilesBank.rollbackTile(i); } for (int i = 0; i < 21; i++) { tilesBank.requestTile(i); } assertEquals(13, tilesBank.getTilesLimit()); final Personality person = board.getPlayerTurn(); final ScribblePlayerHand hand = board.getPlayerHand(person); final Tile[] tiles = hand.getTiles().clone(); board.exchangeTiles( person, new int[] {tiles[0].getNumber(), tiles[1].getNumber(), tiles[2].getNumber()}); assertEquals(7, hand.getTiles().length); assertEquals(1, board.getGameMoves().size()); assertEquals(ExchangeTiles.class, board.getGameMoves().get(0).getClass()); assertEquals(13, tilesBank.getTilesLimit()); // Check that tiles was rolled back to bank assertFalse(tilesBank.isTileInUse(tiles[0].getNumber())); assertFalse(tilesBank.isTileInUse(tiles[1].getNumber())); assertFalse(tilesBank.isTileInUse(tiles[2].getNumber())); // Check that tiles with number > 20 is taken assertTrue(hand.getTiles()[0].getNumber() > 20); assertTrue(hand.getTiles()[1].getNumber() > 20); assertTrue(hand.getTiles()[2].getNumber() > 20); // Check no points assertEquals(0, hand.getPoints()); }