Build and upload tool (arduino-build.sh): - Compile, upload, and monitor via arduino-cli - Device discovery with USB ID identification (--devices) - Persistent reconnecting serial monitor (--watch) - Split compile/upload workflow (--verify, --upload-only) - First-time setup wizard (--setup) - Comprehensive --help with troubleshooting and RedBoard specs Testable application architecture: - Hardware abstraction layer (lib/hal/) decouples logic from Arduino API - Google Mock HAL for unit tests (exact call verification) - Simulated HAL for system tests (GPIO state, virtual clock, I2C devices) - Example I2C temperature sensor simulator (TMP102) - Host-side test suite via CMake + Google Test (21 tests) Example sketch: - blink/ -- LED blink with button-controlled speed, wired through HAL
46 lines
1.7 KiB
C++
46 lines
1.7 KiB
C++
#ifndef MOCK_HAL_H
|
|
#define MOCK_HAL_H
|
|
|
|
#include <gmock/gmock.h>
|
|
#include "hal.h"
|
|
|
|
/*
|
|
* StrictMock-friendly HAL mock for unit tests.
|
|
*
|
|
* Use this when you want to verify exact call sequences:
|
|
* EXPECT_CALL(mock, digitalWrite(13, HIGH)).Times(1);
|
|
*/
|
|
class MockHal : public Hal {
|
|
public:
|
|
// GPIO
|
|
MOCK_METHOD(void, pinMode, (uint8_t pin, uint8_t mode), (override));
|
|
MOCK_METHOD(void, digitalWrite, (uint8_t pin, uint8_t value), (override));
|
|
MOCK_METHOD(uint8_t, digitalRead, (uint8_t pin), (override));
|
|
MOCK_METHOD(int, analogRead, (uint8_t pin), (override));
|
|
MOCK_METHOD(void, analogWrite, (uint8_t pin, int value), (override));
|
|
|
|
// Timing
|
|
MOCK_METHOD(unsigned long, millis, (), (override));
|
|
MOCK_METHOD(unsigned long, micros, (), (override));
|
|
MOCK_METHOD(void, delay, (unsigned long ms), (override));
|
|
MOCK_METHOD(void, delayMicroseconds, (unsigned long us), (override));
|
|
|
|
// Serial
|
|
MOCK_METHOD(void, serialBegin, (unsigned long baud), (override));
|
|
MOCK_METHOD(void, serialPrint, (const char* msg), (override));
|
|
MOCK_METHOD(void, serialPrintln, (const char* msg), (override));
|
|
MOCK_METHOD(int, serialAvailable, (), (override));
|
|
MOCK_METHOD(int, serialRead, (), (override));
|
|
|
|
// I2C
|
|
MOCK_METHOD(void, i2cBegin, (), (override));
|
|
MOCK_METHOD(void, i2cBeginTransmission, (uint8_t addr), (override));
|
|
MOCK_METHOD(size_t, i2cWrite, (uint8_t data), (override));
|
|
MOCK_METHOD(uint8_t, i2cEndTransmission, (), (override));
|
|
MOCK_METHOD(uint8_t, i2cRequestFrom, (uint8_t addr, uint8_t count), (override));
|
|
MOCK_METHOD(int, i2cAvailable, (), (override));
|
|
MOCK_METHOD(int, i2cRead, (), (override));
|
|
};
|
|
|
|
#endif // MOCK_HAL_H
|