# HG changeset patch # User Jaroslav Tulach # Date 1374779954 -7200 # Node ID 9fb64f6528b5cf1c84e309b35d9b8342fcc2cec1 # Parent a3e3bb361991dab1b66c21e5b9fbcadff7d861a5 Cannot capture own piece diff -r a3e3bb361991 -r 9fb64f6528b5 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:04:25 2013 +0200 +++ b/chess/src/main/java/org/apidesign/html/demo/chess/BoardModel.java Thu Jul 25 21:19:14 2013 +0200 @@ -40,11 +40,16 @@ data.setSelected(true); } } else { + previoslySelected.setSelected(false); + if (data.getPiece() != null && data.getPieceColor() == previoslySelected.getPieceColor()) { + previoslySelected.setSelected(false); + data.setSelected(true); + return; + } data.setPieceColor(previoslySelected.getPieceColor()); data.setPiece(previoslySelected.getPiece()); previoslySelected.setPiece(null); previoslySelected.setPieceColor(null); - previoslySelected.setSelected(false); } } diff -r a3e3bb361991 -r 9fb64f6528b5 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:04:25 2013 +0200 +++ b/chess/src/test/java/org/apidesign/html/demo/chess/BoardModelTest.java Thu Jul 25 21:19:14 2013 +0200 @@ -61,5 +61,23 @@ BoardModel.selected(b, e3); assertNull(BoardModel.findSelectedSquare(b), "No square is selected"); } + + @Test public void cantTakeOwnPiece() { + Board b = BoardModel.createBoard(); + Square e1 = BoardModel.findSquare(b, 'E', 1); + assertNotNull(e1); + BoardModel.selected(b, e1); + assertEquals(BoardModel.findSelectedSquare(b), e1, "E1 is selected"); + + Square e2 = BoardModel.findSquare(b, 'E', 2); + assertNotNull(e2); + + BoardModel.selected(b, e2); + + assertNotNull(e1.getPiece(), "King remains at e1"); + assertEquals(e2.getPiece(), BoardModel.PieceType.PAWN, "Pawn remains"); + assertEquals(BoardModel.findSelectedSquare(b), e2, "e2 now selected"); + + } }