Add rules-engine tests: check, mate, stalemate, castling, en passant, undo

未关闭
#41 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
48/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
javascript
领域
testing-qa

调研方向

Read tests/unit/game-moves.test.js and tests/integration/game-flow.test.js, then inspect the named move and piece logic in js/game.js and js/pieces.js. Start with the helper from issue #40 and run npm test; the issue lists the expected rule cases and outcomes. Done means every listed case has a test and forcing isCheckmate to return false makes the suite fail.

由索引模型根据 Issue 内容生成。

描述

severity: medium testing

Summary

The suite has four tests, and the only two that touch game logic both play e2 to e4. Check, checkmate, stalemate, castling, en passant, promotion, pins, notation and undo are untested.

Where

  • tests/unit/game-moves.test.js:111-116, tests/integration/game-flow.test.js:118-126
  • Untested: js/game.js:281-300, js/game.js:334-461, js/game.js:497-520, js/game.js:582-650, js/game.js:845-906, js/pieces.js:41-96

Impact

js/game.js is about a third of the code base and is the product. Regressions in move legality or game-end detection ship with CI green, which has already happened (#22, #24, #25).

Suggested fix

Using the helper from #40, add:

  • Perft from the start position: White has 20 legal moves; after 1.e4, Black has 20
  • isPseudoLegalMove table tests per piece: knight L-shapes, bishop off-diagonal rejected, pawn backward rejected, double push only from the start rank, same square rejected
  • Sliders are blocked by own and enemy pieces
  • A pinned piece has no moves that expose the king (white Ke1, Re2, black Re8)
  • In check, only moves that resolve it are legal
  • Fool's mate (f3 e5 g4 Qh4): status "Checkmate! Black wins.", notation Qh4#
  • Stalemate (white Kf7, Qg6, black Kh8, Black to move): status "Stalemate! Game is a draw."
  • Castling: allowed both sides when clear; refused in check, through an attacked square, after the king or rook moved, with a piece between; notation O-O and O-O-O
  • Queenside castling with only the b-file square attacked is allowed
  • En passant: offered only right after the double push, removes the captured pawn, not offered when it exposes the king
  • Promotion: h7 to h8 becomes a queen, notation h8=Q
  • SAN disambiguation: Nbd2 for two knights, R1a3 for two rooks on one file
  • Undo after a plain move, a capture, castling, en passant, a double push and a promotion restores the exact prior state
  • handleBoardClick ignores the opponent's pieces and all clicks after game over

Some of these should fail until the linked bugs are fixed; write them to the chess rule.

Acceptance criteria

  • Each item above has a test
  • Making isCheckmate return false unconditionally fails the suite

Getting started

  • Relevant files: js/game.js, js/pieces.js, tests/unit/
  • How to run tests: npm install, then npm test and npm run lint
  • Related docs: docs/ARCHITECTURE.md, .github/CONTRIBUTING.md

Filed by repo-audit/full-audit at 8a2c86c. Severity: medium. Effort: M. audit-key: testing|js/game.js|generateLegalMovesForPiece

主要语言
JavaScript
星标
4
派生
2
PR 合并指标
30 天内没有已合并 PR

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

TMHSDigital/Static_Chess 的其他 Issue

查看 TMHSDigital/Static_Chess 的全部 Issue

相似的 Issue

更多 JavaScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。