mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 13:10:19 +00:00
78cd2f4e09
This requires the user to manually copy the large test file into the dives directory (because I really don't want to add this to the repo); instructions how to do that are displayed if the file is missing. Next it uses the git version of that same file (but prefetches it to try and remove the network speed from what is being measured). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
153 lines
5 KiB
CMake
153 lines
5 KiB
CMake
# QTest based tests
|
|
qt5_add_resources(SUBSURFACE_TEST_RESOURCES ../subsurface.qrc)
|
|
|
|
# Access test data (dive folder) from SUBSURFACE_SOURCE by default.
|
|
# In cross compilation cases or when test will not be executed at build time
|
|
# a differnt value can be set via cmake -DSUBSURFACE_TEST_DATA.
|
|
if(NOT SUBSURFACE_TEST_DATA)
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
# For windows case we expect tests to be executed
|
|
# with WORKING_DIRECTORY pointing to folder where test data can be found
|
|
set(SUBSURFACE_TEST_DATA .)
|
|
else()
|
|
set(SUBSURFACE_TEST_DATA ${SUBSURFACE_SOURCE})
|
|
endif()
|
|
endif()
|
|
|
|
add_library(RESOURCE_LIBRARY STATIC ${SUBSURFACE_TEST_RESOURCES})
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
|
|
# Prepare a staging_tests folder
|
|
# Test can run accessing data and dependecies for build time testing
|
|
# or can be deployed for target testing
|
|
# It inludes:
|
|
# - test data
|
|
# - test binaries (see TEST macro)
|
|
# - test binaries dependencies (see TEST macro)
|
|
set(WINDOWS_STAGING_TESTS ${CMAKE_BINARY_DIR}/staging_tests)
|
|
install(DIRECTORY ${SUBSURFACE_SOURCE}/dives DESTINATION ${WINDOWS_STAGING_TESTS})
|
|
|
|
# Check if we can run tests locally using wine
|
|
# Add a fake test used to ensure data is deployed to WINDOWS_STAGING_TESTS before running
|
|
find_program(WINE_PROGRAM wine)
|
|
if(WINE_PROGRAM)
|
|
add_test(
|
|
NAME InstallTestsDataAndDependencies
|
|
COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_CURRENT_BINARY_DIR} --target install
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
# Helper macro TEST used to created rules to build, link, install and run tests
|
|
macro(TEST NAME FILE)
|
|
add_executable(${NAME} ${FILE} )
|
|
target_link_libraries(
|
|
${NAME}
|
|
subsurface_corelib
|
|
RESOURCE_LIBRARY
|
|
${QT_TEST_LIBRARIES}
|
|
${SUBSURFACE_LINK_LIBRARIES}
|
|
)
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
# Re-install dependencies in WINDOWS_STAGING_TESTS (and not in WINDOWSSTAGING)
|
|
# to avoid packing testing related dlls in the installer
|
|
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DSUBSURFACE_TARGET=${NAME} -DSUBSURFACE_SOURCE=${SUBSURFACE_SOURCE} -DSTAGING=${WINDOWS_STAGING_TESTS} -P ${CMAKE_SOURCE_DIR}/cmake/Modules/dlllist.cmake WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})")
|
|
|
|
# Run test using wine
|
|
if(WINE_PROGRAM)
|
|
add_test(
|
|
NAME ${NAME}
|
|
COMMAND "$<TARGET_FILE:${NAME}>"
|
|
WORKING_DIRECTORY ${WINDOWS_STAGING_TESTS}
|
|
)
|
|
# Set WINEPATH (%PATH%) to WINDOWS_STAGING_TESTS allowing wine to find dlls
|
|
# WINEDEBUG=-all is used to avoid anoying winde debug outputs
|
|
set_tests_properties(${NAME} PROPERTIES ENVIRONMENT "WINEPATH=${WINDOWS_STAGING_TESTS};WINEDEBUG=-all")
|
|
set_tests_properties(${NAME} PROPERTIES DEPENDS PrepareTests)
|
|
endif()
|
|
else()
|
|
add_test(NAME ${NAME} COMMAND $<TARGET_FILE:${NAME}>)
|
|
endif()
|
|
endmacro()
|
|
|
|
enable_testing()
|
|
add_definitions(-g)
|
|
add_definitions(-DSUBSURFACE_TEST_DATA="${SUBSURFACE_TEST_DATA}")
|
|
|
|
# Build QML test runner
|
|
# add_executable demands relative path, therefore ../
|
|
add_executable(TestQML testqml.cpp ../subsurface-helper.cpp )
|
|
target_link_libraries(
|
|
TestQML
|
|
subsurface_corelib
|
|
RESOURCE_LIBRARY
|
|
${QT_TEST_LIBRARIES}
|
|
${SUBSURFACE_LINK_LIBRARIES}
|
|
)
|
|
|
|
# SSRF test cases (TBD, convert to standard qTest setup)
|
|
TEST(TestUnitConversion testunitconversion.cpp)
|
|
TEST(TestProfile testprofile.cpp)
|
|
TEST(TestGpsCoords testgpscoords.cpp)
|
|
TEST(TestParse testparse.cpp)
|
|
TEST(TestParsePerformance testparseperformance.cpp)
|
|
TEST(TestPlan testplan.cpp)
|
|
TEST(TestDiveSiteDuplication testdivesiteduplication.cpp)
|
|
TEST(TestRenumber testrenumber.cpp)
|
|
TEST(TestGitStorage testgitstorage.cpp)
|
|
TEST(TestPicture testpicture.cpp)
|
|
TEST(TestMerge testmerge.cpp)
|
|
TEST(TestTagList testtaglist.cpp)
|
|
|
|
TEST(TestQPrefCloudStorage testqPrefCloudStorage.cpp)
|
|
TEST(TestQPrefDisplay testqPrefDisplay.cpp)
|
|
TEST(TestQPrefDiveComputer testqPrefDiveComputer.cpp)
|
|
TEST(TestQPrefDivePlanner testqPrefDivePlanner.cpp)
|
|
TEST(TestQPrefFacebook testqPrefFacebook.cpp)
|
|
TEST(TestQPrefGeneral testqPrefGeneral.cpp)
|
|
TEST(TestQPrefGeocoding testqPrefGeocoding.cpp)
|
|
TEST(TestQPrefLanguage testqPrefLanguage.cpp)
|
|
TEST(TestQPrefLocationService testqPrefLocationService.cpp)
|
|
TEST(TestQPrefPartialPressureGas testqPrefPartialPressureGas.cpp)
|
|
TEST(TestQPrefProxy testqPrefProxy.cpp)
|
|
TEST(TestQPrefTechnicalDetails testqPrefTechnicalDetails.cpp)
|
|
TEST(TestQPrefUnits testqPrefUnits.cpp)
|
|
TEST(TestQPrefUpdateManager testqPrefUpdateManager.cpp)
|
|
add_test(NAME TestQML COMMAND $<TARGET_FILE:TestQML> ${SUBSURFACE_SOURCE}/tests)
|
|
|
|
|
|
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}
|
|
DEPENDS
|
|
TestUnitConversion
|
|
TestProfile
|
|
TestGpsCoords
|
|
TestParse
|
|
TestGitStorage
|
|
TestPlan
|
|
TestDiveSiteDuplication
|
|
TestRenumber
|
|
TestPicture
|
|
TestMerge
|
|
TestTagList
|
|
|
|
TestQPrefCloudStorage
|
|
TestQPrefDisplay
|
|
TestQPrefDiveComputer
|
|
TestQPrefDivePlanner
|
|
TestQPrefFacebook
|
|
TestQPrefGeneral
|
|
TestQPrefGeocoding
|
|
TestQPrefLanguage
|
|
TestQPrefLocationService
|
|
TestQPrefPartialPressureGas
|
|
TestQPrefProxy
|
|
TestQPrefTechnicalDetails
|
|
TestQPrefUnits
|
|
TestQPrefUpdateManager
|
|
TestQML
|
|
)
|
|
|
|
# useful for debugging CMake issues
|
|
# print_all_variables()
|