diff options
author | Alex Richardson <arichardson.kde@googlemail.com> | 2013-10-03 20:02:04 +0200 |
---|---|---|
committer | Alex Richardson <arichardson.kde@googlemail.com> | 2013-10-03 20:02:54 +0200 |
commit | 32310315ad2826e3037bdd6d140fced90fb559ff (patch) | |
tree | 8f84c0875dcf63f7eb4b2411b1d91fd61f3f32a9 | |
parent | 48d32cca6a6dcae9a4be492b09828d4ddd8fcbc8 (diff) | |
download | extra-cmake-modules-32310315ad2826e3037bdd6d140fced90fb559ff.tar.gz extra-cmake-modules-32310315ad2826e3037bdd6d140fced90fb559ff.tar.bz2 |
Add new functions for adding unit tests
Every framework in KF5 has a macro similar to these, this reduces
the unnecessary duplication inside all of the frameworks
REVIEW: 112828
-rw-r--r-- | modules/ECMAddTests.cmake | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/modules/ECMAddTests.cmake b/modules/ECMAddTests.cmake new file mode 100644 index 00000000..b65e68eb --- /dev/null +++ b/modules/ECMAddTests.cmake @@ -0,0 +1,55 @@ +include(ECMMarkAsTest) + +# This file provides the functions ecm_add_test() and ecm_add_tests(). +# +# ecm_add_test(<sources> TEST_NAME <name> NAME_PREFIX <prefix> LINK_LIBRARIES <libraries/targets>) +# +# Add a new unit test using the passed source files. The parameter TEST_NAME is used to set the name +# of the resulting test. It may be omitted if there is exactly one source file. In that case the name of +# the source file (without the file extension) will be used as the test name. +# +# ecm_add_tests(<sources> NAME_PREFIX <prefix> LINK_LIBRARIES <libraries/targets>) +# +# Add a new unit test for every source file passed. The name of the tests will be the name of the +# corresponding source file minus the file extension. If NAME_PREFIX is set, that string will be +# prepended to each of the unit test names. Each of the unit tests will be linked against the +# libraries and/or targets passed in the LINK_LIBRARIES parameter. +# +# Copyright (c) 2013, Alexander Richardson, <arichardson.kde@gmail.com> +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +function(ecm_add_test) + set(oneValueArgs TEST_NAME NAME_PREFIX) + set(multiValueArgs LINK_LIBRARIES) + cmake_parse_arguments(ECM_ADD_TEST "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + set(_sources ${ECM_ADD_TEST_UNPARSED_ARGUMENTS}) + list(LENGTH _sources _sourceCount) + if(ECM_ADD_TEST_TEST_NAME) + set(_testname ${ECM_ADD_TEST_TEST_NAME}) + elseif(${_sourceCount} EQUAL "1") + #use the source file name without extension as the testname + get_filename_component(_testname ${_sources} NAME_WE) + else() + #more than one source file passed, but no test name given -> error + message(FATAL_ERROR "ecm_add_unit_test() called with multiple source files but without setting \"TEST_NAME\"") + endif() + set(_testname "${ECM_ADD_TEST_NAME_PREFIX}${_testname}") + add_executable(${_testname} ${_sources}) + add_test(${_testname} ${_testname}) + target_link_libraries(${_testname} ${ECM_ADD_TEST_LINK_LIBRARIES}) + ecm_mark_as_test(${_testname}) +endfunction() + +function(ecm_add_tests) + set(oneValueArgs NAME_PREFIX) + set(multiValueArgs LINK_LIBRARIES) + cmake_parse_arguments(ECM_ADD_TESTS "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + foreach(_test_source ${ECM_ADD_TESTS_UNPARSED_ARGUMENTS}) + ecm_add_unit_test(${_test_source} + NAME_PREFIX ${ECM_ADD_TESTS_NAME_PREFIX} + LINK_LIBRARIES ${ECM_ADD_TESTS_LINK_LIBRARIES} + ) + endforeach() +endfunction() |