Prusa-Firmware-MMU/tests/unit/logic/start_up/test_start_up.cpp

89 lines
2.8 KiB
C++

#include "catch2/catch_test_macros.hpp"
#include "../../../../src/modules/buttons.h"
#include "../../../../src/modules/finda.h"
#include "../../../../src/modules/fsensor.h"
#include "../../../../src/modules/globals.h"
#include "../../../../src/modules/idler.h"
#include "../../../../src/modules/leds.h"
#include "../../../../src/modules/motion.h"
#include "../../../../src/modules/permanent_storage.h"
#include "../../../../src/modules/selector.h"
#include "../../../../src/modules/pulley.h"
#include "../../../../src/modules/user_input.h"
#include "../../../../src/logic/start_up.h"
#include "../../modules/stubs/stub_adc.h"
#include "../stubs/homing.h"
#include "../stubs/main_loop_stub.h"
#include "../stubs/stub_motion.h"
#include "../helpers/helpers.ipp"
TEST_CASE("no_command::SetInitError", "[no_command]") {
logic::StartUp su;
// Step 1 - Check there are no errors
REQUIRE(su.Error() == ErrorCode::OK);
REQUIRE(su.State() == ProgressCode::OK);
// Step 2 - Create error
su.SetInitError(ErrorCode::FINDA_VS_EEPROM_DISREPANCY);
// Step 3 - Check error is waiting for user input
REQUIRE(su.Error() == ErrorCode::FINDA_VS_EEPROM_DISREPANCY);
REQUIRE(su.State() == ProgressCode::ERRWaitingForUser);
// Step 4 - Loop through a few iterations, error remains unchanged
for (size_t i = 0; i < 100; ++i) {
su.Step();
}
REQUIRE(su.Error() == ErrorCode::FINDA_VS_EEPROM_DISREPANCY);
REQUIRE(su.State() == ProgressCode::ERRWaitingForUser);
}
TEST_CASE("no_command::FINDA_VS_EEPROM_DISREPANCY_retry", "[no_command]") {
logic::StartUp su;
// Initalise the ADC
hal::adc::SetADC(config::buttonsADCIndex, config::buttonADCMaxValue);
// Set FINDA and Fsensor on
SetFSensorStateAndDebounce(true);
SetFINDAStateAndDebounce(true);
// Step 1 - Check there are no errors
REQUIRE(su.Error() == ErrorCode::OK);
REQUIRE(su.State() == ProgressCode::OK);
// Step 2 - Create error
su.SetInitError(ErrorCode::FINDA_VS_EEPROM_DISREPANCY);
// Step 3 - Check error is waiting for user input
REQUIRE(su.Error() == ErrorCode::FINDA_VS_EEPROM_DISREPANCY);
REQUIRE(su.State() == ProgressCode::ERRWaitingForUser);
// Step 4 - Press and release button (from Printer)
PressButtonAndDebounce(su, mb::Middle, true);
ClearButtons(su);
// Check that the error is still present
REQUIRE(su.Error() == ErrorCode::FINDA_VS_EEPROM_DISREPANCY);
REQUIRE(su.State() == ProgressCode::ERRWaitingForUser);
// Untrigger FINDA and FSensor
SetFSensorStateAndDebounce(false);
SetFINDAStateAndDebounce(false);
// Step 4 - Press and release button
PressButtonAndDebounce(su, mb::Middle, true);
ClearButtons(su);
// Now the error should be gone :)
REQUIRE(su.Error() == ErrorCode::OK);
REQUIRE(su.State() == ProgressCode::OK);
}