mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-04 12:49:36 -06:00
GoogleTest: Set DEF_SOURCE_LINE on tests if file and line are known
This information is available when --gtest_output=json is supported, which it almost always is on GoogleTest >= 1.8.1.
This commit is contained in:
committed by
Craig Scott
parent
1cdceae8e3
commit
3f780c3fde
7
Help/release/dev/gtest-use-json-output-for-discovery.rst
Normal file
7
Help/release/dev/gtest-use-json-output-for-discovery.rst
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
gtest-use-json-output-for-discovery
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
* The :command:`gtest_discover_tests()` command from the :module:`GoogleTest`
|
||||||
|
module now sets the ``DEF_SOURCE_LINE`` test property for each discovered
|
||||||
|
test if gtest supports the ``--gtest_output=json`` option. This test
|
||||||
|
property is used by some IDEs to locate the source for each test.
|
||||||
@@ -131,10 +131,16 @@ macro(write_test_to_file)
|
|||||||
endif()
|
endif()
|
||||||
string(APPEND script ")\n")
|
string(APPEND script ")\n")
|
||||||
|
|
||||||
|
set(maybe_LOCATION "")
|
||||||
|
if(NOT current_test_file STREQUAL "" AND NOT current_test_line STREQUAL "")
|
||||||
|
set(maybe_LOCATION DEF_SOURCE_LINE "${current_test_file}:${current_test_line}")
|
||||||
|
endif()
|
||||||
|
|
||||||
add_command(set_tests_properties
|
add_command(set_tests_properties
|
||||||
"${guarded_testname}"
|
"${guarded_testname}"
|
||||||
PROPERTIES
|
PROPERTIES
|
||||||
${maybe_DISABLED}
|
${maybe_DISABLED}
|
||||||
|
${maybe_LOCATION}
|
||||||
WORKING_DIRECTORY "${arg_TEST_WORKING_DIR}"
|
WORKING_DIRECTORY "${arg_TEST_WORKING_DIR}"
|
||||||
SKIP_REGULAR_EXPRESSION "\\[ SKIPPED \\]"
|
SKIP_REGULAR_EXPRESSION "\\[ SKIPPED \\]"
|
||||||
${arg_TEST_PROPERTIES}
|
${arg_TEST_PROPERTIES}
|
||||||
@@ -175,6 +181,10 @@ macro(parse_tests_from_output)
|
|||||||
string(REPLACE [[;]] [[\;]] output "${output}")
|
string(REPLACE [[;]] [[\;]] output "${output}")
|
||||||
string(REPLACE "\n" ";" output "${output}")
|
string(REPLACE "\n" ";" output "${output}")
|
||||||
|
|
||||||
|
# Command line output doesn't contain information about the file and line number of the tests
|
||||||
|
set(current_test_file "")
|
||||||
|
set(current_test_line "")
|
||||||
|
|
||||||
# Parse output
|
# Parse output
|
||||||
foreach(line ${output})
|
foreach(line ${output})
|
||||||
# Skip header
|
# Skip header
|
||||||
@@ -265,6 +275,8 @@ macro(parse_tests_from_json json_file)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
get_json_member_with_default(test_json "name" current_test_name)
|
get_json_member_with_default(test_json "name" current_test_name)
|
||||||
|
get_json_member_with_default(test_json "file" current_test_file)
|
||||||
|
get_json_member_with_default(test_json "line" current_test_line)
|
||||||
get_json_member_with_default(test_json "value_param" current_test_value_param)
|
get_json_member_with_default(test_json "value_param" current_test_value_param)
|
||||||
get_json_member_with_default(test_json "type_param" current_test_type_param)
|
get_json_member_with_default(test_json "type_param" current_test_type_param)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
.*"tests" *:.*
|
||||||
|
*"name" *: *"basic.case_foo" *,.*
|
||||||
|
*"name" *: *"DEF_SOURCE_LINE", *
|
||||||
|
*"value" *: *"file1.cpp:1" *
|
||||||
|
.*
|
||||||
|
*"name" *: *"basic.case_bar" *,.*
|
||||||
|
*"name" *: *"DEF_SOURCE_LINE", *
|
||||||
|
*"value" *: *"file with spaces.cpp:2" *
|
||||||
11
Tests/RunCMake/GoogleTest/GoogleTestDefSourceLine.cmake
Normal file
11
Tests/RunCMake/GoogleTest/GoogleTestDefSourceLine.cmake
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
enable_language(CXX)
|
||||||
|
include(GoogleTest)
|
||||||
|
|
||||||
|
enable_testing()
|
||||||
|
|
||||||
|
include(xcode_sign_adhoc.cmake)
|
||||||
|
|
||||||
|
add_executable(fake_gtest fake_gtest.cpp)
|
||||||
|
xcode_sign_adhoc(fake_gtest)
|
||||||
|
|
||||||
|
gtest_discover_tests(fake_gtest)
|
||||||
@@ -433,6 +433,32 @@ function(run_GoogleTest_LegacyParser)
|
|||||||
unset(ENV{NO_GTEST_JSON_OUTPUT})
|
unset(ENV{NO_GTEST_JSON_OUTPUT})
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
function(run_GoogleTest_DEF_SOURCE_LINE)
|
||||||
|
# Use a single build tree for a few tests without cleaning.
|
||||||
|
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/GoogleTest-DEF_SOURCE_LINE-build)
|
||||||
|
set(RunCMake_TEST_NO_CLEAN 1)
|
||||||
|
if(NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)
|
||||||
|
set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Debug)
|
||||||
|
endif()
|
||||||
|
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
|
||||||
|
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
|
||||||
|
|
||||||
|
run_cmake(GoogleTestDefSourceLine)
|
||||||
|
|
||||||
|
run_cmake_command(GoogleTest-DEF_SOURCE_LINE-build
|
||||||
|
${CMAKE_COMMAND}
|
||||||
|
--build .
|
||||||
|
--config Debug
|
||||||
|
--target fake_gtest
|
||||||
|
)
|
||||||
|
run_cmake_command(GoogleTest-DEF_SOURCE_LINE
|
||||||
|
${CMAKE_CTEST_COMMAND}
|
||||||
|
-C Debug
|
||||||
|
-R "^basic\\.case_"
|
||||||
|
--show-only=json-v1
|
||||||
|
)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
foreach(DISCOVERY_MODE POST_BUILD PRE_TEST)
|
foreach(DISCOVERY_MODE POST_BUILD PRE_TEST)
|
||||||
message(STATUS "Testing ${DISCOVERY_MODE} discovery mode via CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE global override...")
|
message(STATUS "Testing ${DISCOVERY_MODE} discovery mode via CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE global override...")
|
||||||
run_GoogleTest(${DISCOVERY_MODE})
|
run_GoogleTest(${DISCOVERY_MODE})
|
||||||
@@ -482,3 +508,4 @@ block(SCOPE_FOR VARIABLES)
|
|||||||
endblock()
|
endblock()
|
||||||
|
|
||||||
run_GoogleTest_LegacyParser()
|
run_GoogleTest_LegacyParser()
|
||||||
|
run_GoogleTest_DEF_SOURCE_LINE()
|
||||||
|
|||||||
Reference in New Issue
Block a user