diff --git a/cmake/FindGem.cmake b/cmake/FindGem.cmake new file mode 100644 index 000000000..11c9c672b --- /dev/null +++ b/cmake/FindGem.cmake @@ -0,0 +1,39 @@ +#============================================================================= +# Copyright (c) 2019 Harald Sitter +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= + +# In this scope it's the dir we are in, in the function scope it will be the +# caller's dir. So, keep our dir in a var. +set(FINDGEM_MODULES_DIR ${CMAKE_CURRENT_LIST_DIR}) + +function(find_gem GEM_NAME) + set(GEM_PACKAGE "Gem:${GEM_NAME}") + + configure_file(${FINDGEM_MODULES_DIR}/FindGem.cmake.in Find${GEM_PACKAGE}.cmake @ONLY) + + set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_BINARY_DIR}" ${CMAKE_MODULE_PATH}) + find_package(${GEM_PACKAGE} ${ARGN}) +endfunction() diff --git a/cmake/FindGem.cmake.in b/cmake/FindGem.cmake.in new file mode 100644 index 000000000..0dcc67766 --- /dev/null +++ b/cmake/FindGem.cmake.in @@ -0,0 +1,53 @@ +#============================================================================= +# Copyright (c) 2019 Harald Sitter +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= + +find_program(RUBY_EXE ruby) +if(NOT RUBY_EXE) + message(WARNING "Could not find ruby program") + return() +endif() + +execute_process( + COMMAND ${RUBY_EXE} -e "require '@GEM_NAME@'" + ERROR_VARIABLE ERROR_VAR + RESULT_VARIABLE RESULT_VAR +) + +if(RESULT_VAR EQUAL 0) + set(@GEM_PACKAGE@_FOUND TRUE) +else() + message(WARNING ${ERROR_VAR}) + return() +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(@GEM_PACKAGE@ + FOUND_VAR + @GEM_PACKAGE@_FOUND + REQUIRED_VARS + @GEM_PACKAGE@_FOUND +) diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index d788479bd..8ef20cb83 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -1,73 +1,85 @@ set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} ) find_package(Qt5Test CONFIG REQUIRED) include(ECMAddTests) +include(FindGem) + +find_gem(test-unit REQUIRED) +set_package_properties(Gem:test-unit PROPERTIES + DESCRIPTION "Ruby gem 'test-unit' required for testing of servicemenu helpers.") + +if(BUILD_COVERAGE) + find_gem(simplecov) + set_package_properties(Gem:simplecov PROPERTIES + DESCRIPTION "Ruby gem 'simplecov' used for coverage statistics.") +endif() + # KItemSetTest ecm_add_test(kitemsettest.cpp LINK_LIBRARIES dolphinprivate Qt5::Test) # KItemRangeTest ecm_add_test(kitemrangetest.cpp LINK_LIBRARIES dolphinprivate Qt5::Test) # KItemListSelectionManagerTest ecm_add_test(kitemlistselectionmanagertest.cpp LINK_LIBRARIES dolphinprivate Qt5::Test) # KItemListControllerTest ecm_add_test(kitemlistcontrollertest.cpp testdir.cpp TEST_NAME kitemlistcontrollertest LINK_LIBRARIES dolphinprivate Qt5::Test) # KFileItemListViewTest ecm_add_test(kfileitemlistviewtest.cpp testdir.cpp TEST_NAME kfileitemlistviewtest LINK_LIBRARIES dolphinprivate Qt5::Test) # KFileItemModelTest ecm_add_test(kfileitemmodeltest.cpp testdir.cpp TEST_NAME kfileitemmodeltest LINK_LIBRARIES dolphinprivate dolphinstatic Qt5::Test) # KFileItemModelBenchmark ecm_add_test(kfileitemmodelbenchmark.cpp testdir.cpp TEST_NAME kfileitemmodelbenchmark LINK_LIBRARIES dolphinprivate Qt5::Test) # KItemListKeyboardSearchManagerTest ecm_add_test(kitemlistkeyboardsearchmanagertest.cpp LINK_LIBRARIES dolphinprivate Qt5::Test) # DolphinSearchBox if (KF5Baloo_FOUND) ecm_add_test(dolphinsearchboxtest.cpp TEST_NAME dolphinsearchboxtest LINK_LIBRARIES dolphinprivate dolphinstatic Qt5::Test) endif() # KStandardItemModelTest ecm_add_test(kstandarditemmodeltest.cpp TEST_NAME kstandarditemmodeltest LINK_LIBRARIES dolphinprivate dolphinstatic Qt5::Test) # ViewPropertiesTest ecm_add_test(viewpropertiestest.cpp testdir.cpp TEST_NAME viewpropertiestest LINK_LIBRARIES dolphinprivate dolphinstatic Qt5::Test) # DolphinMainWindowTest set(dolphinmainwindowtest_SRCS dolphinmainwindowtest.cpp) qt5_add_resources(dolphinmainwindowtest_SRCS ${CMAKE_SOURCE_DIR}/src/dolphin.qrc) ecm_add_test(${dolphinmainwindowtest_SRCS} TEST_NAME dolphinmainwindowtest LINK_LIBRARIES dolphinprivate dolphinstatic Qt5::Test) # DragAndDropHelperTest ecm_add_test(draganddrophelpertest.cpp LINK_LIBRARIES dolphinprivate Qt5::Test) # PlacesItemModelTest ecm_add_test(placesitemmodeltest.cpp TEST_NAME placesitemmodeltest LINK_LIBRARIES dolphinprivate dolphinstatic Qt5::Test) add_test(NAME servicemenutest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../settings/services/test/test_run.rb)