1
0
Files
DiAL/openspec/changes/cmd-checker-enhancement/specs/windows-test-compat/spec.md

2.1 KiB

MODIFIED Requirements

Requirement: 命令检测器测试 SHALL 使用跨平台命令

命令检测器的测试 SHALL 使用 bun -e 脚本替代所有系统命令(包括 truefalsesleepbashechoyes | head),确保测试在 Windows、macOS、Linux 三平台上行为一致。

Scenario: 进程退出码 0

  • WHEN 测试需要一个正常退出的命令
  • THEN 测试 SHALL 使用 bun -e "process.exit(0)" 替代 true

Scenario: 进程退出码非零

  • WHEN 测试需要一个失败退出的命令
  • THEN 测试 SHALL 使用 bun -e "process.exit(1)" 替代 false

Scenario: stdout 输出

  • WHEN 测试需要一个输出文本到 stdout 的命令
  • THEN 测试 SHALL 使用 bun -e "console.log('text')" 替代 echo text

Scenario: stderr 输出

  • WHEN 测试需要一个输出文本到 stderr 的命令
  • THEN 测试 SHALL 使用 bun -e "process.stderr.write('error\n')" 替代 bash -c "echo error >&2"

Scenario: 长时间运行命令

  • WHEN 测试需要一个超时场景的长时间运行命令
  • THEN 测试 SHALL 使用 bun -e "await Bun.sleep(10000)" 替代 sleep 10

Scenario: 大量输出

  • WHEN 测试需要一个产生大量输出的命令
  • THEN 测试 SHALL 使用 bun -e "process.stdout.write('y\n'.repeat(N))" 替代 bash -c "yes | head -N"

Scenario: 验证非 shell 模式下特殊字符不被展开

  • WHEN 通过 Bun.spawn 执行 bun -e "console.log('*')" 并检查 stdout 包含 *
  • THEN 测试 SHALL 在 Windows、macOS 和 Linux 上均返回 matched: true

ADDED Requirements

Requirement: probes.example.yaml 使用跨平台示例

probes.example.yaml 中的 cmd 类型示例 SHALL 使用跨平台命令(如 bun -e "..."bun --version),不使用 Unix 专属命令(如 unamels /tmpdate)。

Scenario: 示例命令跨平台可执行

  • WHEN 用户在 Windows、macOS 或 Linux 上直接使用 probes.example.yaml 中的 cmd 示例
  • THEN 所有 cmd 示例 SHALL 能正常执行,不依赖平台特定命令