Test parity harness: preserve NUnit identity, fixtures, and review status #13

Closed
opened 2026-08-08 08:13:44 +00:00 by hugo · 1 comment
Owner

Objective

Replace the placeholder-only test generator with a durable parity harness that tracks one reviewed Rust case per upstream NUnit invocation.

Deliverables

  • Extend the parity catalog with stable C# test IDs, parameter-case identity, body hash, Rust location, category, fixture dependencies, and semantic-review status.
  • Preserve manually translated tests across regeneration and fail on upstream drift.
  • Port common assertion helpers, deterministic clock/network fakes, byte fixtures, and test-data loading infrastructure.
  • Add reports for pending, translated, ignored-live, benchmark, and drifted cases.

Validation

  • Regeneration cannot overwrite reviewed Rust tests.
  • Catalog count remains exactly 1,295 upstream invocations unless the pinned source changes deliberately.
  • CI reports missing, duplicate, stale, or unreviewed cases.

Prerequisite

Milestone 02 must provide the complete callable public API shim. Keep all production behavior standardized as unimplemented.

Project constraints

  • Translate the original test semantics exactly; do not weaken assertions, tolerances, inputs, errors, ordering, or interaction expectations.
  • Tests must exercise the mapped Rust API and must never call LibreMetaverse/.NET as their implementation.
  • Expected C# exceptions map to specific Rust error variants; an unimplemented panic must remain a failure.
  • Do not implement production behavior during this milestone. Update parity metadata and handover status with the change.
## Objective Replace the placeholder-only test generator with a durable parity harness that tracks one reviewed Rust case per upstream NUnit invocation. ## Deliverables - Extend the parity catalog with stable C# test IDs, parameter-case identity, body hash, Rust location, category, fixture dependencies, and semantic-review status. - Preserve manually translated tests across regeneration and fail on upstream drift. - Port common assertion helpers, deterministic clock/network fakes, byte fixtures, and test-data loading infrastructure. - Add reports for pending, translated, ignored-live, benchmark, and drifted cases. ## Validation - Regeneration cannot overwrite reviewed Rust tests. - Catalog count remains exactly 1,295 upstream invocations unless the pinned source changes deliberately. - CI reports missing, duplicate, stale, or unreviewed cases. ## Prerequisite Milestone 02 must provide the complete callable public API shim. Keep all production behavior standardized as unimplemented. ## Project constraints - Translate the original test semantics exactly; do not weaken assertions, tolerances, inputs, errors, ordering, or interaction expectations. - Tests must exercise the mapped Rust API and must never call LibreMetaverse/.NET as their implementation. - Expected C# exceptions map to specific Rust error variants; an unimplemented panic must remain a failure. - Do not implement production behavior during this milestone. Update parity metadata and handover status with the change.
hugo added this to the 03 - Full semantic test translation milestone 2026-08-08 08:13:44 +00:00
hugo added the enhancement label 2026-08-08 08:13:44 +00:00
hugo closed this issue 2026-08-08 11:29:12 +00:00
hugo reopened this issue 2026-08-08 14:24:28 +00:00
Author
Owner

Implemented in 80fbe87.

Implementation:

  • Rebuilt NUnit discovery around stable source/case IDs, parameter identities, C# body hashes, categories, fixture dependencies, Rust locations, semantic-review state, and Rust test-body hashes.
  • Corrected the real pinned invocation count to 1,289. The old 1,295 inventory contained five commented-out Test attributes plus one redundant parameterless Test marker on a TestCase method.
  • Replaced executable pending placeholders with a non-executable pending inventory. generated_parity.rs now contains 1,289 comments, zero tests, and zero pending calls.
  • Added validation that rejects empty reviewed tests, source/method dispatcher wrappers, direct pending/todo/unimplemented/not_implemented bodies, duplicates, stale IDs, missing reviewed sources, and C# or Rust body drift.
  • Preserved owning-crate unit-test discovery for documented internal/friend cases.
  • Added deterministic clock, byte, path, fixture-loading, and in-memory network helpers plus CI regeneration/parity/unit gates.
  • Kept the scope to issue #13: parity reports 1,289 pending, 0 translated, 0 ignored-live, 0 benchmark, 0 drifted.

Validation:

  • cargo fmt --all -- --check
  • all mapping, shim, API coverage, surface regeneration, parity, and Python unit gates
  • cargo check --workspace --all-targets
  • locked downstream API fixture
  • cargo test --workspace --no-run
  • cargo clippy with warnings denied
  • cargo doc --workspace --no-deps
  • cargo test --workspace (green)

Review against #13 found the required durable inventory and helpers complete without translating any production test family; direct test translation begins in #14.

Implemented in 80fbe87. Implementation: - Rebuilt NUnit discovery around stable source/case IDs, parameter identities, C# body hashes, categories, fixture dependencies, Rust locations, semantic-review state, and Rust test-body hashes. - Corrected the real pinned invocation count to 1,289. The old 1,295 inventory contained five commented-out Test attributes plus one redundant parameterless Test marker on a TestCase method. - Replaced executable pending placeholders with a non-executable pending inventory. generated_parity.rs now contains 1,289 comments, zero tests, and zero pending calls. - Added validation that rejects empty reviewed tests, source/method dispatcher wrappers, direct pending/todo/unimplemented/not_implemented bodies, duplicates, stale IDs, missing reviewed sources, and C# or Rust body drift. - Preserved owning-crate unit-test discovery for documented internal/friend cases. - Added deterministic clock, byte, path, fixture-loading, and in-memory network helpers plus CI regeneration/parity/unit gates. - Kept the scope to issue #13: parity reports 1,289 pending, 0 translated, 0 ignored-live, 0 benchmark, 0 drifted. Validation: - cargo fmt --all -- --check - all mapping, shim, API coverage, surface regeneration, parity, and Python unit gates - cargo check --workspace --all-targets - locked downstream API fixture - cargo test --workspace --no-run - cargo clippy with warnings denied - cargo doc --workspace --no-deps - cargo test --workspace (green) Review against #13 found the required durable inventory and helpers complete without translating any production test family; direct test translation begins in #14.
hugo closed this issue 2026-08-08 14:49:45 +00:00
Sign in to join this conversation.