From 7fe81be707049ab17973e2929546343cfaf22e73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 17 Dec 2022 13:06:53 +0000 Subject: [PATCH] Fix FINDA flicker tests --- .../logic/tool_change/test_tool_change.cpp | 50 ++++++++++++++----- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/tests/unit/logic/tool_change/test_tool_change.cpp b/tests/unit/logic/tool_change/test_tool_change.cpp index 25cfe93..4a42976 100644 --- a/tests/unit/logic/tool_change/test_tool_change.cpp +++ b/tests/unit/logic/tool_change/test_tool_change.cpp @@ -210,6 +210,8 @@ void ToolChangeFailLoadToFinda(logic::ToolChange &tc, uint8_t fromSlot, uint8_t REQUIRE(VerifyState(tc, mg::FilamentLoadState::AtPulley, toSlot, toSlot, false, true, ml::off, ml::blink0, ErrorCode::RUNNING, ProgressCode::ERRDisengagingIdler)); SimulateErrDisengagingIdler(tc, ErrorCode::FINDA_DIDNT_SWITCH_ON); + + REQUIRE(VerifyState(tc, mg::FilamentLoadState::AtPulley, mi::idler.IdleSlotIndex(), toSlot, false, false, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_SWITCH_ON, ProgressCode::ERRWaitingForUser)); } void ToolChangeFailLoadToFindaLeftBtn(logic::ToolChange &tc, uint8_t toSlot) { @@ -246,8 +248,6 @@ void ToolChangeFailLoadToFindaMiddleBtn(logic::ToolChange &tc, uint8_t toSlot) { // now waiting for user input REQUIRE_FALSE(mui::userInput.AnyEvent()); - REQUIRE(VerifyState(tc, mg::FilamentLoadState::AtPulley, mi::idler.IdleSlotIndex(), toSlot, false, false, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_SWITCH_ON, ProgressCode::ERRWaitingForUser)); - PressButtonAndDebounce(tc, mb::Middle, true); REQUIRE_FALSE(mi::idler.HomingValid()); @@ -460,7 +460,14 @@ void ToolChangeWithFlickeringFINDA(logic::ToolChange &tc, uint8_t fromSlot, uint main_loop(); tc.Step(); - REQUIRE(VerifyState(tc, mg::FilamentLoadState::InSelector, toSlot, toSlot, false, true, ml::off, ml::blink0, ErrorCode::RUNNING, ProgressCode::ERRDisengagingIdler)); + REQUIRE(mf::finda.Pressed()); + REQUIRE((int)mg::globals.FilamentLoaded() == (int)mg::FilamentLoadState::AtPulley); + REQUIRE(mm::PulleyEnabled() == false); + REQUIRE(ml::leds.Mode(toSlot, ml::green) == ml::off); + REQUIRE(ml::leds.Mode(toSlot, ml::red) == ml::blink0); + REQUIRE(tc.Error() == ErrorCode::RUNNING); + REQUIRE(tc.TopLevelState() == ProgressCode::ERRDisengagingIdler); + SimulateErrDisengagingIdler(tc, ErrorCode::FINDA_FLICKERS); // this should be a single step, Idler should remain disengaged due to previous error // now we have 2 options what can happen: @@ -469,22 +476,41 @@ void ToolChangeWithFlickeringFINDA(logic::ToolChange &tc, uint8_t fromSlot, uint if (keepFindaPressed) { // now waiting for user input REQUIRE_FALSE(mui::userInput.AnyEvent()); - REQUIRE(VerifyState(tc, mg::FilamentLoadState::InSelector, toSlot, toSlot, false, true, ml::off, ml::blink0, ErrorCode::FINDA_FLICKERS, ProgressCode::ERRWaitingForUser)); + + REQUIRE(mf::finda.Pressed()); + REQUIRE((int)mg::globals.FilamentLoaded() == (int)mg::FilamentLoadState::AtPulley); + REQUIRE(mm::PulleyEnabled() == false); + REQUIRE(ml::leds.Mode(toSlot, ml::green) == ml::off); + REQUIRE(ml::leds.Mode(toSlot, ml::red) == ml::blink0); + REQUIRE(tc.Error() == ErrorCode::FINDA_FLICKERS); + REQUIRE(tc.TopLevelState() == ProgressCode::ERRWaitingForUser); + PressButtonAndDebounce(tc, mb::Middle, true); // we should remain in the same error state - REQUIRE(VerifyState(tc, mg::FilamentLoadState::InSelector, toSlot, toSlot, false, true, ml::off, ml::blink0, ErrorCode::RUNNING, ProgressCode::ERRDisengagingIdler)); + REQUIRE(mf::finda.Pressed()); + REQUIRE((int)mg::globals.FilamentLoaded() == (int)mg::FilamentLoadState::AtPulley); + REQUIRE(mm::PulleyEnabled() == false); + REQUIRE(ml::leds.Mode(toSlot, ml::green) == ml::off); + REQUIRE(ml::leds.Mode(toSlot, ml::red) == ml::blink0); + REQUIRE(tc.Error() == ErrorCode::RUNNING); + REQUIRE(tc.TopLevelState() == ProgressCode::ERRDisengagingIdler); // Idler will try to rehome, allow it SimulateIdlerHoming(tc); - REQUIRE(VerifyState(tc, mg::FilamentLoadState::InSelector, toSlot, toSlot, false, true, ml::off, ml::blink0, ErrorCode::FINDA_FLICKERS, ProgressCode::ERRWaitingForUser)); - // now "fix" FINDA and the command shall finish correctly - SetFINDAStateAndDebounce(false); - ToolChangeFailLoadToFindaMiddleBtn(tc, toSlot); - } else { - SetFINDAStateAndDebounce(false); - ToolChangeFailLoadToFindaMiddleBtn(tc, toSlot); + REQUIRE(mf::finda.Pressed()); + REQUIRE((int)mg::globals.FilamentLoaded() == (int)mg::FilamentLoadState::AtPulley); + REQUIRE(mm::PulleyEnabled() == false); + REQUIRE(ml::leds.Mode(toSlot, ml::green) == ml::off); + REQUIRE(ml::leds.Mode(toSlot, ml::red) == ml::blink0); + REQUIRE(tc.Error() == ErrorCode::FINDA_FLICKERS); + REQUIRE(tc.TopLevelState() == ProgressCode::ERRWaitingForUser); } + + // now "fix" FINDA and the command shall finish correctly + SetFINDAStateAndDebounce(false); + + ToolChangeFailLoadToFindaMiddleBtn(tc, toSlot); } TEST_CASE("tool_change::test_flickering_FINDA", "[tool_change]") {