Progress towards a better application FSM, testing
This commit is contained in:
79
firmware/main_mcu/test/test_local/DebounceFsmTest.cpp
Normal file
79
firmware/main_mcu/test/test_local/DebounceFsmTest.cpp
Normal file
@@ -0,0 +1,79 @@
|
||||
#include "DebounceFsm.h"
|
||||
#include "gtest/gtest.h"
|
||||
#include "gmock/gmock.h"
|
||||
|
||||
using ::testing::Test;
|
||||
using ::testing::Return;
|
||||
|
||||
class MockClock : public Clock {
|
||||
public:
|
||||
MOCK_METHOD(uint32_t, getMillis, ());
|
||||
};
|
||||
|
||||
class MockGpioInput : public GpioInput {
|
||||
public:
|
||||
MOCK_METHOD(bool, read, ());
|
||||
};
|
||||
|
||||
|
||||
class DebounceFsmTest : public Test {
|
||||
protected:
|
||||
|
||||
DebounceFsmTest() :
|
||||
clock(),
|
||||
gpioInput(),
|
||||
activated(false),
|
||||
deactivated(false)
|
||||
{}
|
||||
~DebounceFsmTest() {}
|
||||
|
||||
static const unsigned int DEBOUNCE_MILLIS = 100;
|
||||
static const bool ACTIVE_VALUE = true;
|
||||
MockClock clock;
|
||||
MockGpioInput gpioInput;
|
||||
|
||||
bool activated;
|
||||
bool deactivated;
|
||||
|
||||
void SetUp() override {
|
||||
fsm = new DebounceFsm(
|
||||
clock,
|
||||
gpioInput,
|
||||
DEBOUNCE_MILLIS,
|
||||
ACTIVE_VALUE,
|
||||
[this](){activated = true;},
|
||||
[this](){deactivated = true;});
|
||||
ON_CALL(clock, getMillis()).WillByDefault(Return(0));
|
||||
ON_CALL(gpioInput, read()).WillByDefault(Return(!ACTIVE_VALUE));
|
||||
activated = false;
|
||||
deactivated = false;
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
fsm = nullptr;
|
||||
}
|
||||
|
||||
DebounceFsm *fsm;
|
||||
};
|
||||
|
||||
TEST_F(DebounceFsmTest, Noop) {
|
||||
|
||||
EXPECT_CALL(clock, getMillis()).WillOnce(Return(0));
|
||||
EXPECT_CALL(gpioInput, read()).WillOnce(Return(ACTIVE_VALUE));
|
||||
fsm->step();
|
||||
EXPECT_EQ(false, activated);
|
||||
EXPECT_EQ(false, deactivated);
|
||||
|
||||
EXPECT_CALL(clock, getMillis()).WillOnce(Return(DEBOUNCE_MILLIS));
|
||||
EXPECT_CALL(gpioInput, read()).WillOnce(Return(ACTIVE_VALUE));
|
||||
fsm->step();
|
||||
EXPECT_EQ(true, activated);
|
||||
EXPECT_EQ(false, deactivated);
|
||||
|
||||
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
Reference in New Issue
Block a user