#ifndef BUTTON_MOCK_H #define BUTTON_MOCK_H #include "button.h" /* * Button -- Test mock with programmable state. * * Use this in tests to control exactly what button state your * application sees, without any real hardware. * * Example: * ButtonMock btn; * btn.setPressed(true); * * ToggleApp app(&sim, &btn); * app.update(); * * EXPECT_EQ(sim.getPin(LED_PIN), HIGH); // LED should be on * * You can also track how many times the button was read: * btn.resetReadCount(); * app.update(); * EXPECT_EQ(btn.readCount(), 1); */ class ButtonMock : public Button { public: /// Set whether the button appears pressed. void setPressed(bool pressed) { pressed_ = pressed; } /// Set the raw digital state returned by readState(). void setRaw(int value) { raw_ = value; } bool isPressed() override { ++read_count_; return pressed_; } int readState() override { ++read_count_; return raw_; } /// How many times has the button been read? int readCount() const { return read_count_; } /// Reset the read counter. void resetReadCount() { read_count_ = 0; } private: bool pressed_ = false; // Default: not pressed int raw_ = HIGH; // Default: HIGH (active-low, not pressed) int read_count_ = 0; }; #endif // BUTTON_MOCK_H