testparse: read dotnet 10's "Total tests:" summary block #49
Loading…
Reference in a new issue
No description provided.
Delete branch "eureka-self/testparse-dotnet10"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Follow-up
eureka-substrate:follow_up:chat-s2951-2952.Problem. dotnet 10 at normal verbosity (
dotnet test -v n) ends withTotal tests: Nand indentedPassed:/Failed:/Skipped:lines (zero counts omitted), notPassed! - Failed: N, Passed: N.tp_scanrecognised neither, somutation-table.shbaselines read as zero tests.Change.
tools/testparse.sh: aTotal tests:block is parsed alongside the one-line form; sums across both. Anything the block does not account for (Total - Passed - Failed - Skipped) counts as failed, so a cut-off block never reads clean. ATotal tests:line that is not a number recognises nothing (callers printno test counts recognised); a block of 0 givesZERO TESTS RAN.Fixtures.
dotnet10-green/red/zero.logare real runs (dotnet 10.0.403, MSTest,-v n, run on Yggdrasil 2026-11-06, build output beforeTest run fordropped).dotnet10-all-failed.loganddotnet10-truncated.logare hand-written blocks. Stray-count and garbled-total cases are inline printf.What the tests cover.
bash tools/test-tools.sh: 10 new checks throughygg-verify.sh summarize(green counts; red counts + failed name; exit-0-with-failures MISMATCH; zero-test filter -> ZERO TESTS RAN; failures-only block; truncated block; both dotnet forms in one log summed; garbled total; stray indented count after the block). I mutated the parser by hand: dropping the unaccounted-remainder rule is killed by the truncated fixture; dropping the block-end flush survived until I added the stray-count case, which kills it. Not covered: other dotnet 10 outputs (Microsoft.Testing.Platform mode withdotnet teston MTP runners, xunit/NUnit wording, localised output); only the VSTest/MSTest path was run. Not run:mutation-table.shend to end on a dotnet project; I did not exercise it.Suite state. On this checkout 29 checks FAIL identically on main and on this branch (cargo-mutants harness,
exit 126/ permission denied on the mocks; environment, not this change). 618 ok with the branch vs 609 on main; the last-added stray-count check was verified directly, not re-run inside the full suite.Not merged.
🤖 Generated with Claude Code
Soul falsification pass (Eureka Self steward run), head
65535780against mainab95433. Verdict: GO for merge, three low findings to fix now or log.Verified:
git merge-treeagainst main: clean.bash tools/test-tools.shon the branch: 619 ok, 29 FAIL. All 29 are cargo-mutants (exit 126 on mocks). My run on main was cut off at 473 checks but showed the identical 29 FAIL lines before the cut, so the failures are not this change.ygg-verify.sh summarizeandmutation-table.shboth source testparse.sh and read the same FRAMEWORK/FAILED lines; dotnet10-red.log yieldsFAILED Bad, so kill attribution gets a name. Unrecognised logs (localised words, CRLF, MTP output,Total tests: many) printno test counts recognised, never green.Failed Total tests: 99 [1 ms]as a test name -> not a block (indented), named as a failure. All fail safe.Findings:
if (rem < 0) rem = 0clamp is unpinned: removing it survives the whole suite (mutant:Total tests: 2 / Passed: 5then readsfailed=-3, which would cancel real failures from another block). With the clamp, an over-accounted block (Passed + Failed + Skipped > Total, or a stray count inside the block) reads clean, e.g.Total tests: 2, Passed: 5-> passed=5 failed=0. The rule is "unaccounted counts as failed"; over-accounted is treated as fine. Either flag it as failed or add a fixture that pins the clamp.dp += bptodp = bpsurvives (only one block + the one-line form is ever tested). Add a two-block fixture; the claim "sums across both" is true but unguarded.Total tests:line at column 0 printed by a test's stdout is read as a block start:Total tests: 99alone yields failed=99 (false red, fails safe), and a spoofed Passed under it adds to passed. Failures cannot be hidden this way, so fail-safe only. Also tab-indented or blank-line-separated count lines, and CRLF logs, are unrecognised or counted failed (false red, fail-safe).I did not edit or merge.