diff --git a/src/games/mirador.ts b/src/games/mirador.ts index bbf06870..0b96e2f3 100644 --- a/src/games/mirador.ts +++ b/src/games/mirador.ts @@ -200,7 +200,7 @@ export class MiradorGame extends GameBase { const newmove = move ? `${move}-${cell}` : cell; const result = this.validateMove(newmove) as IClickResult; if (!result.valid) { - result.move = ""; + result.move = move; } else { result.move = newmove; } diff --git a/test/games/mirador.test.ts b/test/games/mirador.test.ts index 2de17c12..43faf302 100644 --- a/test/games/mirador.test.ts +++ b/test/games/mirador.test.ts @@ -74,6 +74,38 @@ describe("Mirador", () => { expect(game.validateMove("a38-c37").valid).to.equal(false); }); + it("preserves earlier challenge placements after rejecting orthogonal adjacency", () => { + for (const variants of [[], ["size-40"]]) { + const game = new MiradorGame(undefined, variants); + game.move("declare"); + + const first = game.handleClick("", 1, 1); + expect(first.valid).to.equal(true); + + const illegal = game.handleClick(first.move, 2, 3); + expect(illegal.valid).to.equal(false); + expect(illegal.move).to.equal(first.move); + } + }); + + it("preserves earlier challenge placements after rejecting diagonal contact with an opponent", () => { + for (const variants of [[], ["size-40"]]) { + const game = new MiradorGame(undefined, variants); + game.board[0][0] = 1; + game.board[0][1] = 1; + game.board[1][0] = 1; + game.board[1][1] = 1; + game.move("declare"); + + const first = game.handleClick("", 5, 5); + expect(first.valid).to.equal(true); + + const illegal = game.handleClick(first.move, 3, 3); + expect(illegal.valid).to.equal(false); + expect(illegal.move).to.equal(first.move); + } + }); + it("checks connections against the enlarged board edge", () => { const game = new MiradorGame(undefined, ["size-40"]); game.board[0][0] = 1;