本文档介绍了 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 选项和环境设置,以确保跨不同系统和配置的一致、可重现的输出。
create_highlighted_versions.py 脚本定义了覆盖用户配置的标准选项
测试系统清理环境,以防止外部配置影响测试结果
BAT_CACHE_PATH, BAT_CONFIG_DIR, BAT_CONFIG_PATHBAT_OPTS, BAT_PAGER, BAT_STYLE, BAT_TABS, BAT_THEMENO_COLOR 和 PAGER 变量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 脚本实现了全面的比较逻辑
difflib.unified_diff() 生成详细的变更报告比较生成统一的差异输出,显示
+/- 前缀的添加/删除行比较逻辑流程
来源: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 转义序列,确保颜色和格式代码完全正确。
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-12regression_test.sh 脚本提供了运行完整回归测试套件的主要入口点。
该 shell 脚本协调测试过程
create_highlighted_versions.py 并使用临时输出目录compare_highlighted_versions.py,比较参考输出与生成输出回归测试与 bat 的持续集成流程集成,以
回归测试流程