From 9275cfc93869c47bfa5c99776f18e68a00789bd5 Mon Sep 17 00:00:00 2001 From: Daniel Schadt Date: Wed, 20 Apr 2022 20:45:09 +0200 Subject: fix mai trin success detection for early failures --- CHANGELOG.md | 4 ++++ src/analyzers/strikes.rs | 7 ++++++- tests/analyzers.rs | 16 +++++++++++++++- tests/logs/analyzers/mai-failed-pre-echo-20220420.zevtc | Bin 0 -> 26262 bytes 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 tests/logs/analyzers/mai-failed-pre-echo-20220420.zevtc diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b9aed6..8532b95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ All notable changes to this project will be documented in this file. - Success detection for CM logs - CM detection +### Fixed +- Success detection for Mai Trin logs that ended before the Echo of Scarlet + Briar spawned. + ## 0.7.1 - 2022-04-01 ### Added - Various analyzers for the End of Dragons strike missions: diff --git a/src/analyzers/strikes.rs b/src/analyzers/strikes.rs index 420a674..bc994e4 100644 --- a/src/analyzers/strikes.rs +++ b/src/analyzers/strikes.rs @@ -86,7 +86,12 @@ impl<'log> Analyzer for CaptainMaiTrin<'log> { let scarlet = self.log.characters().find(|npc| { npc.id() == Self::ECHO_OF_SCARLET_BRIAR || npc.id() == Self::ECHO_OF_SCARLET_BRIAR_CM - })?; + }); + // If the log ends before Scarlet even spawns, then it for sure is a failure. + let scarlet = match scarlet { + Some(s) => s, + None => return Some(Outcome::Failure), + }; let mai = self .log .characters() diff --git a/tests/analyzers.rs b/tests/analyzers.rs index dc876d6..9779e27 100644 --- a/tests/analyzers.rs +++ b/tests/analyzers.rs @@ -63,7 +63,21 @@ fn test_mai_cm_succeeded() { #[test] fn test_mai_cm_failed() { - let log = evtclib::process_file("tests/logs/cms/mai-trin-failed.zevtc", Compression::Zip).unwrap(); + let log = + evtclib::process_file("tests/logs/cms/mai-trin-failed.zevtc", Compression::Zip).unwrap(); + + let analyzer = log.analyzer().expect("No analyzer for Mai Trin"); + + assert_eq!(analyzer.outcome(), Some(Outcome::Failure)); +} + +#[test] +fn test_mai_failed_pre_echo() { + let log = evtclib::process_file( + "tests/logs/analyzers/mai-failed-pre-echo-20220420.zevtc", + Compression::Zip, + ) + .unwrap(); let analyzer = log.analyzer().expect("No analyzer for Mai Trin"); diff --git a/tests/logs/analyzers/mai-failed-pre-echo-20220420.zevtc b/tests/logs/analyzers/mai-failed-pre-echo-20220420.zevtc new file mode 100644 index 0000000..94443a0 Binary files /dev/null and b/tests/logs/analyzers/mai-failed-pre-echo-20220420.zevtc differ -- cgit v1.2.3