Skip to content

refactor(rust): share test scaffolding via mergify-test-support crate#1439

Open
jd wants to merge 1 commit into
devs/jd/worktree-rust-port/dedupe-emit-helper-boilerplate-across-cmd-crates--ed32eef9from
devs/jd/worktree-rust-port/share-test-scaffolding-via-mergify-test-support--f9d688cd
Open

refactor(rust): share test scaffolding via mergify-test-support crate#1439
jd wants to merge 1 commit into
devs/jd/worktree-rust-port/dedupe-emit-helper-boilerplate-across-cmd-crates--ed32eef9from
devs/jd/worktree-rust-port/share-test-scaffolding-via-mergify-test-support--f9d688cd

Conversation

@jd
Copy link
Copy Markdown
Member

@jd jd commented May 19, 2026

Every command crate's test module re-rolled the same ~30 LOC of
SharedBytes / SharedWriter / Captured / make_output glue —
about 350 LOC of pure boilerplate across 15 files, drifting over
time (some Captured had stderr, some didn't; one file even
carried a _stderr_accessor_lives dead-code stub just to silence
the resulting warning).

Extract the canonical version into a new mergify-test-support
crate that other crates pull in as a dev-dependencies. The new
Captured API exposes human() / new(mode) constructors and
stdout() / stderr() accessors, so the common pattern shrinks
from a 12-line String::from_utf8(cap.stdout.lock().unwrap().clone())
to let s = cap.stdout().

Net -418 / +114 lines across the workspace. Behavior unchanged;
all 233 tests pass.

The crate is publish = false and only ever appears under
[dev-dependencies], so the test-only types never leak into a
production build.

Co-Authored-By: Claude Opus 4.7 noreply@anthropic.com

Depends-On: #1438

@jd
Copy link
Copy Markdown
Member Author

jd commented May 19, 2026

This pull request is part of a Mergify stack:

# Pull Request Link
1 test(skill): port the skill-references test to Rust #1414
2 test(freeze): add live smoke test for freeze list #1434
3 feat(rust): port freeze list to native Rust #1435
4 test(freeze): add live smoke test for freeze create/update/delete #1436
5 feat(rust): port freeze create/update/delete to native Rust #1437
6 refactor(rust): dedupe emit-helper boilerplate across command crates #1438
7 refactor(rust): share test scaffolding via mergify-test-support crate #1439 👈
8 refactor(core): introduce CommandContext for the queue+freeze prelude #1441
9 refactor(ci): consolidate the CI-env scrubber into a shared testing module #1442
10 refactor: drop stale Phase X.Y doc markers and one inline color branch #1443
11 refactor(tui): share StyledGlyph across queue show/status renderers #1444
12 refactor(queue): drop indexmap, group_by_scope returns a Vec<(K, V)> #1445
13 refactor(ci): swap uuid for getrandom in the GHA heredoc delimiter #1446
14 refactor(config): standardize the workspace on serde_yaml_ng for YAML parsing #1447

@mergify
Copy link
Copy Markdown
Contributor

mergify Bot commented May 19, 2026

Merge Protections

Your pull request matches the following merge protections and will not be merged until they are valid.

🔴 ⛓️ Depends-On Requirements

Waiting for

This rule is failing.

Requirement based on the presence of Depends-On in the body of the pull request

🔴 👀 Review Requirements

Waiting for

  • #approved-reviews-by>=2
This rule is failing.
  • any of:
    • #approved-reviews-by>=2
    • author = dependabot[bot]
    • author = mergify-ci-bot
    • author = renovate[bot]

🔴 🔎 Reviews

Waiting for

  • #review-requested = 0
This rule is failing.
  • #review-requested = 0
  • #changes-requested-reviews-by = 0
  • #review-threads-unresolved = 0

🟢 🤖 Continuous Integration

Wonderful, this rule succeeded.
  • all of:
    • check-success=ci-gate

🟢 Enforce conventional commit

Wonderful, this rule succeeded.

Make sure that we follow https://www.conventionalcommits.org/en/v1.0.0/

  • title ~= ^(fix|feat|docs|style|refactor|perf|test|build|ci|chore|revert|ui)(?:\(.+\))?:

🟢 📕 PR description

Wonderful, this rule succeeded.
  • body ~= (?ms:.{48,})

