cmake_minimum_required(VERSION 3.20)
project(srw64_portable_text_tests LANGUAGES CXX)
include(CTest)
get_filename_component(ROOT "${CMAKE_CURRENT_LIST_DIR}/../.." ABSOLUTE)
include("${ROOT}/cmake/PortableText.cmake")
srw64_add_portable_text()
find_package(Threads REQUIRED)
add_executable(srw64-portable-text-test portable_text.cpp)
target_link_libraries(srw64-portable-text-test PRIVATE srw64_portable_text Threads::Threads)
target_include_directories(srw64-portable-text-test PRIVATE "${ROOT}/src/host")
if(MSVC)
    target_compile_options(srw64-portable-text-test PRIVATE /W4 /utf-8)
else()
    target_compile_options(srw64-portable-text-test PRIVATE -Wall -Wextra -Wpedantic)
endif()
set(SRW64_TEST_CJK_FONT "" CACHE FILEPATH "Explicit outline CJK font for component tests")
if(NOT EXISTS "${SRW64_TEST_CJK_FONT}")
    message(FATAL_ERROR "Supply a CJK test font path; fonts are not bundled or discovered implicitly")
endif()
# Optional: a variable font (build/fonts/HarmonyOS_Sans_SC.ttf) for the weight checks.
set(SRW64_TEST_VARIABLE_FONT "" CACHE FILEPATH "Variable font for the FontSource::weight checks")
add_test(NAME portable-text COMMAND srw64-portable-text-test "${SRW64_TEST_CJK_FONT}" ${SRW64_TEST_VARIABLE_FONT})
set_tests_properties(portable-text PROPERTIES TIMEOUT 120)
option(SRW64_TEXT_SANITIZERS "Enable ASan and UBSan in the isolated text fixture" OFF)
if(SRW64_TEXT_SANITIZERS)
    if(MSVC)
        message(FATAL_ERROR "This sanitizer fixture uses Clang/GCC flags")
    endif()
    foreach(target srw64_portable_text srw64-portable-text-test)
        target_compile_options(${target} PRIVATE -fsanitize=address,undefined -fno-omit-frame-pointer)
    endforeach()
    target_link_options(srw64-portable-text-test PRIVATE -fsanitize=address,undefined)
endif()
