# SPDX-License-Identifier: GPL-2.0-or-later

# applies to all targets in this CMakeLists.txt
include_directories(
    ../src  # ApkQt headers
    ${PROJECT_BINARY_DIR}/src # generated includes are placed in that dir
)

add_executable(test_openclose test_openclose.cpp)
target_link_libraries(test_openclose apk-qt Qt::Core)

add_executable(test_db_update test_db_update.cpp)
target_link_libraries(test_db_update apk-qt Qt::Core)

add_executable(test_fakeroot test_fakeroot.cpp)
target_link_libraries(test_fakeroot apk-qt Qt::Core)

add_executable(test_add test_add.cpp)
target_link_libraries(test_add apk-qt Qt::Core)

add_executable(test_del test_del.cpp)
target_link_libraries(test_del apk-qt Qt::Core)

add_executable(test_print_packages test_print_packages.cpp)
target_link_libraries(test_print_packages apk-qt Qt::Core)

add_executable(test_changeset test_changeset.cpp)
target_link_libraries(test_changeset apk-qt Qt::Core)

add_executable(test_progressfd test_progressfd.cpp)
target_link_libraries(test_progressfd apk-qt Qt::Core)

add_executable(test_async_api test_async_api.cpp)
target_link_libraries(test_async_api apk-qt Qt::Core)

add_executable(test_async_api_upgrade test_async_api_upgrade.cpp)
target_link_libraries(test_async_api_upgrade apk-qt Qt::Core)

add_executable(test_reposconfig test_reposconfig.cpp)
target_link_libraries(test_reposconfig apk-qt Qt::Core)

add_executable(test_qdatastream test_qdatastream.cpp)
target_link_libraries(test_qdatastream apk-qt Qt::Core)

###################################
# To ensure some order of tests execution, run them using "Fixtures" feature of cmake >= 3.7
#   See: (https://cmake.org/cmake/help/latest/prop_test/FIXTURES_REQUIRED.html)

set(FAKEROOT_DIR ${CMAKE_CURRENT_BINARY_DIR}/fakeroot)

add_test(NAME prepare_fakeroot
    COMMAND ${CMAKE_CURRENT_LIST_DIR}/testdata/create_fakeroot.sh ${FAKEROOT_DIR}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
# Run this "test" first so it prepares the test environment:
# mark prepare_fakeroot as a setup task for a set of tests named "FR"
set_tests_properties(prepare_fakeroot PROPERTIES FIXTURES_SETUP "FR")

add_test(NAME test_openclose
    COMMAND test_openclose --root ${FAKEROOT_DIR}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)

add_test(NAME test_db_update
    COMMAND test_db_update --root ${FAKEROOT_DIR}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)

add_test(NAME test_add
    COMMAND test_add --root ${FAKEROOT_DIR}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)

add_test(NAME test_del
    COMMAND test_del --root ${FAKEROOT_DIR}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)

add_test(NAME test_print_packages
    COMMAND test_print_packages --root ${FAKEROOT_DIR}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)

add_test(NAME test_changeset
    COMMAND test_changeset --root ${FAKEROOT_DIR}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)

# These commented tests actually pass now - but I'll leave it like this for now..
#add_test(NAME test_progressfd
#    COMMAND test_progressfd --root ${FAKEROOT_DIR}
#    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
#)

#add_test(NAME test_async_api
#    COMMAND test_async_api --root ${FAKEROOT_DIR}
#    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
#)

#add_test(NAME test_async_api_upgrade
#    COMMAND test_async_api_upgrade --root ${FAKEROOT_DIR}
#    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
#)

add_test(NAME test_reposconfig
    COMMAND test_reposconfig --root ${FAKEROOT_DIR}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)

add_test(NAME clean_fakeroot
    COMMAND rm -rf ${FAKEROOT_DIR}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
# Run this test last, so it can clean up the test environment:
# mark clean_fakeroot as a cleanup task for a set of tests named "FR"
set_tests_properties(clean_fakeroot PROPERTIES FIXTURES_CLEANUP "FR")

# Mark all other tests as part of "FR" set, which will require
#   a setup task to be run first, and cleanup task to be run last
#   even in parallel execution mode of ctest
set_tests_properties(
    test_openclose
    test_db_update
    test_add
    test_del
    test_print_packages
    test_changeset
    test_reposconfig

    PROPERTIES
        FIXTURES_REQUIRED "FR"
        RESOURCE_LOCK "PackageDB"
)
