菜单

语法测试和回归测试

相关源文件

本文档介绍了 bat 的全面语法高亮测试系统和回归测试基础设施。该测试系统确保语法高亮在代码更改时保持一致,并验证新的语言支持是否正常工作。

有关 bat 中其他测试方法的更多信息,请参阅 集成和快照测试基准测试和性能测试

目的和测试系统概述

语法测试系统通过将生成的突出显示文本与已知的良好参考输出来比较,来验证 bat 的语法突出显示输出。这种回归测试方法可以捕获语法突出显示行为的意外更改,并确保不同环境中的输出一致。

该系统测试数十种编程语言和文件格式的语法突出显示,从 Rust 和 Python 等常用语言到 SSH 配置文件和 resolv.conf 等专用格式。

测试文件组织

来源:tests/syntax-tests/create_highlighted_versions.py1-136 tests/syntax-tests/compare_highlighted_versions.py1-78 tests/syntax-tests/regression_test.sh1-16

测试执行管道

测试流程由三个主要组件组成,它们协同工作以验证语法高亮输出

测试工作流组件

来源:tests/syntax-tests/create_highlighted_versions.py43-79 tests/syntax-tests/compare_highlighted_versions.py10-50 tests/syntax-tests/regression_test.sh5-16

Bat 命令配置和环境

测试系统使用精心控制的 bat 选项和环境设置,以确保跨不同系统和配置的一致、可重现的输出。

标准测试配置

create_highlighted_versions.py 脚本定义了覆盖用户配置的标准选项

环境隔离

测试系统清理环境,以防止外部配置影响测试结果

  • 移除 BAT_CACHE_PATH, BAT_CONFIG_DIR, BAT_CONFIG_PATH
  • 清除 BAT_OPTS, BAT_PAGER, BAT_STYLE, BAT_TABS, BAT_THEME
  • 取消设置 NO_COLORPAGER 变量
  • 强制 COLORTERM=truecolor 以获得一致的 24 位颜色输出

每目录选项

测试目录可以包含 bat_options 文件来指定该目录中文件的其他命令行参数。例如,Plaintext 目录包含 --show-all 以显示不可打印字符。

来源:tests/syntax-tests/create_highlighted_versions.py13-19 tests/syntax-tests/create_highlighted_versions.py45-56 tests/syntax-tests/create_highlighted_versions.py29-40 tests/syntax-tests/source/Plaintext/bat_options1-2

测试文件处理和并行执行

系统并行处理测试文件,以最小化测试执行时间,同时保持确定性输出。

文件处理架构

来源:tests/syntax-tests/create_highlighted_versions.py81-93 tests/syntax-tests/create_highlighted_versions.py21-26 tests/syntax-tests/create_highlighted_versions.py94-115

输出比较和差异生成

比较系统对语法高亮输出进行详细分析,以检测行为的任何变化。

差异分析过程

compare_highlighted_versions.py 脚本实现了全面的比较逻辑

  1. 文件匹配:比较旧输出目录和新输出目录之间具有相同相对路径的文件
  2. 逐行差异:使用 difflib.unified_diff() 生成详细的变更报告
  3. 未知文件检测:识别缺少参考输出的新测试文件
  4. 变更报告:提供关于修改的清晰反馈

比较输出格式

比较生成统一的差异输出,显示

  • 正在比较的文件路径
  • +/- 前缀的添加/删除行
  • 更改周围的上下文行
  • 对未更改文件进行“无更改”确认
  • 对没有测试夹具的文件发出警告

比较逻辑流程

来源:tests/syntax-tests/compare_highlighted_versions.py10-50 tests/syntax-tests/compare_highlighted_versions.py31-43 tests/syntax-tests/compare_highlighted_versions.py45-47

测试数据格式和 ANSI 输出验证

测试系统会验证语法高亮输出中的实际 ANSI 转义序列,确保颜色和格式代码完全正确。

预期输出格式

tests/syntax-tests/highlighted/ 中的参考文件包含 bat 应该生成的字面 ANSI 转义序列。例如,典型的突出显示行可能包含

  • <FileRef file-url="https://github.com/sharkdp/bat/blob/e2aa4bc3/38;2;249;38;114m - 24 位颜色转义序列 \n- [0m - 重置格式代码\n- 字面文本,带有嵌入的颜色代码\n\n### 测试覆盖示例\n\n测试套件涵盖了具有不同语法高亮需求的各种文件类型#LNaN-LNaN" NaN file-path="38;2;249;38;114m- 24 位颜色转义序列 \n-[0m` - 重置格式代码\n- 字面文本,带有嵌入的颜色代码\n\n### 测试覆盖示例\n\n测试套件涵盖了具有不同语法高亮需求的各种文件类型">Hii tests/syntax-tests/highlighted/TOML/Cargo.toml1-88 tests/.gitattributes1-12

回归测试编排

regression_test.sh 脚本提供了运行完整回归测试套件的主要入口点。

测试执行工作流

该 shell 脚本协调测试过程

  1. 设置:为新输出生成创建临时目录
  2. 生成:运行 create_highlighted_versions.py 并使用临时输出目录
  3. 比较:执行 compare_highlighted_versions.py,比较参考输出与生成输出
  4. 清理:系统会自动清理临时目录

与 CI/CD 集成

回归测试与 bat 的持续集成流程集成,以

  • 在每次拉取请求时验证语法高亮
  • 检测语言支持的非预期更改
  • 确保跨平台一致性
  • 防止版本发布中的语法高亮回归

回归测试流程

来源:tests/syntax-tests/regression_test.sh1-16