diff --git a/mocks/CMakeLists.txt b/mocks/CMakeLists.txt index fd40910..87d3641 100644 --- a/mocks/CMakeLists.txt +++ b/mocks/CMakeLists.txt @@ -1,4 +1,6 @@ - +add_subdirectory(MockRegEdit) +add_subdirectory(MockADC) +add_subdirectory(TimerMock) diff --git a/mocks/MockADC/CMakeLists.txt b/mocks/MockADC/CMakeLists.txt new file mode 100644 index 0000000..36beae6 --- /dev/null +++ b/mocks/MockADC/CMakeLists.txt @@ -0,0 +1,7 @@ +add_library(MockADC STATIC + MockADC.c +) + +target_include_directories(MockADC PUBLIC + ${CMAKE_CURRENT_LIST_DIR} +) diff --git a/mocks/MockADC/MockADC.c b/mocks/MockADC/MockADC.c new file mode 100644 index 0000000..dcf8f8f --- /dev/null +++ b/mocks/MockADC/MockADC.c @@ -0,0 +1,84 @@ +/* + * Author: username + * Date: 2024 + * filename: MockADC.c + * description: module_purpose + */ + +#include "MockADC.h" +#include "CppUTestExt/MockSupport_c.h" + +#define FAKESIZE 256 + +uint16_t fake_data[FAKESIZE]; +int fake_index = 0; + +static bool is_setup = false; + + + +void ADC_SetPin(uint8_t pin_num) +{ + return; +} + +void ADC_Setup(void) +{ + is_setup = true; + return; +} + +void ADC_Init(uint8_t pin_num) +{ + mock_c()->actualCall("ADC_Init") + ->withUnsignedIntParameters("pin_num", pin_num); +} + +void ADC_Enable(void) +{ + mock_c()->actualCall("ADC_Enable"); +} + +void ADC_Disable() +{ + mock_c()->actualCall("ADC_Disable"); +} + +uint16_t ADC_ReadValue_Impl(uint8_t pin_num) +{ + mock_c()->actualCall("ADC_ReadValue_Impl") + ->withUnsignedIntParameters("pin_num", pin_num); + + if(fake_index == 0){ + return 0; + } + return fake_data[--fake_index]; +} + +uint16_t (*ADC_ReadValue)(uint8_t pin_num) = ADC_ReadValue_Impl; + + +void MockADC_PushValue(uint16_t value){ + if(fake_index >= FAKESIZE - 1){ + return; + } + fake_data[fake_index++] = value; +} + + +void MockADC_ZeroIndex(void) +{ + fake_index = 0; +} + + +int MockADC_GetIndex(void) +{ + return fake_index; +} + + +bool MockADC_IsSetup(void) +{ + return is_setup; +} diff --git a/mocks/MockADC/MockADC.h b/mocks/MockADC/MockADC.h new file mode 100644 index 0000000..6c95934 --- /dev/null +++ b/mocks/MockADC/MockADC.h @@ -0,0 +1,30 @@ +/** + * @brief PUT_TEXT_HERE + * @details This file is... + * @author username + * @date todays_date + * @copyright None + * @file MOCKADC.h + */ + +#ifndef MOCKADC_H +#define MOCKADC_H + +#include +#include + + +void ADC_Setup(void); +void ADC_SetPin(uint8_t pin_num); +void ADC_Init(uint8_t pin_num); +void ADC_Enable(void); +void ADC_Disable(void); + +extern uint16_t (*ADC_ReadValue)(uint8_t pin_num); + +void MockADC_PushValue(uint16_t value); +void MockADC_ZeroIndex(void); +int MockADC_GetIndex(void); +bool MockADC_IsSetup(void); + +#endif //MOCKADC_H diff --git a/mocks/MockRegEdit/CMakeLists.txt b/mocks/MockRegEdit/CMakeLists.txt new file mode 100644 index 0000000..17b06c1 --- /dev/null +++ b/mocks/MockRegEdit/CMakeLists.txt @@ -0,0 +1,12 @@ +add_library(MockRegEdit STATIC + MockRegEdit.c +) + +target_include_directories(MockRegEdit PUBLIC + ${CMAKE_CURRENT_LIST_DIR} +) + +target_link_libraries(MockRegEdit + ${CPPUTEST_LIBRARIES}/libCppUTest.a + ${CPPUTEST_LIBRARIES}/libCppUTestExt.a +) diff --git a/mocks/MockRegEdit/MockRegEdit.c b/mocks/MockRegEdit/MockRegEdit.c new file mode 100644 index 0000000..07a1f52 --- /dev/null +++ b/mocks/MockRegEdit/MockRegEdit.c @@ -0,0 +1,85 @@ +/* + * Author: username + * Date: 2024 + * filename: MockRegEdit.c + * description: module_purpose + */ + +#include "MockRegEdit.h" +#include "CppUTestExt/MockSupport_c.h" + + +void RegEdit_SetRegister(void *reg) +{ + mock_c()->actualCall("RegEdit_SetRegister") + ->withPointerParameters("reg", reg); +} + +void RegEdit_ClearRegister(void *reg) +{ + mock_c()->actualCall("RegEdit_ClearRegister") + ->withPointerParameters("reg", reg); +} + + +void RegEdit_SetBit(void *reg, uint8_t bit_num) +{ + mock_c()->actualCall("RegEdit_SetBit") + ->withPointerParameters("reg", reg) + ->withUnsignedIntParameters("bit_num", bit_num); +} + + +void RegEdit_ClearBit(void *reg, uint8_t bit_num) +{ + mock_c()->actualCall("RegEdit_ClearBit") + ->withPointerParameters("reg", reg) + ->withUnsignedIntParameters("bit_num", bit_num); +} + + +bool RegEdit_IsBitSet(void *reg, uint8_t bit_num) +{ + + return mock_c()->actualCall("RegEdit_IsBitSet") + ->withPointerParameters("reg", reg) + ->withUnsignedIntParameters("bit_num", bit_num) + ->returnBoolValueOrDefault(true); + //return mock_c()->returnBoolValueOrDefault(true); +} + +void RegEdit_OR_Num(void *reg, uint8_t num) +{ + mock_c()->actualCall("RegEdit_OR_Num") + ->withPointerParameters("reg", reg) + ->withUnsignedIntParameters("num", num); +} + + +void RegEdit_AND_Num(void *reg, uint8_t num) +{ + mock_c()->actualCall("RegEdit_AND_Num") + ->withPointerParameters("reg", reg) + ->withUnsignedIntParameters("num", num); +} + + + +void RegEdit_SetNum(void *reg, uint8_t num) +{ + mock_c()->actualCall("RegEdit_SetNum") + ->withPointerParameters("reg", reg) + ->withUnsignedIntParameters("num", num); +} + + +uint8_t RegEdit_ReadReg(void *reg) +{ + uint8_t value = *(uint8_t *)reg; + + mock_c()->actualCall("RegEdit_ReadReg") + ->withPointerParameters("reg", reg) + ->returnUnsignedIntValueOrDefault(value); + + return value; +} diff --git a/mocks/MockRegEdit/MockRegEdit.h b/mocks/MockRegEdit/MockRegEdit.h new file mode 100644 index 0000000..f725c98 --- /dev/null +++ b/mocks/MockRegEdit/MockRegEdit.h @@ -0,0 +1,30 @@ +/** + * @brief PUT_TEXT_HERE + * @details This file is... + * @author username + * @date todays_date + * @copyright None + * @file MockRegEdit.h + */ + +#ifndef MOCKREGEDIT_H +#define MOCKREGEDIT_H + + +#include +#include + +void RegEdit_SetRegister(void *reg); +void RegEdit_ClearRegister(void *reg); +void RegEdit_SetBit(void *reg, uint8_t bit_num); +void RegEdit_ClearBit(void *reg, uint8_t bit_num); +bool RegEdit_IsBitSet(void *reg, uint8_t bit_num); + +void RegEdit_OR_Num(void *reg, uint8_t num); +void RegEdit_AND_Num(void *reg, uint8_t num); + +void RegEdit_SetNum(void *reg, uint8_t num); + +uint8_t RegEdit_ReadReg(void *reg); + +#endif //MOCKREGEDIT_H diff --git a/mocks/MockRegEdit/u8_comparator.cpp b/mocks/MockRegEdit/u8_comparator.cpp new file mode 100644 index 0000000..c647645 --- /dev/null +++ b/mocks/MockRegEdit/u8_comparator.cpp @@ -0,0 +1,51 @@ +#include "u8_comparator.hpp" +#include "CppUTest/SimpleString.h" + +/* +class MyTypeComparator : public MockNamedValueComparator +{ +public: + virtual bool isEqual(const void* object1, const void* object2) + { + return object1 == object2; + } + virtual SimpleString valueToString(const void* object) + { + return StringFrom(object); + } +}; +*/ + +bool UInt8PointerComparator::isEqual(const void* object1, const void* object2) { + const uint8_t* ptr1 = reinterpret_cast(object1); + const uint8_t* ptr2 = reinterpret_cast(object2); + return std::memcmp(ptr1, ptr2, sizeof(uint8_t)) == 0; +} + +SimpleString UInt8PointerComparator::valueToString(const void* object) { + const uint8_t* ptr = reinterpret_cast(object); + return StringFromFormat("0x%02x", *ptr); +} + +/* +bool UInt8PointerComparator::isEqual(const void* object1, const void* object2) const { + const uint8_t* ptr1 = static_cast(object1); + const uint8_t* ptr2 = static_cast(object2); + return std::memcmp(ptr1, ptr2, sizeof(uint8_t)) == 0; +} + +SimpleString UInt8PointerComparator::valueToString(const void* object) const { + const uint8_t* ptr = static_cast(object); + return StringFromFormat("0x%02x", *ptr); +} +*/ + +bool UInt8Comparator::isEqual(const void* object1, const void* object2) { + return (uint8_t*)object1 == (uint8_t *)object2; +} + +SimpleString UInt8Comparator::valueToString(const void* object) { + //uint8_t value = reinterpret_cast(object); + const uint8_t *ptr = reinterpret_cast(object); + return StringFromFormat("0x%02x", *ptr); +} diff --git a/mocks/MockRegEdit/u8_comparator.hpp b/mocks/MockRegEdit/u8_comparator.hpp new file mode 100644 index 0000000..0c934d8 --- /dev/null +++ b/mocks/MockRegEdit/u8_comparator.hpp @@ -0,0 +1,20 @@ +#ifndef U8_COMPARATOR_H +#define U8_COMPARATOR_H + +#include +#include +#include + +class UInt8PointerComparator : public MockNamedValueComparator { +public: + virtual bool isEqual(const void* object1, const void* object2) override; + SimpleString valueToString(const void* object) override; +}; + +class UInt8Comparator : public MockNamedValueComparator { + public: + virtual bool isEqual(const void* object1, const void* object2) override; + SimpleString valueToString(const void* object) override; +}; + +#endif //U8_COMPARATOR_H diff --git a/mocks/TimerMock/CMakeLists.txt b/mocks/TimerMock/CMakeLists.txt new file mode 100644 index 0000000..fe90a85 --- /dev/null +++ b/mocks/TimerMock/CMakeLists.txt @@ -0,0 +1,7 @@ +add_library(TimerMock STATIC + TimerMock.c +) + +target_include_directories(TimerMock PUBLIC + ${CMAKE_CURRENT_LIST_DIR} +) diff --git a/mocks/TimerMock/TimerMock.c b/mocks/TimerMock/TimerMock.c new file mode 100644 index 0000000..09880b4 --- /dev/null +++ b/mocks/TimerMock/TimerMock.c @@ -0,0 +1,31 @@ +/* + * Author: Jake G + * Date: 2024-09-02 + * filename: TimerMock.c + * description: mocks timers + */ + +#include "TimerMock.h" +#include +#include "CppUTestExt/MockSupport_c.h" + +static bool timer_started = false; + +void Timer_Start(void) +{ + mock_c()->actualCall("Timer_Start"); + timer_started = true; +} + +void Timer_Stop(void) +{ + mock_c()->actualCall("Timer_Stop"); + timer_started = false; +} + +uint16_t Timer_GetOverflowCount(void) +{ + uint16_t time = 0xAAAA; + return mock_c()->actualCall("Timer_GetOverflowCount") + ->returnUnsignedIntValueOrDefault(time); +} diff --git a/mocks/TimerMock/TimerMock.h b/mocks/TimerMock/TimerMock.h new file mode 100644 index 0000000..7e4e02b --- /dev/null +++ b/mocks/TimerMock/TimerMock.h @@ -0,0 +1,26 @@ +/** + * @brief A Mock of the timer module. + * @details This file is only used for testing. + * @author Jake G + * @date 2024-09-02 + * @copyright None + * @file TimerMock.h + */ + +#ifndef TIMER_MOCK_H +#define TIMER_MOCK_H + +#include + +/** + * A function + * @param a The first argument + */ +void Timer_Start(void); + +void Timer_Stop(void); + +uint16_t Timer_GetOverflowCount(void); + + +#endif //TIMER_MOCK_H