From e082a2062c394bf140aede7ca038f9b3dff0b010 Mon Sep 17 00:00:00 2001 From: JunkyDeveloper Date: Tue, 23 Jun 2026 01:36:01 +0200 Subject: [PATCH] multiple failures --- Cargo.lock | 52 +++++++++++++++++-------------------------------- src/results.rs | 4 ++-- src/runner.rs | 21 +++++++++++--------- src/viz_link.rs | 5 +---- 4 files changed, 33 insertions(+), 49 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ed660b8..e7ca8c8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -77,9 +77,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "errno" @@ -180,15 +180,15 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "libc" -version = "0.2.182" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "linux-raw-sys" -version = "0.12.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "lock_api" @@ -317,15 +317,15 @@ dependencies = [ [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ "bitflags", "errno", @@ -334,27 +334,12 @@ dependencies = [ "windows-sys", ] -[[package]] -name = "scc" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc" -dependencies = [ - "sdd", -] - [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sdd" -version = "3.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca" - [[package]] name = "semver" version = "1.0.28" @@ -393,9 +378,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", @@ -406,24 +391,23 @@ dependencies = [ [[package]] name = "serial_test" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "911bd979bf1070a3f3aa7b691a3b3e9968f339ceeec89e08c280a8a22207a32f" +checksum = "699f4197115b8a7e7ff19c9a315a4bd6fffec26cc4626ef45ecaea389e081c6d" dependencies = [ "futures-executor", "futures-util", "log", "once_cell", "parking_lot", - "scc", "serial_test_derive", ] [[package]] name = "serial_test_derive" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7d91949b85b0d2fb687445e448b40d322b6b3e4af6b44a29b21d9a5f33e6d9" +checksum = "94e153fc76e1c6a068703d6d29c508a0b15c061c4b7e43da59cc097bc342673c" dependencies = [ "proc-macro2", "quote", @@ -461,9 +445,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.27.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ "fastrand", "getrandom", diff --git a/src/results.rs b/src/results.rs index b9cc042..95cbad5 100644 --- a/src/results.rs +++ b/src/results.rs @@ -11,8 +11,8 @@ pub enum ActionOutcome { Action, /// Assertion passed AssertPassed, - /// Assertion failed with details - AssertFailed(AssertFailure), + /// Assertion failed with details (may contain multiple failures) + AssertFailed(Vec), } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/src/runner.rs b/src/runner.rs index d351558..b1e73f4 100644 --- a/src/runner.rs +++ b/src/runner.rs @@ -87,12 +87,10 @@ impl TestRunner { ActionOutcome::AssertPassed => { result.add_assertion(AssertionResult::Success(tick)); } - ActionOutcome::AssertFailed(fail) => { - result.add_assertion(AssertionResult::Failure(fail)); - result.success = false; - result.total_ticks = tick; - result.execution_time_ms = start_time.elapsed().as_millis() as u64; - return result; + ActionOutcome::AssertFailed(failures) => { + for fail in failures { + result.add_assertion(AssertionResult::Failure(fail)); + } } } } @@ -175,6 +173,7 @@ impl TestRunner { } ActionType::Assert { checks } => { + let mut failures = Vec::new(); for check in checks { match check { AssertType::Block(block) => { @@ -191,7 +190,7 @@ impl TestRunner { .map(|b| b.to_command()) .collect::>() .join(" or "); - return ActionOutcome::AssertFailed(AssertFailure { + failures.push(AssertFailure { tick: _tick, error_message: format!( "Block mismatch at {:?}: expected '{}', got '{}'", @@ -217,7 +216,7 @@ impl TestRunner { let actual = p.get_slot(inv.slot, data).unwrap_or(Item::empty()); let expected = inv.is.clone().unwrap_or(Item::empty()); if !item_matches(&actual, &expected) { - return ActionOutcome::AssertFailed(AssertFailure::new_item( + failures.push(AssertFailure::new_item( _tick, &expected, &actual, inv.slot, )); } @@ -228,7 +227,11 @@ impl TestRunner { } } } - ActionOutcome::AssertPassed + if failures.is_empty() { + ActionOutcome::AssertPassed + } else { + ActionOutcome::AssertFailed(failures) + } } ActionType::UseItemOn { pos, face, item } => { diff --git a/src/viz_link.rs b/src/viz_link.rs index fc90948..550951d 100644 --- a/src/viz_link.rs +++ b/src/viz_link.rs @@ -38,10 +38,7 @@ pub struct FailurePayload { /// Optional relative path of the test file, for live-edit-on-disk in local dev. /// flint-viz tries this first; on 404 it falls back to `spec`. pub source_path: Option, - /// Failing assertions from the run. Today's runner stops at the first - /// failure (so `len() == 1`); the type is a `Vec` so a future runner that - /// collects every assert at the failing tick is forward-compatible without - /// a schema bump. + /// All failing assertions collected during the run. pub failures: Vec, /// Total ticks executed before the run ended. pub total_ticks: u32,