Testing OpenLogi UI
AprilNEA/OpenLogi
Verifies OpenLogi's native GPUI interface with focused tests, the component gallery and a mock agent, choosing the evidence that fits each change.
Guides writing, improving and running crate-level Rust unit tests in the Warp codebase, and says when a unit test is the wrong level.
$ npx skills add warpdotdev/warp --skill rust-unit-tests -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install warpdotdev/warp rust-unit-tests --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/warpdotdev/warp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/rust-unit-tests .claude/skills/rust-unit-tests && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "rust-unit-tests" agent skill from https://github.com/warpdotdev/warp/tree/master/.agents/skills/rust-unit-tests into .claude/skills/rust-unit-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-unit-tests", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/warpdotdev/warp/tree/master/.agents/skills/rust-unit-testsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add warpdotdev/warp --skill rust-unit-tests -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install warpdotdev/warp rust-unit-tests --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/warpdotdev/warp.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/rust-unit-tests .agents/skills/rust-unit-tests && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "rust-unit-tests" agent skill from https://github.com/warpdotdev/warp/tree/master/.agents/skills/rust-unit-tests into .agents/skills/rust-unit-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-unit-tests", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add warpdotdev/warp --skill rust-unit-tests -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install warpdotdev/warp rust-unit-tests --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/warpdotdev/warp.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/rust-unit-tests .cursor/skills/rust-unit-tests && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "rust-unit-tests" agent skill from https://github.com/warpdotdev/warp/tree/master/.agents/skills/rust-unit-tests into .cursor/skills/rust-unit-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-unit-tests", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/warpdotdev/warp.git --path .agents/skills/rust-unit-tests--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add warpdotdev/warp --skill rust-unit-tests -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install warpdotdev/warp rust-unit-tests --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/warpdotdev/warp.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/rust-unit-tests .gemini/skills/rust-unit-tests && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "rust-unit-tests" agent skill from https://github.com/warpdotdev/warp/tree/master/.agents/skills/rust-unit-tests into .gemini/skills/rust-unit-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-unit-tests", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install warpdotdev/warp rust-unit-testsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add warpdotdev/warp --skill rust-unit-tests -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/warpdotdev/warp.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/rust-unit-tests .github/skills/rust-unit-tests && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "rust-unit-tests" agent skill from https://github.com/warpdotdev/warp/tree/master/.agents/skills/rust-unit-tests into .github/skills/rust-unit-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-unit-tests", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add warpdotdev/warp --skill rust-unit-tests -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install warpdotdev/warp rust-unit-tests --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/warpdotdev/warp.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/rust-unit-tests .opencode/skills/rust-unit-tests && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "rust-unit-tests" agent skill from https://github.com/warpdotdev/warp/tree/master/.agents/skills/rust-unit-tests into .opencode/skills/rust-unit-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-unit-tests", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
rust-unit-testsGuides writing, improving and running crate-level Rust unit tests in the Warp codebase, and says when a unit test is the wrong level.
The skill covers crate-level unit tests that exercise one function or behavior per case. It says to default to a unit test when the logic is deterministic and reachable without booting the app: parsing, encoding and escaping, data transformations, state machines such as block lifecycle and selection, boundary cases like empty input, off-by-one range ends and invalid UTF-8, error paths and fallbacks, and bug fixes, with the failing test written before the fix.
It is equally direct about limits. Warp is a terminal emulator with a GPU renderer, PTY and shell integration, and IPC, so behavior that needs a real PTY, shell or window, depends on the wiring between components, or would need a test-only trait to become testable belongs at a higher level. In those cases it points to `gui-integration-test` for end-to-end GUI behavior instead of forcing mocks. The skill also covers how to structure and run the tests.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit f571865. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
cargoFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Warp Rust Unit Tests loads about 3.4k tokens when it runs. Until then it costs about 21 tokens; SKILL.md has 1,744 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from warpdotdev/warp at commit f571865, republished under its AGPL-3.0 licence (© warpdotdev). 1,744 words, ~3,425 tokens.
.claude/skills/rust-unit-tests/SKILL.md (or your agent's skills folder).Default to a unit test when the logic is deterministic and reachable without booting the app:
Prefer unit tests for anything that fits: they are fast, deterministic, and point straight at the failure.
Be honest about this codebase. Warp is a terminal emulator with a GPU renderer, PTY and shell integration, and IPC. The common "80% unit tests" heuristic assumes a business-logic-heavy system where units exchange messages and transform data. Large parts of this repo are not that, and forcing them under a unit test usually means mocking away the only thing that could actually break.
Escalate to a higher level when any of these hold:
Where to go instead:
gui-integration-test — GUI end-to-end behavior, terminal and shell integration, settings and keybinding wiring.tui-testing — TUI element and screen rendering.gui-integration-test-video or computer_use — when the real question is visual and someone needs to look at it.Before escalating, try splitting the problem. Most "untestable" code is a thin shell of IO wrapped around logic that tests fine once separated: extract the decision-making into a pure function, unit test that, and let an integration test cover the thin shell that remains. That is usually cheaper than either a heavily stubbed unit test or a full app-boot test.
That said, weigh the indirection on its own merits. Code that is hard to test is sometimes genuinely badly designed — if extracting the logic would make the code clearer regardless of testing, do it. If the seam would exist only to satisfy a test, don't.
Tests cost real maintenance, and a bad test costs more than no test. Skip or delete these:
From/Into passthroughs, Default impls, plain struct construction. There is nothing that can break independently.tokio, or wgpu. Test your usage of them.Don't chase a coverage number. Coverage says a line executed, not that anything was verified, and a target reliably turns into a ceiling.
${filename}_tests.rs or mod_test.rs.#[cfg(test)]
#[path = "filename_tests.rs"] // or "mod_test.rs"
mod tests;Aim for a test you never touch again unless the behavior changes. Refactors, new features, and bug fixes should not require editing existing tests; only a deliberate behavior change should. If a refactor breaks your tests, that is usually a defect in the tests.
Exercise the unit the way its callers do. Reaching into private state makes the test fail on refactors no caller would notice. If a helper type exists only to serve one or two callers, test it through them rather than directly.
Assert what the system is after the action, not which functions it called to get there.
// Brittle: still passes if the entry is dropped right after insertion, and
// fails on an equivalent refactor that calls a different internal method.
assert!(recorder.saw_call_to_insert(id));
// Better: asserts the outcome the caller actually cares about.
store.insert(id, entry.clone());
assert_eq!(store.get(id), Some(&entry));The test name is often the only thing visible in a failure report, so make it a sentence about behavior rather than about the method:
#[test]
fn parses_utf8_sequence_when_valid() { /* ... */ }
#[test]
fn returns_replacement_char_for_invalid_utf8() { /* ... */ }If the name needs an "and", you are testing two behaviors — split it. Structure the body as arrange / act / assert, separated by blank lines.
Everything a reader needs to understand the result belongs in the test body; everything irrelevant belongs out of it. Prefer a builder or helper constructor that takes only the fields the test cares about over one large shared fixture. If a test asserts on a specific value, set that value in the test rather than inheriting it from shared setup.
Test code has no tests of its own, so it has to be obviously correct on inspection. Some repetition is a fair price for a test that reads top to bottom. Extract a helper when it removes noise, not merely to remove repetition.
No conditionals, loops, arithmetic, or string concatenation to compute an expected value. Write expected values literally — computing them re-implements the code under test and can reproduce the same bug in the assertion.
assert_eq!/assert_ne! over assert! for readable diffs.assert_eq!(got, want, "cursor should clamp to line end for {input:?}").#[should_panic] only when panicking is intended API, and pin the message with expected = "...".model.lock() calls in the same call stack from tests, and prefer passing an already-locked reference down.Work down this list and stop at the first option that is fast and deterministic:
warpui::App::test, VirtualFS, TerminalModel::mock(..), TestBlockListBuilder/TestBlockBuilder, Appearance::mock(), and FeatureFlag::X.override_enabled(..). See "Common helpers to use" below for usage.A flaky test is worse than no test: once people learn to re-run a red test, they stop trusting every other test too. Fix the cause instead of adding retries.
OnceCell, and environment variables.serial_test's #[serial] or scope the state locally.If you can't make a test deterministic quickly, quarantine it (#[ignore] with a linked issue) rather than leaving an intermittently red test in the suite — and treat that as debt to pay down, not a place to leave it.
#[tokio::test] when the code requires a runtime.FeatureFlag::X.is_enabled()) over #[cfg(...)] so tests don’t require recompilation to toggle behavior.warpui::App::test for deterministic unit tests around views/models.update and assert via read.use warpui::App;
// In app crate tests prefer `crate::test_util::...`; from other crates use `warp::test_util::...`.
use warp::test_util::{terminal::initialize_app_for_terminal_view, add_window_with_terminal};
#[test]
fn example() {
App::test((), |mut app| async move {
// One-time app setup for terminal/view tests
initialize_app_for_terminal_view(&mut app); // includes settings init
let term = add_window_with_terminal(&mut app, None);
// Act
term.update(&mut app, |view, _ctx| {
view.model.lock().simulate_block("ls", "out");
});
// Assert
term.read(&app, |view, _ctx| {
assert!(view.model.lock().block_list().len() > 0);
});
})
}Tests for the headless TUI render an element tree to text lines rather than drawing pixels. Use warpui_core::elements::tui::test_support::render_to_lines and TuiBuffer::to_lines, and keep them in *_tests.rs files next to the source in crates/warp_tui and crates/warpui_core/src/elements/tui. They are plain unit tests and do NOT use the GUI integration / real-display / computer_use framework. See the tui-testing skill for details. The warpui::App::test harness above still applies to shared model logic that both front-ends use.
TerminalModel::mock(..), .simulate_block(..), .finish_block(), .simulate_cmd(..).terminal::model::test_utils::{TestBlockListBuilder, TestBlockBuilder}.use virtual_fs::{VirtualFS, Stub};
VirtualFS::test("case", |_dirs, mut fs| {
fs.with_files(vec![Stub::FileWithContent("path/file.txt", "contents")]);
// run logic and assert
});use warp::features::FeatureFlag; // or `use crate::features::FeatureFlag;` inside the app crate
let _flag = FeatureFlag::CreatingSharedSessions.override_enabled(true);assert_lines_approx_eq!(actual_lines, INLINE_BANNER_HEIGHT);model.lock() scopes minimal; avoid nested/re-entrant locks in the same call chain.initialize_settings_for_tests directly when using initialize_app_for_terminal_view (it already calls it).#[tokio::test] when a real runtime is required; otherwise prefer App::test.serial_test's #[serial] or local mocking instead of parallelism.cargo nextest run --no-fail-fast --workspacecargo nextest run -p <crate_name>cargo nextest run -E 'test(<substring>)'cargo test --docAfter the relevant tests pass, run Clippy, fix its findings, and then format once:
cargo clippy -p <package_name> --all-targets --tests -- -D warnings
./script/formatDo not rerun tests or Clippy after formatting, and do not add a full ./script/presubmit run, unless the user, task, or approved spec explicitly requires it. Follow the repository's Implementation Validation Order in AGENTS.md for invalidation and follow-up changes.
© warpdotdev, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/rust-unit-tests of warpdotdev/warp.
Open the folder on GitHubat commit f571865
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in warpdotdev/warp, which our catalogue first saw on October 7, 2026.
Warp Rust Unit Tests next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Warp Rust Unit Tests this skillwarpdotdev/warp | 65k | 1 repos | ~3.4k | Automated safety check: Pass | AGPL-3.0 | |
| Testing OpenLogi UIAprilNEA/OpenLogi | 23k | — | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| Rust Testingkurealnum/dotfiles | 290 | 6 repos | ~2.9k | Automated safety check: Pass | None | |
| Rust TDD Workflowrtk-ai/rtk | 83k | — | ~753 | Automated safety check: Notes | Apache-2.0 | |
| RTK Filter TDD in Rustrtk-ai/rtk | 83k | — | ~1.9k | Automated safety check: Notes | Apache-2.0 | |
| OpenLogi Change VerificationAprilNEA/OpenLogi | 23k | — | ~1.4k | Automated safety check: Pass | Apache-2.0 |
AprilNEA/OpenLogi
Verifies OpenLogi's native GPUI interface with focused tests, the component gallery and a mock agent, choosing the evidence that fits each change.
kurealnum/dotfiles
Rust testing patterns including unit tests, integration tests, async testing, property-based testing, mocking, and coverage.
rtk-ai/rtk
Enforces red-green-refactor for Rust work, with idiomatic test patterns, a naming convention and a pre-commit gate of cargo fmt, clippy and test.
rtk-ai/rtk
Enforces red-green-refactor for new RTK output filters in Rust, using real captured fixtures, snapshot tests with insta and token-savings assertions.
AprilNEA/OpenLogi
Plans the smallest check that could disprove a code change in the OpenLogi project, then escalates through reproduction, focused tests and a final gate before a push.
mxsm/rocketmq-rust
A skill your agent uses when the user asks to create, draft, prepare, or publish a GitHub issue for the rocketmq-rust project — bugs, features, enhancements, refactors, docs, unit tests, CI…
warpdotdev/warp
Builds or updates a design system in Figma from a codebase in ordered phases: discovery, variables and tokens, components, theming and documentation, with checkpoints.
warpdotdev/warp
Required groundwork before any use_figma call: the rules and reference files for running JavaScript in a Figma file through the Plugin API without common failures.
warpdotdev/warp
Authors and edits file-based Warp software factory definitions rooted at factory.yaml, covering agents, automations, scorers and webhooks, and validates them before a pull request.
warpdotdev/warp
Turns a Figma frame or component into production code that matches the design, using the Figma MCP server and the project's own design system.
warpdotdev/warp
Migrates the compatible subset of settings and global file-based MCP servers from the Warp desktop app into Warp Agent CLI without exposing credentials or state.
warpdotdev/warp
Creates project-specific design system rules from your codebase so coding agents implement Figma designs with your components, naming and tokens.
Works with
Categories
Guides writing, improving and running crate-level Rust unit tests in the Warp codebase, and says when a unit test is the wrong level. The skill covers crate-level unit tests that exercise one function or behavior per case. It says to default to a unit test when the logic is deterministic and reachable without booting the app: parsing, encoding and escaping, data transformations, state machines such as block lifecycle and selection, boundary cases like empty input, off-by-one range ends and invalid UTF-8, error paths and fallbacks, and bug fixes, with the failing test written before the fix.
Warp Rust Unit Tests fits situations like: adding unit tests for a parser or data transformation in Warp; writing a regression test before fixing a reproducible bug; deciding whether a change needs a unit test or a higher-level test.
Run `npx skills add warpdotdev/warp --skill rust-unit-tests -a claude-code`. Or copy the skill folder (.agents/skills/rust-unit-tests in warpdotdev/warp) into .claude/skills/rust-unit-tests in your project. Claude Code loads it when a task matches its description.
Run `npx skills add warpdotdev/warp --skill rust-unit-tests -a codex`. Or copy the skill folder (.agents/skills/rust-unit-tests in warpdotdev/warp) into .agents/skills/rust-unit-tests in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add warpdotdev/warp --skill rust-unit-tests -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/rust-unit-tests, .gemini/skills/rust-unit-tests, .github/skills/rust-unit-tests and .opencode/skills/rust-unit-tests in your project.
Going by SKILL.md and its folder, Warp Rust Unit Tests needs the command-line tools its instructions call (cargo). Our summary lists: A checkout of the Warp repository; A Rust toolchain with cargo.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Warp Rust Unit Tests is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.4k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Warp Rust Unit Tests: Testing OpenLogi UI (AprilNEA/OpenLogi, 23k stars), Rust Testing (kurealnum/dotfiles, 290 stars), Rust TDD Workflow (rtk-ai/rtk, 83k stars) and RTK Filter TDD in Rust (rtk-ai/rtk, 83k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
warpdotdev (a GitHub organization) maintains it in warpdotdev/warp, which has 65,380 GitHub stars. The repository holds 46 skills in this directory. The repository was last updated on October 7, 2026.
Source: warpdotdev/warp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.