SuperAPI AI 工具集

tui-testing

测试与质量

查看项目

更新于 10-16 07:17

技能介绍

用途:为 Warp 无头 TUI 前端(crates/warp_tui 及 crates/warpui_core/src/elements/tui 元素库)编写并运行单元测试,是普通、快速的单元测试,把元素树渲染到固定单元格网格后对文本行断言,不使用 GUI 的真实显示/集成/computer-use 框架。

测试位置与两套 harness:元素库测试位于 crates/warpui_core/src/elements/tui/*_tests.rs,使用 crate 内部 test_support(pub(crate)):test_support::render_to_lines(element, size) 一步渲染并返回 buffer.to_lines(),但只调用 render 不调用 layout,复合元素(如 TuiFlex)需先布局,否则可能渲染为空或过期;test_support::with_paint_context 用于需要保留 TuiBuffer 并断言单个 Cell 的场景。

warp_tui 的视图/屏幕测试位于 crates/warp_tui/src/*_tests.rs,不能用 test_support,需在 App::test 的读/更新下自行渲染,且 render 前必须 layout 以填充子元素尺寸;可参考 transcript_view_tests.rs 的 render_element 与 editor_element_tests.rs 的 render_lines 辅助函数。整视图可通过 TuiPresenter 的 invalidate 与 present 走真实绘制路径,断言 frame.buffer.to_lines()。

断言样式、光标与事件:to_lines() 只含字形,样式需自行绘制进 buffer 后读取 Cell 的 symbol()、fg、modifier;光标用 element.cursor_position(area, ctx);事件构造 TuiEvent(如 KeyDown、ScrollWheel)后调用 element.dispatch_event 并断言返回值与重渲染结果,布局须先运行。测试区域保持小而稳定宽度,尾部填充为空格。

测试放置:遵循仓库惯例,放在同级 *tests.rs 文件并在源模块末尾以 #[cfg(test)] #[path = "foo_tests.rs"] mod tests; 引入。参考示例:text_tests.rs、flex_tests.rs、container_tests.rs、constrained_box_tests.rs、buffer_tests.rs,以及 transcript_view_tests.rs、input/view_tests.rs。视图测试解析主题样式时需要 Appearance 单例,用 app.add_singleton_model(|| Appearance::mock()); 安装 mock。

进程级测试:TUI 没有 GUI 式集成 harness,crates/integration 的真实显示、合成事件框架仅用于 GUI,不驱动 TUI。除渲染到文本行的单元测试外,二进制级行为由进程级测试覆盖:启动构建出的二进制并断言其输出/退出码,见 crates/warp_tui/tests/worker_dispatch.rs(运行 CARGO_BIN_EXE_warp-tui-oss)。目前没有独立的 TUI 集成测试技能,因为没有此类框架。

运行:整个 crate 用 cargo nextest run -p warp_tui 与 cargo nextest run -p warpui_core;TUI 元素库位于 tui feature 之后,必要时加 --features tui;按子串运行单个测试用 cargo nextest run -p warp_tui -E 'test(<substring>)';开 PR 前按仓库惯例运行 ./script/format 与 cargo clippy。

限制:资料未提供平台、收费、价格等其他信息。