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)