Repository navigation
Testing.zh CN
Nakanomk edited this page Aug 9, 2026
·
5 revisions
语言: English · 简体中文
make check会编译 build/test_runner 并运行它。测试构建刻意用和主构建不同的标志:
-
-DSEEKEY_TEST—— 把src/tui.c里的 ncurses 渲染代码关掉,这样无需终端就能测纯辅助函数。 -
-DG_DISABLE_ASSERT—— 关掉生产路径里g_assert的副作用。 - 只链接 glib / gobject / gio / json-glib / gtk4 + 内置 Unity 框架——不要 ncurses、不要 libevdev、不要 layer-shell、不需要显示器。
所以整套测试能在 CI 里无头运行。
123 个单元测试,用内置 Unity 框架(MIT;在 tests/vendor/unity/)。
| 文件 | 覆盖 |
|---|---|
test_config.c |
默认值、查找顺序、严格校验、非普通文件路径拒绝、迁移与信息保留、主题、Matugen 解析和回退 |
test_tui.c |
字段值格式化、调整/重置纯逻辑、主题选项、bool string_target 回归、字段分组完整性 |
test_keynames.c |
按键名 / 图标 / shift 配对 / 修饰键顺序查找 |
test_runtime_lock.c |
跨进程锁的互斥和释放后接管 |
test_preview_session.c |
浮层状态探测和预览配置语义比较 |
test_style.c |
生成 CSS 的字体转义和气泡最小宽度 |
test_window_state.c |
路径解析、保存/加载往返、坏文件与非普通文件容忍、清除 |
test_main.c |
测试运行器入口;注册所有套件 |
test_helpers.c / .h
|
共享测试辅助 |
TUI 渲染(ncurses)和 GTK 事件循环无法在无头单测里跑。所以 src/tui.c 里可测的逻辑被拆成纯函数(tui_field_value、tui_adjust_field、tui_reset_field、tui_nearest_color_index、tui_current_choice_index),它们操作 TuiField/SeekeyConfig 不做 I/O。ncurses 代码路径用 #ifdef SEEKEY_TEST 包裹。config.c、keynames.c、window_state.c 也是同样模式,所以它们能直接编译进测试二进制。
- 在相关
tests/test_<area>.c里加一个TEST(<group>, <name>) { ... }函数。 - 在该文件的
RUN_<GROUP>_TESTS()(或等价RUN_TEST块)里注册它。 - 从
test_main.c调用这个组运行器。 -
make check。
| 目标 | 用途 |
|---|---|
make check |
单元测试、脚本语法、翻译检查,以及可用时校验 desktop 文件 |
make format |
对 src/ 和 tests/ 跑 clang-format(若已安装) |
make clean |
删除 seekey、object 文件、build/test_runner、locale/
|
Getting started
Behaviour & compatibility
Looks
For contributors
Reference