# HG changeset patch # User Jaroslav Tulach # Date 1374823729 -7200 # Node ID a46846115b8357036cbbcebb3a803e9d6ca94dec # Parent 9fb64f6528b5cf1c84e309b35d9b8342fcc2cec1 Ensure changing turns diff -r 9fb64f6528b5 -r a46846115b83 chess/src/main/java/org/apidesign/html/demo/chess/BoardModel.java --- a/chess/src/main/java/org/apidesign/html/demo/chess/BoardModel.java Thu Jul 25 21:19:14 2013 +0200 +++ b/chess/src/main/java/org/apidesign/html/demo/chess/BoardModel.java Fri Jul 26 09:28:49 2013 +0200 @@ -30,13 +30,14 @@ import net.java.html.json.Property; @Model(className="Board", properties={ - @Property(name = "rows", type = Row.class, array = true) + @Property(name = "rows", type = Row.class, array = true), + @Property(name = "turn", type = BoardModel.ColorType.class) }) public class BoardModel { @Function static void selected(Board b, Square data) { Square previoslySelected = findSelectedSquare(b); if (previoslySelected == null) { - if (data.getPiece() != null) { + if (data.getPiece() != null && data.getPieceColor() == b.getTurn()) { data.setSelected(true); } } else { @@ -48,11 +49,20 @@ } data.setPieceColor(previoslySelected.getPieceColor()); data.setPiece(previoslySelected.getPiece()); + b.setTurn(b.getTurn() == ColorType.WHITE ? ColorType.BLACK : ColorType.WHITE); previoslySelected.setPiece(null); previoslySelected.setPieceColor(null); } } + @ComputedProperty static boolean whiteTurn(ColorType turn) { + return turn == ColorType.WHITE; + } + + @ComputedProperty static boolean blackTurn(ColorType turn) { + return turn == ColorType.BLACK; + } + static Square findSquare(Board b, char column, int row) { for (Row r : b.getRows()) { for (Square square : r.getColumns()) { @@ -146,6 +156,7 @@ static Board createBoard() { Board b = new Board(); + b.setTurn(ColorType.WHITE); for (int i = 8; i > 0; i--) { Row r = new Row(); b.getRows().add(r); diff -r 9fb64f6528b5 -r a46846115b83 chess/src/main/webapp/pages/index.html --- a/chess/src/main/webapp/pages/index.html Thu Jul 25 21:19:14 2013 +0200 +++ b/chess/src/main/webapp/pages/index.html Fri Jul 26 09:28:49 2013 +0200 @@ -56,6 +56,7 @@

My game

+
Black's turn
@@ -67,6 +68,7 @@
+
White's turn

Game Log

diff -r 9fb64f6528b5 -r a46846115b83 chess/src/test/java/org/apidesign/html/demo/chess/BoardModelTest.java --- a/chess/src/test/java/org/apidesign/html/demo/chess/BoardModelTest.java Thu Jul 25 21:19:14 2013 +0200 +++ b/chess/src/test/java/org/apidesign/html/demo/chess/BoardModelTest.java Fri Jul 26 09:28:49 2013 +0200 @@ -23,6 +23,7 @@ */ package org.apidesign.html.demo.chess; +import org.apidesign.html.demo.chess.BoardModel.ColorType; import static org.testng.Assert.*; import org.testng.annotations.Test; @@ -36,8 +37,10 @@ } - @Test public void e2e4() { + @Test public void e2e4e7e6() { Board b = BoardModel.createBoard(); + assertEquals(b.getTurn(), ColorType.WHITE); + Square e2 = BoardModel.findSquare(b, 'E', 2); assertNotNull(e2); BoardModel.selected(b, e2); @@ -52,6 +55,18 @@ assertEquals(e4.getPiece(), BoardModel.PieceType.PAWN, "Pawn moved successfully"); assertNull(BoardModel.findSelectedSquare(b), "No square selected"); + BoardModel.selected(b, e4); + assertNull(BoardModel.findSelectedSquare(b), "No square selected, it is blacks turn"); + + assertTrue(b.isBlackTurn(), "black's turn"); + + + Square e7 = BoardModel.findSquare(b, 'E', 7); + BoardModel.selected(b, e7); + assertEquals(BoardModel.findSelectedSquare(b), e7); + + BoardModel.selected(b, BoardModel.findSquare(b, 'E', 6)); + assertNull(e7.getPiece(), "Piece has been moved"); } @Test public void cantSelectEmptySquare() {