mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-12-27 08:19:47 -05:00
744b4abce8
* Fix #3506 * Fix #2389 * Fix #2536 * Fix #2230 Every database that has been opened now watch's it's own file. This allows the database class to manage file changes and detect fail conditions during saving. Additionally, all stakeholders of the database can listen for the database file changed notification and respond accordingly. Performed significant cleanup of the autoreload code within DatabaseWidget. Fixed several issues with handling changes due to merging, not merging, and other scenarios while reloading. Prevent database saves to the same file if there are changes on disk that have not been merged with the open database.
250 lines
8.2 KiB
CMake
250 lines
8.2 KiB
CMake
# Copyright (C) 2018 KeePassXC Team <team@keepassxc.org>
|
|
# Copyright (C) 2010 Felix Geyer <debfx@fobos.de>
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 2 or (at your option)
|
|
# version 3 of the License.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
include_directories(
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
${CMAKE_SOURCE_DIR}/src
|
|
${CMAKE_CURRENT_BINARY_DIR}/../src)
|
|
|
|
add_definitions(-DQT_TEST_LIB)
|
|
|
|
set(KEEPASSX_TEST_DATA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/data)
|
|
configure_file(config-keepassx-tests.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-keepassx-tests.h)
|
|
|
|
macro(parse_arguments prefix arg_names option_names)
|
|
set(DEFAULT_ARGS)
|
|
foreach(arg_name ${arg_names})
|
|
set(${prefix}_${arg_name})
|
|
endforeach(arg_name)
|
|
foreach(option ${option_names})
|
|
set(${prefix}_${option} FALSE)
|
|
endforeach(option)
|
|
|
|
set(current_arg_name DEFAULT_ARGS)
|
|
set(current_arg_list)
|
|
foreach(arg ${ARGN})
|
|
set(larg_names ${arg_names})
|
|
list(FIND larg_names "${arg}" is_arg_name)
|
|
if(is_arg_name GREATER -1)
|
|
set(${prefix}_${current_arg_name} ${current_arg_list})
|
|
set(current_arg_name ${arg})
|
|
set(current_arg_list)
|
|
else()
|
|
set(loption_names ${option_names})
|
|
list(FIND loption_names "${arg}" is_option)
|
|
if(is_option GREATER -1)
|
|
set(${prefix}_${arg} TRUE)
|
|
else(is_option GREATER -1)
|
|
set(current_arg_list ${current_arg_list} ${arg})
|
|
endif()
|
|
endif()
|
|
endforeach(arg)
|
|
set(${prefix}_${current_arg_name} ${current_arg_list})
|
|
endmacro(parse_arguments)
|
|
|
|
macro(add_unit_test)
|
|
parse_arguments(TEST "NAME;SOURCES;LIBS" "" ${ARGN})
|
|
set(_test_NAME ${TEST_NAME})
|
|
set(_srcList ${TEST_SOURCES})
|
|
add_executable(${_test_NAME} ${_srcList})
|
|
target_link_libraries(${_test_NAME} ${TEST_LIBS})
|
|
|
|
if(NOT TEST_OUTPUT)
|
|
set(TEST_OUTPUT plaintext)
|
|
endif(NOT TEST_OUTPUT)
|
|
set(TEST_OUTPUT ${TEST_OUTPUT} CACHE STRING "The output to generate when running the QTest unit tests")
|
|
|
|
if(KDE4_TEST_OUTPUT STREQUAL "xml")
|
|
add_test(${_test_NAME} ${_test_NAME} -xml -o ${_test_NAME}.tml)
|
|
else(KDE4_TEST_OUTPUT STREQUAL "xml")
|
|
add_test(${_test_NAME} ${_test_NAME})
|
|
endif(KDE4_TEST_OUTPUT STREQUAL "xml")
|
|
|
|
if(NOT MSVC_IDE) #not needed for the ide
|
|
# if the tests are EXCLUDE_FROM_ALL, add a target "buildtests" to build all tests
|
|
if(NOT WITH_TESTS)
|
|
get_directory_property(_buildtestsAdded BUILDTESTS_ADDED)
|
|
if(NOT _buildtestsAdded)
|
|
add_custom_target(buildtests)
|
|
set_directory_properties(PROPERTIES BUILDTESTS_ADDED TRUE)
|
|
endif()
|
|
add_dependencies(buildtests ${_test_NAME})
|
|
endif()
|
|
endif()
|
|
endmacro(add_unit_test)
|
|
|
|
set(TEST_LIBRARIES
|
|
keepassx_core
|
|
${keepassxcbrowser_LIB}
|
|
${autotype_LIB}
|
|
Qt5::Core
|
|
Qt5::Concurrent
|
|
Qt5::Widgets
|
|
Qt5::Test
|
|
${GCRYPT_LIBRARIES}
|
|
${GPGERROR_LIBRARIES}
|
|
${ZLIB_LIBRARIES})
|
|
|
|
set(testsupport_SOURCES
|
|
modeltest.cpp
|
|
FailDevice.cpp
|
|
mock/MockClock.cpp
|
|
util/TemporaryFile.cpp
|
|
stub/TestRandom.cpp)
|
|
add_library(testsupport STATIC ${testsupport_SOURCES})
|
|
target_link_libraries(testsupport Qt5::Core Qt5::Concurrent Qt5::Widgets Qt5::Test)
|
|
|
|
if(YUBIKEY_FOUND)
|
|
set(TEST_LIBRARIES ${TEST_LIBRARIES} ${YUBIKEY_LIBRARIES})
|
|
endif()
|
|
|
|
add_unit_test(NAME testgroup SOURCES TestGroup.cpp
|
|
LIBS testsupport ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testkdbx2 SOURCES TestKdbx2.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testkdbx3 SOURCES TestKeePass2Format.cpp FailDevice.cpp TestKdbx3.cpp
|
|
LIBS testsupport ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testkdbx4 SOURCES TestKeePass2Format.cpp FailDevice.cpp mock/MockChallengeResponseKey.cpp TestKdbx4.cpp
|
|
LIBS testsupport ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testkeys SOURCES TestKeys.cpp mock/MockChallengeResponseKey.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testgroupmodel SOURCES TestGroupModel.cpp
|
|
LIBS testsupport ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testentrymodel SOURCES TestEntryModel.cpp
|
|
LIBS testsupport ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testcryptohash SOURCES TestCryptoHash.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testsymmetriccipher SOURCES TestSymmetricCipher.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
if(WITH_XC_KEESHARE)
|
|
add_unit_test(NAME testsignature SOURCES TestSignature.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
endif()
|
|
|
|
add_unit_test(NAME testhashedblockstream SOURCES TestHashedBlockStream.cpp
|
|
LIBS testsupport ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testkeepass2randomstream SOURCES TestKeePass2RandomStream.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testmodified SOURCES TestModified.cpp
|
|
LIBS testsupport ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testdeletedobjects SOURCES TestDeletedObjects.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testkeepass1reader SOURCES TestKeePass1Reader.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testopvaultreader SOURCES TestOpVaultReader.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testwildcardmatcher SOURCES TestWildcardMatcher.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
if(WITH_XC_NETWORKING)
|
|
add_unit_test(NAME testupdatecheck SOURCES TestUpdateCheck.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
endif()
|
|
|
|
if(WITH_XC_AUTOTYPE)
|
|
add_unit_test(NAME testautotype SOURCES TestAutoType.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
set_target_properties(testautotype PROPERTIES ENABLE_EXPORTS ON)
|
|
endif()
|
|
|
|
if(WITH_XC_CRYPTO_SSH)
|
|
add_unit_test(NAME testopensshkey SOURCES TestOpenSSHKey.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
endif()
|
|
|
|
add_unit_test(NAME testentry SOURCES TestEntry.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testmerge SOURCES TestMerge.cpp
|
|
LIBS testsupport ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testpasswordgenerator SOURCES TestPasswordGenerator.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testpassphrasegenerator SOURCES TestPassphraseGenerator.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testhibp SOURCES TestHibp.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testtotp SOURCES TestTotp.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testbase32 SOURCES TestBase32.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testcsvparser SOURCES TestCsvParser.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testrandomgenerator SOURCES TestRandomGenerator.cpp
|
|
LIBS testsupport ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testentrysearcher SOURCES TestEntrySearcher.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testcsvexporter SOURCES TestCsvExporter.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testykchallengeresponsekey
|
|
SOURCES TestYkChallengeResponseKey.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
if(WITH_XC_KEESHARE)
|
|
add_unit_test(NAME testsharing SOURCES TestSharing.cpp
|
|
LIBS testsupport ${TEST_LIBRARIES})
|
|
endif()
|
|
|
|
add_unit_test(NAME testdatabase SOURCES TestDatabase.cpp
|
|
LIBS testsupport ${TEST_LIBRARIES})
|
|
|
|
add_unit_test(NAME testtools SOURCES TestTools.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
|
|
if(WITH_XC_FDOSECRETS)
|
|
add_unit_test(NAME testfdosecrets SOURCES TestFdoSecrets.cpp
|
|
LIBS testsupport ${TEST_LIBRARIES})
|
|
endif()
|
|
|
|
if(WITH_XC_BROWSER)
|
|
add_unit_test(NAME testbrowser SOURCES TestBrowser.cpp
|
|
LIBS ${TEST_LIBRARIES})
|
|
endif()
|
|
|
|
|
|
if(WITH_GUI_TESTS)
|
|
# CLI clip tests need X environment on Linux
|
|
add_unit_test(NAME testcli SOURCES TestCli.cpp
|
|
LIBS testsupport cli ${TEST_LIBRARIES})
|
|
|
|
add_subdirectory(gui)
|
|
endif(WITH_GUI_TESTS)
|