@mergify mergify Bot requested a review from a team May 19, 2026 12:21
@jd jd marked this pull request as ready for review May 19, 2026 12:49
@jd jd force-pushed the devs/jd/worktree-rust-port/dedupe-emit-helper-boilerplate-across-cmd-crates--ed32eef9 branch from 721eacd to a6bf822 Compare May 19, 2026 13:04
@jd jd force-pushed the devs/jd/worktree-rust-port/share-test-scaffolding-via-mergify-test-support--f9d688cd branch from 32628b4 to d7feae3 Compare May 19, 2026 13:04
@jd jd temporarily deployed to func-tests-live May 19, 2026 13:04 — with GitHub Actions Inactive
@jd jd temporarily deployed to func-tests-live May 19, 2026 13:04 — with GitHub Actions Inactive
@jd jd temporarily deployed to func-tests-live May 19, 2026 13:04 — with GitHub Actions Inactive
@jd
Copy link
Copy Markdown
Member Author

jd commented May 19, 2026

Revision history

# Type Changes Reason Date
1 initial 32628b4 2026-05-19 13:04 UTC
2 content 32628b4 → d7feae3 2026-05-19 13:04 UTC
3 rebase d7feae3 → bdea5bb (rebase only) 2026-05-19 14:15 UTC
4 rebase bdea5bb → 64bc36f (rebase only) 2026-05-20 08:42 UTC
5 rebase 64bc36f → 7d303a1 (rebase only) 2026-05-20 09:05 UTC

@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 19, 2026 13:04 Failure
@jd jd force-pushed the devs/jd/worktree-rust-port/share-test-scaffolding-via-mergify-test-support--f9d688cd branch from d7feae3 to bdea5bb Compare May 19, 2026 14:14
@jd jd force-pushed the devs/jd/worktree-rust-port/dedupe-emit-helper-boilerplate-across-cmd-crates--ed32eef9 branch from a6bf822 to ac72c27 Compare May 19, 2026 14:14
@jd jd temporarily deployed to func-tests-live May 19, 2026 14:15 — with GitHub Actions Inactive
@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 19, 2026 14:15 Failure
@jd jd temporarily deployed to func-tests-live May 19, 2026 14:20 — with GitHub Actions Inactive
@jd jd force-pushed the devs/jd/worktree-rust-port/dedupe-emit-helper-boilerplate-across-cmd-crates--ed32eef9 branch from ac72c27 to 7196c62 Compare May 20, 2026 08:42
@jd jd force-pushed the devs/jd/worktree-rust-port/share-test-scaffolding-via-mergify-test-support--f9d688cd branch from bdea5bb to 64bc36f Compare May 20, 2026 08:42
@jd jd temporarily deployed to func-tests-live May 20, 2026 08:42 — with GitHub Actions Inactive
@jd jd temporarily deployed to func-tests-live May 20, 2026 08:42 — with GitHub Actions Inactive
@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 20, 2026 08:43 Failure
Every command crate's test module re-rolled the same ~30 LOC of
`SharedBytes` / `SharedWriter` / `Captured` / `make_output` glue —
about 350 LOC of pure boilerplate across 15 files, drifting over
time (some `Captured` had `stderr`, some didn't; one file even
carried a `_stderr_accessor_lives` dead-code stub just to silence
the resulting warning).

Extract the canonical version into a new `mergify-test-support`
crate that other crates pull in as a `dev-dependencies`. The new
`Captured` API exposes `human()` / `new(mode)` constructors and
`stdout()` / `stderr()` accessors, so the common pattern shrinks
from a 12-line `String::from_utf8(cap.stdout.lock().unwrap().clone())`
to `let s = cap.stdout()`.

Net `-418 / +114` lines across the workspace. Behavior unchanged;
all 233 tests pass.

The crate is `publish = false` and only ever appears under
`[dev-dependencies]`, so the test-only types never leak into a
production build.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Change-Id: If9d688cdaf55360ba90f386d2020b52346c19b28
@jd jd force-pushed the devs/jd/worktree-rust-port/dedupe-emit-helper-boilerplate-across-cmd-crates--ed32eef9 branch from 7196c62 to 7e4d039 Compare May 20, 2026 09:05
@jd jd force-pushed the devs/jd/worktree-rust-port/share-test-scaffolding-via-mergify-test-support--f9d688cd branch from 64bc36f to 7d303a1 Compare May 20, 2026 09:05
@jd jd temporarily deployed to func-tests-live May 20, 2026 09:05 — with GitHub Actions Inactive
@jd jd temporarily deployed to func-tests-live May 20, 2026 09:05 — with GitHub Actions Inactive
@jd jd temporarily deployed to func-tests-live May 20, 2026 09:05 — with GitHub Actions Inactive
@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 20, 2026 09:06 Failure
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant