find_package(Unity REQUIRED)
find_package(CMock REQUIRED)

set(TEST_TARGETS "")

# STK tests
add_executable(test_stk test_stk.c)
target_include_directories(test_stk PRIVATE "${CMAKE_SOURCE_DIR}")
target_link_libraries(test_stk PRIVATE stkshid Unity::Unity)
target_compile_features(test_stk PRIVATE c_std_23)
add_test(NAME test_stk COMMAND test_stk)
list(APPEND TEST_TARGETS test_stk)

# 'check' builds all suites and runs CTest with full Unity output.
# USES_TERMINAL keeps ANSI colors alive through Ninja's output buffering.
add_custom_target(check
    COMMAND ${CMAKE_CTEST_COMMAND}
            --test-dir "${CMAKE_BINARY_DIR}"
            --output-on-failure
            --progress
    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
    USES_TERMINAL
    DEPENDS ${TEST_TARGETS}
)

if (ENABLE_COVERAGE)
    set(COVERAGE_DIR "${CMAKE_BINARY_DIR}/coverage")
    add_custom_target(coverage
        COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure
        COMMAND ${CMAKE_COMMAND} -E make_directory "${COVERAGE_DIR}"
        COMMAND ${GCOVR_EXE}
                --gcov-executable "${GCOV_EXECUTABLE}"
                --root "${CMAKE_SOURCE_DIR}"
                --filter "${CMAKE_SOURCE_DIR}/stk/"
                --exclude "${CMAKE_SOURCE_DIR}/tests/"
                --exclude ".*Mock.*"
                --exclude ".*unity.*"
                --exclude ".*cmock.*"
                --html-details "${COVERAGE_DIR}/index.html"
                --txt
                --print-summary
                "${CMAKE_BINARY_DIR}"
        WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
        USES_TERMINAL
        DEPENDS ${TEST_TARGETS}
        COMMENT "Coverage report: ${COVERAGE_DIR}/index.html"
    )
endif()
