# CORE unit tests.
#
# Harness is the provisional header-only vtest (support/vtest.hpp); PKG owns the final
# framework choice (core/docs/pkg-requests-m1.md P2). vdm_add_test() is the only thing
# test files touch, so swapping harnesses is a one-function edit.

add_library(vtest_main STATIC support/vtest_main.cpp)
target_include_directories(vtest_main PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/support)
target_compile_features(vtest_main PUBLIC cxx_std_23)

function(vdm_add_test name)
    add_executable(${name} ${ARGN})
    target_link_libraries(${name} PRIVATE veloxcore vtest_main)
    target_compile_options(${name} PRIVATE -Wall -Wextra -Wpedantic -Werror)
    add_test(NAME ${name} COMMAND ${name})
endfunction()

vdm_add_test(veloxcore_result_test    util/result_test.cpp)
vdm_add_test(veloxcore_event_bus_test util/event_bus_test.cpp)
vdm_add_test(veloxcore_thread_pool_test util/thread_pool_test.cpp)
vdm_add_test(veloxcore_bytes_test     util/bytes_test.cpp)
vdm_add_test(veloxcore_log_test       util/log_test.cpp)

# net/ integration tests drive tools/testserver (lane PKG/QA). Skip cleanly if it isn't
# in the tree yet (lanes merge independently).
set(_testserver ${CMAKE_SOURCE_DIR}/tools/testserver/testserver.py)
vdm_add_test(veloxcore_http_client_test net/http_client_test.cpp)
target_include_directories(veloxcore_http_client_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/net)
if(EXISTS ${_testserver})
    target_compile_definitions(veloxcore_http_client_test
        PRIVATE VDM_TESTSERVER_PY="${_testserver}")
    set_tests_properties(veloxcore_http_client_test PROPERTIES TIMEOUT 120)
else()
    message(STATUS "veloxcore: tools/testserver not present; http_client_test will skip "
                   "its server-backed cases.")
endif()
