Files
anvil/templates/basic/test/CMakeLists.txt.tmpl
Eric Ratliff aa1e9d5043 Add mock Arduino for x86_64 host-side testing
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)
2026-02-20 08:21:11 -06:00

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)