cmake-cmocka-template/cmake/cmocka-1.1.7/tests/CMakeLists.txt

268 lines
7.2 KiB
CMake

project(tests C)
set(TEST_EXCEPTION_HANDLER TRUE)
if (WIN32)
# FIXME: The exception handler doesn't work on Windows
set(TEST_EXCEPTION_HANDLER FALSE)
endif()
if (CMAKE_BUILD_TYPE)
string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
if (CMAKE_BUILD_TYPE_LOWER STREQUAL "undefinedsanitizer")
set(TEST_EXCEPTION_HANDLER FALSE)
endif()
endif()
set(CMOCKA_TESTS
test_alloc
test_group_setup_assert
test_group_setup_fail
test_fixtures
test_group_fixtures
test_groups
test_float_macros
test_double_macros
test_assert_macros
test_assert_macros_fail
test_basics
test_skip
test_strmatch
test_setup_fail
test_ordering
test_ordering_fail
test_returns
test_returns_fail
test_string
test_wildcard
test_skip_filter
test_cmockery
)
if (TEST_EXCEPTION_HANDLER)
list(APPEND CMOCKA_TESTS test_exception_handler)
endif()
foreach(_CMOCKA_TEST ${CMOCKA_TESTS})
add_cmocka_test(${_CMOCKA_TEST}
SOURCES ${_CMOCKA_TEST}.c
COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS}
LINK_LIBRARIES cmocka::static
LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
target_include_directories(${_CMOCKA_TEST} PRIVATE ${cmocka_BINARY_DIR})
add_cmocka_test_environment(${_CMOCKA_TEST})
endforeach()
### Special Cases
if (${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)")
set_source_files_properties(test_cmockery.c PROPERTIES COMPILE_FLAGS "-Wno-deprecated-declarations")
endif()
### Exceptions
# test_skip
set_tests_properties(
test_skip
PROPERTIES
PASS_REGULAR_EXPRESSION
"\\[ SKIPPED \\] test_check_skip"
)
# test_assert_macros_fail
set_tests_properties(
test_assert_macros_fail
PROPERTIES
PASS_REGULAR_EXPRESSION
"\\[ FAILED \\] tests: 1 test"
)
# test_ordering ensure proper failures
set_tests_properties(
test_ordering_fail
PROPERTIES
PASS_REGULAR_EXPRESSION
"\\[ FAILED \\] tests: 7 test"
)
# test_returns_fail ensure proper failures
set_tests_properties(
test_returns_fail
PROPERTIES
PASS_REGULAR_EXPRESSION
"\\[ FAILED \\] alloc_tests: 3 test"
)
# test_exception_handler
if (TEST_EXCEPTION_HANDLER)
set_tests_properties(test_exception_handler
PROPERTIES
PASS_REGULAR_EXPRESSION
"Test failed with exception")
endif (TEST_EXCEPTION_HANDLER)
set_tests_properties(
test_setup_fail
PROPERTIES
WILL_FAIL
1
)
set_tests_properties(
test_group_setup_assert
PROPERTIES
WILL_FAIL
1
)
set_tests_properties(
test_group_setup_fail
PROPERTIES
WILL_FAIL
1
)
add_test(test_setup_fail_1_failed ${TARGET_SYSTEM_EMULATOR} test_setup_fail)
add_cmocka_test_environment(test_setup_fail_1_failed)
set_tests_properties(
test_setup_fail_1_failed
PROPERTIES
PASS_REGULAR_EXPRESSION
"\\[ ERROR \\] int_test_ignored"
)
add_test (test_setup_fail_1_passed ${TARGET_SYSTEM_EMULATOR} test_setup_fail)
add_cmocka_test_environment(test_setup_fail_1_passed)
set_tests_properties(
test_setup_fail_1_passed
PROPERTIES
PASS_REGULAR_EXPRESSION
"\\[ PASSED \\] 1 test\\(s\\)."
)
add_test (test_setup_fail_match_failed ${TARGET_SYSTEM_EMULATOR} test_setup_fail)
add_cmocka_test_environment(test_setup_fail_match_failed)
set_tests_properties(
test_setup_fail_match_failed
PROPERTIES
PASS_REGULAR_EXPRESSION
"\\[ ERROR \\] int_test_ignored"
)
add_test (test_setup_fail_match_passed ${TARGET_SYSTEM_EMULATOR} test_setup_fail)
add_cmocka_test_environment(test_setup_fail_match_passed)
set_tests_properties(
test_setup_fail_match_passed
PROPERTIES
PASS_REGULAR_EXPRESSION
"\\[ OK \\] int_test_success"
)
### Output formats
# test output of success, failure, skip, fixture failure
set(OUTPUT_TESTS
test_basics
test_assert_macros_fail
test_groups
test_skip
test_setup_fail)
set(TEST_OUTPUT_FMTS
tap
subunit
xml)
set(test_basics_tap_out
"^TAP version 13"
"1\\.\\.2"
"ok 1 - null_test_success"
"ok 2 - int_test_success"
"# ok - tests")
set(test_assert_macros_fail_tap_out
"^TAP version 13"
"1\\.\\.1"
"not ok 1 - test_assert_return_code_fail"
"#[^\n\r]+[\n\r]#[^\n\r]+[\n\r]# not ok - tests")
set(test_groups_tap_out
"^TAP version 13"
"1\\.\\.1"
"ok 1 - null_test_success"
"# ok - test_group1"
"1\\.\\.1"
"ok 1 - int_test_success"
"# ok - test_group2")
set(test_skip_tap_out
"ok 1 # SKIP")
set(test_setup_fail_tap_out
"not ok 1 - int_test_ignored Could not run test: Test setup failed")
set(test_basics_subunit_out
"^test: null_test_success"
"success: null_test_success")
set(test_assert_macros_fail_subunit_out
"failure: test_assert_return_code_fail \\[")
set(test_groups_subunit_out
"^test: null_test_success"
"success: null_test_success")
set(test_skip_subunit_out
"^test: test_check_skip"
"skip: test_check_skip")
set(test_setup_fail_subunit_out
"error: int_test_ignored \\[ Could not run test: Test setup failed \\]")
set(test_basics_xml_out
"<testsuite name=\"tests\" time=\"[0-9.]+\" tests=\"2\" failures=\"0\" errors=\"0\" skipped=\"0\" >"
"<testcase name=\"null_test_success\" time=\"[0-9.]+\" >.*</testcase>")
set(test_assert_macros_fail_xml_out
"<testcase name=\"test_assert_return_code_fail\" time=\"[0-9.]+\" >"
"<failure>")
set(test_groups_xml_out
"^<\\?xml version=\"1.0\" encoding=\"UTF-8\" \\?>"
"<testsuites>"
"<testsuite name=\"test_group1\" time=\"[0-9.]+\" tests=\"1\" failures=\"0\" errors=\"0\" skipped=\"0\" >"
"<testcase name=\"null_test_success\" time=\"[0-9.]+\" >"
"</testcase>"
"</testsuite>"
".*<testsuite name=\"test_group2\" time=\"[0-9.]+\" tests=\"1\" failures=\"0\" errors=\"0\" skipped=\"0\" >"
"<testcase name=\"int_test_success\" time=\"[0-9.]+\" >"
"</testcase>"
"</testsuite>"
"</testsuites>")
set(test_skip_xml_out
"<testcase name=\"test_check_skip\" time=\"[0-9.]+\" >"
"<skipped/>")
set(test_setup_fail_xml_out
"<testcase name=\"int_test_ignored\" time=\"[0-9.]+\" >"
"<failure><!\\[CDATA\\[Test setup failed\\]\\]></failure>")
foreach(_TEST_OUTPUT_FMT ${TEST_OUTPUT_FMTS})
foreach(_OUTPUT_TEST ${OUTPUT_TESTS})
set(TEST_NAME ${_OUTPUT_TEST}_${_TEST_OUTPUT_FMT})
add_test(${TEST_NAME} ${TARGET_SYSTEM_EMULATOR} ${_OUTPUT_TEST})
add_cmocka_test_environment(${TEST_NAME})
set_property(
TEST
${TEST_NAME}
APPEND
PROPERTY
ENVIRONMENT CMOCKA_MESSAGE_OUTPUT=${_TEST_OUTPUT_FMT}
)
list(LENGTH ${TEST_NAME}_out len)
list(GET ${TEST_NAME}_out 0 output)
if(len GREATER 1)
list(REMOVE_AT ${TEST_NAME}_out 0)
foreach(line ${${TEST_NAME}_out})
set(output "${output}[ \n\r]+${line}")
endforeach()
endif()
set_tests_properties(
${TEST_NAME}
PROPERTIES
PASS_REGULAR_EXPRESSION
${output}
)
endforeach()
endforeach()