Ensure changing turns chess
authorJaroslav Tulach <jtulach@netbeans.org>
Fri, 26 Jul 2013 09:28:49 +0200
branchchess
changeset 30a46846115b83
parent 29 9fb64f6528b5
child 31 f0dd921cf985
Ensure changing turns
chess/src/main/java/org/apidesign/html/demo/chess/BoardModel.java
chess/src/main/webapp/pages/index.html
chess/src/test/java/org/apidesign/html/demo/chess/BoardModelTest.java
     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() {