From 02c48ab7d698092239b90aaebc280812d9cdf618 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Fri, 12 Dec 2014 18:21:57 +0300 Subject: [PATCH] add CTest support to build tree --- CMakeLists.txt | 2 ++ cmake/OpenCVModule.cmake | 20 ++++++++------------ cmake/OpenCVUtils.cmake | 29 +++++++++++++++++++++++++++++ modules/cudev/test/CMakeLists.txt | 4 +--- modules/ts/src/ts_func.cpp | 3 +++ 5 files changed, 43 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1482dec73c..ec3d17928a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,6 +85,8 @@ if(DEFINED CMAKE_BUILD_TYPE) set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} ) endif() +enable_testing() + project(OpenCV CXX C) if(MSVC) diff --git a/cmake/OpenCVModule.cmake b/cmake/OpenCVModule.cmake index 9a330e0deb..92894b8b81 100644 --- a/cmake/OpenCVModule.cmake +++ b/cmake/OpenCVModule.cmake @@ -1008,6 +1008,12 @@ function(ocv_add_perf_tests) if(NOT BUILD_opencv_world) _ocv_add_precompiled_headers(${the_target}) endif() + + ocv_add_test_from_target("${the_target}" "Performance" "${the_target}") + ocv_add_test_from_target("opencv_sanity_${name}" "Sanity" "${the_target}" + "--perf_min_samples=1" + "--perf_force_samples=1" + "--perf_verify_sanity") else(OCV_DEPENDENCIES_FOUND) # TODO: warn about unsatisfied dependencies endif(OCV_DEPENDENCIES_FOUND) @@ -1068,21 +1074,11 @@ function(ocv_add_accuracy_tests) set_target_properties(${the_target} PROPERTIES FOLDER "tests accuracy") endif() - enable_testing() - get_target_property(LOC ${the_target} LOCATION) - add_test(${the_target} "${LOC}") - - if(WINRT) - # removing APPCONTAINER from tests to run from console - # look for detailed description inside of ocv_create_module macro above - add_custom_command(TARGET "opencv_test_${name}" - POST_BUILD - COMMAND link.exe /edit /APPCONTAINER:NO $(TargetPath)) - endif() - if(NOT BUILD_opencv_world) _ocv_add_precompiled_headers(${the_target}) endif() + + ocv_add_test_from_target("${the_target}" "Accuracy" "${the_target}") else(OCV_DEPENDENCIES_FOUND) # TODO: warn about unsatisfied dependencies endif(OCV_DEPENDENCIES_FOUND) diff --git a/cmake/OpenCVUtils.cmake b/cmake/OpenCVUtils.cmake index e105f87267..e4e8771bf6 100644 --- a/cmake/OpenCVUtils.cmake +++ b/cmake/OpenCVUtils.cmake @@ -911,3 +911,32 @@ function(ocv_download) set(DOWNLOAD_PACKAGE_LOCATION ${DOWNLOAD_TARGET} PARENT_SCOPE) endfunction() + +function(ocv_add_test_from_target test_name test_kind the_target) + if(CMAKE_VERSION VERSION_GREATER "2.8" AND NOT CMAKE_CROSSCOMPILING) + if(NOT "${test_kind}" MATCHES "^(Accuracy|Performance|Sanity)$") + message(FATAL_ERROR "Unknown test kind : ${test_kind}") + endif() + if(NOT TARGET "${the_target}") + message(FATAL_ERROR "${the_target} is not a CMake target") + endif() + + string(TOLOWER "${test_kind}" test_kind_lower) + set(test_report_dir "${CMAKE_BINARY_DIR}/test-reports/${test_kind_lower}") + file(MAKE_DIRECTORY "${test_report_dir}") + + add_test(NAME "${test_name}" + COMMAND "${the_target}" + "--gtest_output=xml:${the_target}.xml" + ${ARGN}) + + set_tests_properties("${test_name}" PROPERTIES + LABELS "${OPENCV_MODULE_${the_module}_LABEL};${test_kind}" + WORKING_DIRECTORY "${test_report_dir}") + + if(OPENCV_TEST_DATA_PATH) + set_tests_properties("${test_name}" PROPERTIES + ENVIRONMENT "OPENCV_TEST_DATA_PATH=${OPENCV_TEST_DATA_PATH}") + endif() + endif() +endfunction() diff --git a/modules/cudev/test/CMakeLists.txt b/modules/cudev/test/CMakeLists.txt index e4c753ee7e..a7bd6328bc 100644 --- a/modules/cudev/test/CMakeLists.txt +++ b/modules/cudev/test/CMakeLists.txt @@ -46,9 +46,7 @@ if(OCV_DEPENDENCIES_FOUND) set_target_properties(${the_target} PROPERTIES FOLDER "tests accuracy") endif() - enable_testing() - get_target_property(LOC ${the_target} LOCATION) - add_test(${the_target} "${LOC}") + ocv_add_test_from_target("${the_target}" "Accuracy" "${the_target}") if(INSTALL_TESTS) install(TARGETS ${the_target} RUNTIME DESTINATION ${OPENCV_TEST_INSTALL_PATH} COMPONENT tests) diff --git a/modules/ts/src/ts_func.cpp b/modules/ts/src/ts_func.cpp index 202a96f367..b6409ad37f 100644 --- a/modules/ts/src/ts_func.cpp +++ b/modules/ts/src/ts_func.cpp @@ -2951,6 +2951,9 @@ MatComparator::operator()(const char* expr1, const char* expr2, void printVersionInfo(bool useStdOut) { + // Tell CTest not to discard any output + if(useStdOut) std::cout << "CTEST_FULL_OUTPUT" << std::endl; + ::testing::Test::RecordProperty("cv_version", CV_VERSION); if(useStdOut) std::cout << "OpenCV version: " << CV_VERSION << std::endl;