You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.5 KiB
53 lines
1.5 KiB
#pragma once
|
|
#include <memory>
|
|
|
|
struct alarm_t;
|
|
|
|
class AlarmMock {
|
|
public:
|
|
MOCK_METHOD1(AlarmNew, alarm_t*(const char*));
|
|
MOCK_METHOD1(AlarmFree, void(alarm_t*));
|
|
MOCK_METHOD1(AlarmCancel, void(alarm_t*));
|
|
MOCK_METHOD4(AlarmSetOnMloop, void(alarm_t* alarm, uint64_t interval_ms,
|
|
alarm_callback_t cb, void* data));
|
|
|
|
alarm_t* AlarmNewImpl(const char* name) {
|
|
AlarmNew(name);
|
|
// We must return something from alarm_new in tests, if we just return null,
|
|
// unique_ptr will misbehave. Just reserve few bits they will be freed in
|
|
// AlarmFreeImpl
|
|
return (alarm_t*)new uint8_t[30];
|
|
}
|
|
|
|
void AlarmFreeImpl(alarm_t* alarm) {
|
|
uint8_t* ptr = (uint8_t*)alarm;
|
|
delete[] ptr;
|
|
return AlarmFree(alarm);
|
|
}
|
|
|
|
static inline AlarmMock* Get() {
|
|
if (!localAlarmMock) {
|
|
localAlarmMock = std::make_unique<AlarmMock>();
|
|
}
|
|
return localAlarmMock.get();
|
|
}
|
|
|
|
static inline void Reset() { localAlarmMock = std::make_unique<AlarmMock>(); }
|
|
|
|
private:
|
|
static std::unique_ptr<AlarmMock> localAlarmMock;
|
|
};
|
|
|
|
std::unique_ptr<AlarmMock> AlarmMock::localAlarmMock;
|
|
|
|
alarm_t* alarm_new(const char* name) {
|
|
return AlarmMock::Get()->AlarmNewImpl(name);
|
|
}
|
|
|
|
void alarm_free(alarm_t* alarm) { AlarmMock::Get()->AlarmFreeImpl(alarm); }
|
|
|
|
void alarm_set_on_mloop(alarm_t* alarm, uint64_t interval_ms,
|
|
alarm_callback_t cb, void* data) {
|
|
AlarmMock::Get()->AlarmSetOnMloop(alarm, interval_ms, cb, data);
|
|
}
|