Add add_qt_manual_test()

This patch adds add_qt_manual_test() which is a simple wrapper around
add_qt_executable() which does not build under ${CMAKE_BUILD_DIR}/bin
or install the targets.

This could potentially be used later to tag manual tests.

Change-Id: Ic4e0a1d133009f5a858b9394347a0996cf42683f
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This commit is contained in:
Leander Beernaert 2019-11-12 15:31:34 +01:00
parent f33069be24
commit 681e8b4ead
2 changed files with 47 additions and 1 deletions

View File

@ -2390,6 +2390,40 @@ function(add_qt_benchmark target)
endfunction()
# Simple wrapper around add_qt_executable for manual tests which insure that
# the binary is built under ${CMAKE_CURRENT_BINARY_DIR} and never installed.
# See add_qt_executable() for more details.
function(add_qt_manual_test target)
qt_parse_all_arguments(arg "add_qt_benchmark"
"${__add_qt_executable_optional_args}"
"${__add_qt_executable_single_args}"
"${__add_qt_executable_multi_args}"
${ARGN}
)
qt_remove_args(exec_args
ARGS_TO_REMOVE
${target}
OUTPUT_DIRECTORY
INSTALL_DIRECTORY
ALL_ARGS
"${__add_qt_executable_optional_args}"
"${__add_qt_executable_single_args}"
"${__add_qt_executable_multi_args}"
ARGS
${ARGV}
)
add_qt_executable(${target}
NO_INSTALL # we don't install benchmarks
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" # avoid polluting bin directory
${exec_args}
)
endfunction()
# This function creates a CMake test target with the specified name for use with CTest.
function(add_qt_test name)
qt_parse_all_arguments(arg "add_qt_test"

View File

@ -246,9 +246,18 @@ def is_benchmark_project(project_file_path: str = "") -> bool:
project_relative_path = os.path.relpath(project_file_path, qmake_conf_dir_path)
# If the project file is found in a subdir called 'tests/benchmarks'
# relative to the repo source dir, then it must be benchmark
# relative to the repo source dir, then it must be a benchmark
return project_relative_path.startswith("tests/benchmarks")
def is_manual_test(project_file_path: str = "") -> bool:
qmake_conf_path = find_qmake_conf(project_file_path)
qmake_conf_dir_path = os.path.dirname(qmake_conf_path)
project_relative_path = os.path.relpath(project_file_path, qmake_conf_dir_path)
# If the project file is found in a subdir called 'tests/manual'
# relative to the repo source dir, then it must be a manual test
return project_relative_path.startswith("tests/manual")
@lru_cache(maxsize=None)
def find_qmake_conf(project_file_path: str = "") -> str:
@ -2808,6 +2817,7 @@ def write_binary(cm_fh: IO[str], scope: Scope, gui: bool = False, *, indent: int
assert binary_name
is_benchmark = is_benchmark_project(scope.file_absolute_path)
is_manual_test = is_manual_test(scope.file_absolute_path)
is_qt_test_helper = "qt_test_helper" in scope.get("_LOADED")
@ -2821,6 +2831,8 @@ def write_binary(cm_fh: IO[str], scope: Scope, gui: bool = False, *, indent: int
if is_benchmark:
cmake_function_call = "add_qt_benchmark"
elif is_manual_test:
cmake_function_call = "add_qt_manual_test"
else:
extra_keys = ["target.path", "INSTALLS"]
target_path = scope.get_string("target.path")