1.1 --- a/chess/src/main/java/org/apidesign/html/demo/chess/BoardModel.java Thu Jul 25 21:19:14 2013 +0200
1.2 +++ b/chess/src/main/java/org/apidesign/html/demo/chess/BoardModel.java Fri Jul 26 09:28:49 2013 +0200
1.3 @@ -30,13 +30,14 @@
1.4 import net.java.html.json.Property;
1.5
1.6 @Model(className="Board", properties={
1.7 - @Property(name = "rows", type = Row.class, array = true)
1.8 + @Property(name = "rows", type = Row.class, array = true),
1.9 + @Property(name = "turn", type = BoardModel.ColorType.class)
1.10 })
1.11 public class BoardModel {
1.12 @Function static void selected(Board b, Square data) {
1.13 Square previoslySelected = findSelectedSquare(b);
1.14 if (previoslySelected == null) {
1.15 - if (data.getPiece() != null) {
1.16 + if (data.getPiece() != null && data.getPieceColor() == b.getTurn()) {
1.17 data.setSelected(true);
1.18 }
1.19 } else {
1.20 @@ -48,11 +49,20 @@
1.21 }
1.22 data.setPieceColor(previoslySelected.getPieceColor());
1.23 data.setPiece(previoslySelected.getPiece());
1.24 + b.setTurn(b.getTurn() == ColorType.WHITE ? ColorType.BLACK : ColorType.WHITE);
1.25 previoslySelected.setPiece(null);
1.26 previoslySelected.setPieceColor(null);
1.27 }
1.28 }
1.29
1.30 + @ComputedProperty static boolean whiteTurn(ColorType turn) {
1.31 + return turn == ColorType.WHITE;
1.32 + }
1.33 +
1.34 + @ComputedProperty static boolean blackTurn(ColorType turn) {
1.35 + return turn == ColorType.BLACK;
1.36 + }
1.37 +
1.38 static Square findSquare(Board b, char column, int row) {
1.39 for (Row r : b.getRows()) {
1.40 for (Square square : r.getColumns()) {
1.41 @@ -146,6 +156,7 @@
1.42
1.43 static Board createBoard() {
1.44 Board b = new Board();
1.45 + b.setTurn(ColorType.WHITE);
1.46 for (int i = 8; i > 0; i--) {
1.47 Row r = new Row();
1.48 b.getRows().add(r);
2.1 --- a/chess/src/main/webapp/pages/index.html Thu Jul 25 21:19:14 2013 +0200
2.2 +++ b/chess/src/main/webapp/pages/index.html Fri Jul 26 09:28:49 2013 +0200
2.3 @@ -56,6 +56,7 @@
2.4 <div class="row-fluid">
2.5 <div class="span9">
2.6 <h1>My game</h1>
2.7 + <div data-bind="visible: blackTurn">Black's turn</div>
2.8 <table class="board">
2.9 <tbody data-bind="foreach: rows">
2.10 <tr >
2.11 @@ -67,6 +68,7 @@
2.12 </tr>
2.13 </tbody>
2.14 </table>
2.15 + <div data-bind="visible: whiteTurn">White's turn</div>
2.16 </div>
2.17 <div class="span2 offset1">
2.18 <h2>Game Log</h2>
3.1 --- a/chess/src/test/java/org/apidesign/html/demo/chess/BoardModelTest.java Thu Jul 25 21:19:14 2013 +0200
3.2 +++ b/chess/src/test/java/org/apidesign/html/demo/chess/BoardModelTest.java Fri Jul 26 09:28:49 2013 +0200
3.3 @@ -23,6 +23,7 @@
3.4 */
3.5 package org.apidesign.html.demo.chess;
3.6
3.7 +import org.apidesign.html.demo.chess.BoardModel.ColorType;
3.8 import static org.testng.Assert.*;
3.9 import org.testng.annotations.Test;
3.10
3.11 @@ -36,8 +37,10 @@
3.12 }
3.13
3.14
3.15 - @Test public void e2e4() {
3.16 + @Test public void e2e4e7e6() {
3.17 Board b = BoardModel.createBoard();
3.18 + assertEquals(b.getTurn(), ColorType.WHITE);
3.19 +
3.20 Square e2 = BoardModel.findSquare(b, 'E', 2);
3.21 assertNotNull(e2);
3.22 BoardModel.selected(b, e2);
3.23 @@ -52,6 +55,18 @@
3.24 assertEquals(e4.getPiece(), BoardModel.PieceType.PAWN, "Pawn moved successfully");
3.25 assertNull(BoardModel.findSelectedSquare(b), "No square selected");
3.26
3.27 + BoardModel.selected(b, e4);
3.28 + assertNull(BoardModel.findSelectedSquare(b), "No square selected, it is blacks turn");
3.29 +
3.30 + assertTrue(b.isBlackTurn(), "black's turn");
3.31 +
3.32 +
3.33 + Square e7 = BoardModel.findSquare(b, 'E', 7);
3.34 + BoardModel.selected(b, e7);
3.35 + assertEquals(BoardModel.findSelectedSquare(b), e7);
3.36 +
3.37 + BoardModel.selected(b, BoardModel.findSquare(b, 'E', 6));
3.38 + assertNull(e7.getPiece(), "Piece has been moved");
3.39 }
3.40
3.41 @Test public void cantSelectEmptySquare() {