Complete Arduino API mock (mock_arduino.h/cpp) enabling application code to compile and run on PC without hardware. Includes MockSerial, String class, GPIO/analog/timing/interrupt mocks with state tracking and test control API. - Arduino.h, Wire.h, SPI.h shims intercept includes in test builds - System test template (test_system.cpp) using SimHal - CMakeLists.txt builds mock_arduino as static lib, links both suites - Root test.sh/test.bat with --unit/--system/--clean/--verbose flags - test.bat auto-detects MSVC via vswhere + vcvarsall.bat - Doctor reports nuanced compiler status (on PATH vs installed) - Refresh pulls mock infrastructure into existing projects - 15 tests passing: 7 unit (MockHal) + 8 system (SimHal)
73 lines
2.2 KiB
Cheetah
73 lines
2.2 KiB
Cheetah
cmake_minimum_required(VERSION 3.14)
|
|
project({{PROJECT_NAME}}_tests LANGUAGES CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Google Test (fetched automatically on first build)
|
|
# --------------------------------------------------------------------------
|
|
include(FetchContent)
|
|
FetchContent_Declare(
|
|
googletest
|
|
GIT_REPOSITORY https://github.com/google/googletest.git
|
|
GIT_TAG v1.14.0
|
|
)
|
|
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
|
FetchContent_MakeAvailable(googletest)
|
|
|
|
enable_testing()
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Include paths -- same headers the Arduino sketch uses
|
|
# --------------------------------------------------------------------------
|
|
set(LIB_DIR ${CMAKE_SOURCE_DIR}/../lib)
|
|
|
|
include_directories(
|
|
${LIB_DIR}/hal
|
|
${LIB_DIR}/app
|
|
${CMAKE_SOURCE_DIR}/mocks
|
|
)
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Mock Arduino library -- provides Arduino API on x86_64
|
|
# --------------------------------------------------------------------------
|
|
add_library(mock_arduino STATIC
|
|
mocks/mock_arduino.cpp
|
|
)
|
|
target_include_directories(mock_arduino PUBLIC
|
|
${CMAKE_SOURCE_DIR}/mocks
|
|
${LIB_DIR}/hal
|
|
${LIB_DIR}/app
|
|
)
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Unit tests (Google Mock -- verifies exact HAL call sequences)
|
|
# --------------------------------------------------------------------------
|
|
add_executable(test_unit
|
|
test_unit.cpp
|
|
)
|
|
target_link_libraries(test_unit
|
|
GTest::gtest_main
|
|
GTest::gmock
|
|
mock_arduino
|
|
)
|
|
|
|
# --------------------------------------------------------------------------
|
|
# System tests (SimHal -- exercises full application logic)
|
|
# --------------------------------------------------------------------------
|
|
add_executable(test_system
|
|
test_system.cpp
|
|
)
|
|
target_link_libraries(test_system
|
|
GTest::gtest_main
|
|
mock_arduino
|
|
)
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Register with CTest
|
|
# --------------------------------------------------------------------------
|
|
include(GoogleTest)
|
|
gtest_discover_tests(test_unit)
|
|
gtest_discover_tests(test_system)
|