Supporting a button library.

This commit is contained in:
Eric Ratliff
2026-02-22 07:44:41 -06:00
parent 131ca648b5
commit 970479f4b6
8 changed files with 922 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
#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