80 lines
1.9 KiB
C++
80 lines
1.9 KiB
C++
#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();
|
|
}
|