Files
Catch2/tests/TestScripts/DiscoverTests/TestPrepareCommandFragment.cmake
T

62 lines
2.0 KiB
CMake
Raw Normal View History

# SPDX-License-Identifier: BSL-1.0
# Unit tests for `prepare_command_fragment` helper in `extras/CatchAddTests.cmake`.
#
# Yes, we are at the stage where the script helpers need unit tests.
#
# Run as
# cmake -DCATCH_ADD_TESTS_SCRIPT=/path/to/extras/CatchAddTests.cmake \
# -P TestPrepareCommandFragment.cmake
cmake_minimum_required(VERSION 3.19)
if(NOT DEFINED CATCH_ADD_TESTS_SCRIPT)
message(FATAL_ERROR "Missing argument `CATCH_ADD_TESTS_SCRIPT`")
endif()
if(NOT EXISTS "${CATCH_ADD_TESTS_SCRIPT}")
message(FATAL_ERROR "Cannot find CatchAddTests.cmake at '${CATCH_ADD_TESTS_SCRIPT}'")
endif()
# Pull in the helper functions. Without `TEST_EXECUTABLE` being defined,
# `catch_discover_tests_impl` is not called.
include("${CATCH_ADD_TESTS_SCRIPT}")
set(_failures 0)
function(expect_equal description actual expected)
if(actual STREQUAL expected)
message(" [PASS] ${description}")
else()
message(" [FAIL] ${description}")
message(" expected: [${expected}]")
message(" actual: [${actual}]")
math(EXPR _n "${_failures} + 1")
set(_failures "${_n}" PARENT_SCOPE)
endif()
endfunction()
prepare_command_fragment(test_fragment SimpleName /path/to/tests)
expect_equal("Simple arg, no quotes" "${test_fragment}" " SimpleName /path/to/tests")
prepare_command_fragment(test_fragment "Name with spaces")
expect_equal("Spaces in arg, needs quotes" "${test_fragment}" " [==[Name with spaces]==]")
prepare_command_fragment(test_fragment Foo PROPERTIES LABELS "tagA\;tagB\;tagC")
expect_equal("semicolons in argument are kept and quoted"
"${test_fragment}" " Foo PROPERTIES LABELS [==[tagA\;tagB\;tagC]==]")
set(test_fragment "PRE-EXISTING")
prepare_command_fragment(test_fragment Foo PROPERTIES BAR baz)
expect_equal("out var does no accumulate commands"
"${test_fragment}" " Foo PROPERTIES BAR baz")
if(_failures GREATER 0)
message(FATAL_ERROR "${_failures} prepare_command_fragment test(s) failed")
else()
message(STATUS "All prepare_command_fragment tests passed")
endif()