cmake_minimum_required(VERSION 3.24)
project(openalgz-ut-tests LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)

find_package(openalgz-ut REQUIRED)

enable_testing()

add_executable(openalgz-ut_ide "src/main.cpp")
target_link_libraries(openalgz-ut_ide PRIVATE openalgz-ut::openalgz-ut)
add_test(NAME openalgz-ut_ide COMMAND openalgz-ut_ide)

# UT_RUN feature tests
add_executable(ut_run_tests "tests/ut_run_tests.cpp")
target_link_libraries(ut_run_tests PRIVATE openalgz-ut::openalgz-ut)

# Test: No filter - all 5 tests should run
add_test(NAME ut_run_no_filter COMMAND ut_run_tests)
set_tests_properties(ut_run_no_filter PROPERTIES
   PASS_REGULAR_EXPRESSION "tests: 5 \\(5 passed"
)

# Test: Single test filter
add_test(NAME ut_run_single COMMAND ut_run_tests)
set_tests_properties(ut_run_single PROPERTIES
   ENVIRONMENT "UT_RUN=alpha"
   PASS_REGULAR_EXPRESSION "tests: 1 \\(1 passed"
)

# Test: Single test with space in name
add_test(NAME ut_run_single_with_space COMMAND ut_run_tests)
set_tests_properties(ut_run_single_with_space PROPERTIES
   ENVIRONMENT "UT_RUN=delta test"
   PASS_REGULAR_EXPRESSION "tests: 1 \\(1 passed"
)

# Test: Array filter with two tests
add_test(NAME ut_run_array_two COMMAND ut_run_tests)
set_tests_properties(ut_run_array_two PROPERTIES
   ENVIRONMENT "UT_RUN=[alpha,beta]"
   PASS_REGULAR_EXPRESSION "tests: 2 \\(2 passed"
)

# Test: Array filter with three tests
add_test(NAME ut_run_array_three COMMAND ut_run_tests)
set_tests_properties(ut_run_array_three PROPERTIES
   ENVIRONMENT "UT_RUN=[alpha,beta,gamma]"
   PASS_REGULAR_EXPRESSION "tests: 3 \\(3 passed"
)

# Test: Array filter with tests containing spaces
add_test(NAME ut_run_array_with_spaces COMMAND ut_run_tests)
set_tests_properties(ut_run_array_with_spaces PROPERTIES
   ENVIRONMENT "UT_RUN=[delta test,epsilon test]"
   PASS_REGULAR_EXPRESSION "tests: 2 \\(2 passed"
)

# Test: Non-matching filter - no tests should run
add_test(NAME ut_run_no_match COMMAND ut_run_tests)
set_tests_properties(ut_run_no_match PROPERTIES
   ENVIRONMENT "UT_RUN=nonexistent"
   PASS_REGULAR_EXPRESSION "tests: 0 \\(0 passed"
)
