From 514c90cefe4c211095d201c2924f3820ff7d0d9e Mon Sep 17 00:00:00 2001 From: jake-g00dwin Date: Tue, 17 Mar 2026 18:25:10 -0700 Subject: [PATCH] Added tests for I2C periherials --- tests/AllTests.cpp | 1 + tests/CMakeLists.txt | 2 + tests/I2C/CMakeLists.txt | 23 +++++ tests/I2C/fakes/CMakeLists.txt | 0 tests/I2C/mocks/CMakeLists.txt | 0 tests/I2C/stubs/CMakeLists.txt | 0 tests/I2C/test_I2C.cpp | 160 +++++++++++++++++++++++++++++++++ 7 files changed, 186 insertions(+) create mode 100644 tests/I2C/CMakeLists.txt create mode 100644 tests/I2C/fakes/CMakeLists.txt create mode 100644 tests/I2C/mocks/CMakeLists.txt create mode 100644 tests/I2C/stubs/CMakeLists.txt create mode 100644 tests/I2C/test_I2C.cpp diff --git a/tests/AllTests.cpp b/tests/AllTests.cpp index 2bed0b8..bee2998 100644 --- a/tests/AllTests.cpp +++ b/tests/AllTests.cpp @@ -4,6 +4,7 @@ IMPORT_TEST_GROUP(simple_test); IMPORT_TEST_GROUP(tg_ADC); IMPORT_TEST_GROUP(tg_wwdg); +IMPORT_TEST_GROUP(tg_I2C); IMPORT_TEST_GROUP(test_RegEdit); IMPORT_TEST_GROUP(test_blink); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 5293235..c1b6684 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,6 +1,7 @@ project(Tests) # TEST_DIRS +add_subdirectory(I2C) add_subdirectory(wwdg) add_subdirectory(blink) add_subdirectory(MockRegEdit) @@ -20,6 +21,7 @@ add_executable(AllTests target_link_libraries(AllTests ${CPPUTEST_LIBRARIES} # TEST_LINKS +test_I2C test_wwdg test_blink test_ADC diff --git a/tests/I2C/CMakeLists.txt b/tests/I2C/CMakeLists.txt new file mode 100644 index 0000000..189e525 --- /dev/null +++ b/tests/I2C/CMakeLists.txt @@ -0,0 +1,23 @@ +# File: tests/I2C/CMakeLists.txt + +add_subdirectory(mocks) +add_subdirectory(fakes) +add_subdirectory(stubs) + +# TEST_RUNNER +add_library(test_I2C + test_I2C.cpp +) + +target_link_libraries(test_I2C + ${CPPUTEST_LIBRARIES} + I2C +) + +target_include_directories(test_I2C PUBLIC + ${CMAKE_CURRENT_LIST_DIR} + #Next comes the shared and non-module specific test depencencies. + ${CMAKE_SOURCE_DIR}/tests/shared/mocks/ + ${CMAKE_SOURCE_DIR}/tests/shared/fakes/ + ${CMAKE_SOURCE_DIR}/tests/shared/stubs/ +) diff --git a/tests/I2C/fakes/CMakeLists.txt b/tests/I2C/fakes/CMakeLists.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/I2C/mocks/CMakeLists.txt b/tests/I2C/mocks/CMakeLists.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/I2C/stubs/CMakeLists.txt b/tests/I2C/stubs/CMakeLists.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/I2C/test_I2C.cpp b/tests/I2C/test_I2C.cpp new file mode 100644 index 0000000..f615440 --- /dev/null +++ b/tests/I2C/test_I2C.cpp @@ -0,0 +1,160 @@ +/* + * Author: username + * Date: todays_date + * filename: test_I2C.c + * description: module_purpose + */ + +#include "CppUTest/CommandLineTestRunner.h" + +extern "C" +{ +#include "I2C.h" +#include "I2C_internal.h" +} + +TEST_GROUP(tg_I2C) +{ + void setup() + { + + } + void teardown() + { + + } +}; + +/* + typedef struct + { + uint32_t clockspeed; + uint16_t mode; + uint16_t dutycycle; + uint16_t ownaddress1; + uint16_t ack; + uint16_t ack_address; + } i2c_config; +*/ + +TEST(tg_I2C, GetBusReturnsNonNullOnValidIndecies) +{ + i2c_bus_typedef_p i2cbus_ptr = I2C_GetBus(0); + CHECK_TRUE_TEXT(i2cbus_ptr != nullptr, "The pointer should have been valid but was nullptr."); +} + +TEST(tg_I2C, GetBusReturnsNullOnInvalid) +{ + + i2c_bus_typedef_p i2cbus_ptr = I2C_GetBus(I2C_BUS_QTY + 1); + CHECK_EQUAL_TEXT(nullptr, i2cbus_ptr, "The pointer should be null for invalid indecies."); + +} + +TEST(tg_I2C, BusFailsOnInvalidconfig) +{ + +} + +TEST(tg_I2C, CreateI2CBus_10Bit) +{ + i2c_config i2c1_config = { + .clockspeed = I2C_STD_SPEED, + .mode = I2C_MODE_MASTER, + .dutycycle = 0, + .ownaddress = 0, + .ack = true, + .ack_address = 0, + }; + + i2c_bus_typedef_p i2c1_ptr = I2C_GetBus(0); + + bool ret = i2c1_ptr->Init(i2c1_ptr, &i2c1_config); + CHECK_TRUE(ret); +} + + +TEST_GROUP(tg_I2C_internal) +{ + i2c_config config; + void setup() + { + config.clockspeed = 0; + config.mode = 0; + + } + void teardown() + { + + } +}; + +TEST(tg_I2C_internal, i2c_configchecksclockspeed) +{ + bool ret = false; + + for(config.clockspeed = 0; config.clockspeed < I2C_INVALID_SPEED; config.clockspeed++){ + ret = is_i2c_config_valid(&config); + CHECK_TRUE(ret); + } + + config.clockspeed = I2C_INVALID_SPEED; + ret = is_i2c_config_valid(&config); + CHECK_FALSE_TEXT(ret, "config check accepted invalid i2c clockspeed!"); +} + +TEST(tg_I2C_internal, i2c_configchecksmode) +{ + bool ret = false; + + for(config.mode = 0; config.mode < I2C_MODE_INVALID; config.mode++){ + ret = is_i2c_config_valid(&config); + CHECK_TRUE(ret); + } + + config.mode = I2C_MODE_INVALID; + ret = is_i2c_config_valid(&config); + CHECK_FALSE_TEXT(ret, "config check accepted invalid i2c mode!"); +} + +TEST(tg_I2C_internal, i2c_configchecksdutycycle) +{ + bool ret = false; + + for(config.dutycycle= 0; config.dutycycle < I2C_DUTYCYCLE_INVALID; config.dutycycle++){ + ret = is_i2c_config_valid(&config); + CHECK_TRUE(ret); + } + + config.dutycycle= I2C_DUTYCYCLE_INVALID; + ret = is_i2c_config_valid(&config); + CHECK_FALSE_TEXT(ret, "config check accepted invalid i2c dutycycle!"); +} + +TEST(tg_I2C_internal, is10bitaddresschecksCorrectly) +{ + bool ret = false; + + CHECK_FALSE_TEXT(ret, "check"); +} + +TEST(tg_I2C_internal, is7bitaddresschecksCorrectly) +{ + bool ret = false; + + CHECK_FALSE_TEXT(ret, "check"); +} + + + + + + + + + + + + + +