
tui-tests
Use when adding or modifying tests for one of GitButler's Ratatui TUIs
- Installs
- 40
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/gitbutlerapp/gitbutler --skill tui-tests- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads tui-tests automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Where tests live
- Main TUI tests:
crates/but/src/command/legacy/status/tui/tests/ - Test harness/helpers:
crates/but/src/tui/test_utils.rsandcrates/but/src/command/legacy/status/tui/tests/utils.rs - Snapshots:
crates/but/src/command/legacy/status/tui/tests/snapshots/
Basic pattern
#[test]
fn describes_behavior_under_test() {
let env = Sandbox::init_scenario_with_target_and_default_settings("one-stack").unwrap();
env.setup_metadata(&["A"]).unwrap();
let mut tui = test_status_tui(env);
tui.input_then_render(KeyCode::Down)
.assert_rendered_term_svg_eq(file!["snapshots/describes_behavior_under_test_001.svg"]);
}
Driving the TUI
Useful input examples:
tui.input_then_render(None); // render without inputs
tui.input_then_render('j'); // single char input
tui.input_then_render(KeyCode::Down); // special key
tui.input_then_render(Shift('j')); // keys with shift
tui.input_then_render(Control('j')); // keys with control
tui.input_then_render([KeyCode::Down, KeyCode::Down]); // multiple keys from array
tui.input_then_render("commit message text"); // multiple keys from string
tui.reload(); // reload state after making external changes
Assertions
Generally prefer
assert_current_line_eq(str![...])for cursor/selection behavior.assert_rendered_term_svg_eq(file!["snapshots/test_function_name_001.svg"])for everything else.
Generally you should include one assert_rendered_term_svg_eq per logical
group of inputs, to catch bad states early.
Be careful using assert_rendered_contains and assert_rendered_not_contains
since they might lead to false positives. They're intended to use while
iterating on a test where snapshots would cause too much churn.
Read crates/but/src/tui/test_utils.rs and
crates/but/src/command/legacy/status/tui/tests/utils.rs for more specialized
assertions.
You're not allowed to add new kinds of assertions to crates/but/src/tui/test_utils.rs or
crates/but/src/command/legacy/status/tui/tests/utils.rs. Rely entirely on the
existing assertions.
Don't reuse snapshots from other tests. Give each test its own snapshots.
Avoid using tui.env().invoke_git("..."). Prefer performing operations via the TUI.
Running tests
cargo test -p but <test-name>to run one test.SNAPSHOTS=overwrite cargo test -p but <test-name>to run and update snapshots.cargo test -p but tuito run all tui tests. Do this after changing things.
If a test fails the output will include the rendered state of the test backend. This can be used when iterating on a test as a way of inspecting the state.
FAQ
What does the tui-tests skill do?
Use when adding or modifying tests for one of GitButler's Ratatui TUIs
How do I install tui-tests?
Run npx skills add https://github.com/gitbutlerapp/gitbutler --skill tui-tests in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/tui-tests/ (personal) or .claude/skills/tui-tests/ (project).
Which AI agents can use tui-tests?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is tui-tests safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains tui-tests?
It is published by gitbutlerapp in gitbutlerapp/gitbutler. It has 40 recorded installs.
More from gitbutlerapp/gitbutler
but
gitbutlerapp/gitbutler
Commit, push, branch, and manage version control with GitButler. Use for commits, selective dirty-file or hunk commits, branches, diffs, PRs, history edits, squashes, amends, undo, merge, apply, and unapply. For selected dirty files or hunks, inspect with but diff; use compact but status for commit order, branch/stack placement, or conflict overview; use but status -fv when file/hunk IDs or per-commit file details matter. Replaces git write commands.
Popular testing & qa skills
tdd
mattpocock/skills
Test-driven development. Use when the user wants to build features or fix bugs test-first, mentions "red-green-refactor", or wants integration tests.
grilling
mattpocock/skills
Grill the user relentlessly about a plan, decision, or idea. Use when the user wants to stress-test their thinking, or uses any 'grill' trigger phrases.
migrate-to-shoehorn
mattpocock/skills
Migrate test files from as type assertions to @total-typescript/shoehorn. Use when user mentions shoehorn, wants to replace as in tests, or needs partial test data.
run-train
lllllllama/rigorpilot-skills
Rigor Train skill for deep learning research repositories. Use when a documented or selected training command should be run conservatively for startup verification, short-run verification, full kickoff, or resume, with command, config, seed, log, checkpoint, status, and metric evidence written to standardized trainoutputs/. Do not use for environment setup, exploratory sweeps, speculative idea implementation, or end-to-end orchestration.
test-driven-development
obra/superpowers
Use when implementing any feature or bugfix, before writing implementation code
finishing-a-development-branch
obra/superpowers
Use when implementation is complete, all tests pass, and you need to decide how to integrate the work