set(CMAKE_AUTOMOC on)
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core Gui Widgets Quick DBus Test REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Gui Widgets Quick DBus Test REQUIRED)

include_directories(../)
include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/imitates)

add_executable(securityFunctionControlTest
    imitates/function-control/function-control.cpp
    ../plugin/security-function-control.cpp
    securityFunctionControlTest.cpp)

target_include_directories(securityFunctionControlTest
    PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/imitates/function-control
)

target_link_libraries(securityFunctionControlTest
    PRIVATE
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Test
)

add_test(NAME securityFunctionControlTest COMMAND ${CMAKE_CURRENT_BINARY_DIR}/securityFunctionControlTest)

add_executable(itemsFilterModelTest
    imitates/status-notifier-host.cpp
    imitates/status-notifier-item.cpp
    itemsFilterModelTest.cpp)
target_compile_definitions(itemsFilterModelTest PRIVATE UKUI_SNI_TEST_NO_DBUS)
target_include_directories(itemsFilterModelTest BEFORE PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/imitates)
target_link_libraries(itemsFilterModelTest
    PRIVATE
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Gui
    Qt${QT_VERSION_MAJOR}::Widgets
    Qt${QT_VERSION_MAJOR}::Quick
    Qt${QT_VERSION_MAJOR}::DBus
    Qt${QT_VERSION_MAJOR}::Test
    ukui-system-tray
)
add_test(NAME itemsFilterModelTest
    COMMAND ${CMAKE_COMMAND} -E env QT_QPA_PLATFORM=offscreen $<TARGET_FILE:itemsFilterModelTest>)

add_executable(itemGroupModelTest
    imitates/status-notifier-host.cpp
    imitates/status-notifier-item.cpp
    itemGroupModelTest.cpp)
target_compile_definitions(itemGroupModelTest PRIVATE UKUI_SNI_TEST_NO_DBUS)
target_include_directories(itemGroupModelTest BEFORE PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/imitates)
target_link_libraries(itemGroupModelTest
    PRIVATE
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Gui
    Qt${QT_VERSION_MAJOR}::Widgets
    Qt${QT_VERSION_MAJOR}::Quick
    Qt${QT_VERSION_MAJOR}::DBus
    Qt${QT_VERSION_MAJOR}::Test
    ukui-system-tray
)
add_test(NAME itemGroupModelTest
    COMMAND ${CMAKE_COMMAND} -E env QT_QPA_PLATFORM=offscreen $<TARGET_FILE:itemGroupModelTest>)

add_executable(systemTrayPluginTest
    systemTrayPluginTest.cpp)
target_link_libraries(systemTrayPluginTest
    PRIVATE
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Quick
    Qt${QT_VERSION_MAJOR}::Test
    ukui-system-tray
)
add_test(NAME systemTrayPluginTest
    COMMAND ${CMAKE_COMMAND} -E env QT_QPA_PLATFORM=offscreen $<TARGET_FILE:systemTrayPluginTest>)

add_executable(trayItemTest
    trayItemTest.cpp)
target_link_libraries(trayItemTest
    PRIVATE
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Gui
    Qt${QT_VERSION_MAJOR}::Widgets
    Qt${QT_VERSION_MAJOR}::Quick
    Qt${QT_VERSION_MAJOR}::DBus
    Qt${QT_VERSION_MAJOR}::Test
    ukui-system-tray
)
add_test(NAME trayItemTest
    COMMAND ${CMAKE_COMMAND} -E env QT_QPA_PLATFORM=offscreen $<TARGET_FILE:trayItemTest>)

add_executable(trayItemWhiteboxTest
    imitates/status-notifier-host.cpp
    imitates/status-notifier-item.cpp
    ../plugin/tray-item.cpp
    trayItemTest.cpp)
target_compile_definitions(trayItemWhiteboxTest PRIVATE UKUI_SNI_TEST_NO_DBUS)
target_include_directories(trayItemWhiteboxTest BEFORE PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/imitates)
target_link_libraries(trayItemWhiteboxTest
    PRIVATE
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Gui
    Qt${QT_VERSION_MAJOR}::Widgets
    Qt${QT_VERSION_MAJOR}::Quick
    Qt${QT_VERSION_MAJOR}::DBus
    Qt${QT_VERSION_MAJOR}::Test
)
add_test(NAME trayItemWhiteboxTest
    COMMAND ${CMAKE_COMMAND} -E env QT_QPA_PLATFORM=offscreen $<TARGET_FILE:trayItemWhiteboxTest>)

add_executable(trayItemsModelTest
    trayItemsModelTest.cpp)
target_link_libraries(trayItemsModelTest
    PRIVATE
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Gui
    Qt${QT_VERSION_MAJOR}::Widgets
    Qt${QT_VERSION_MAJOR}::Quick
    Qt${QT_VERSION_MAJOR}::DBus
    Qt${QT_VERSION_MAJOR}::Test
    ukui-sni-host
    ukui-quick::framework
    ukui-system-tray
)
add_test(NAME trayItemsModelTest
    COMMAND ${CMAKE_COMMAND} -E env QT_QPA_PLATFORM=offscreen $<TARGET_FILE:trayItemsModelTest>)

add_executable(controlPanelModelTest
    controlPanelModelTest.cpp)
target_link_libraries(controlPanelModelTest
    PRIVATE
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Gui
    Qt${QT_VERSION_MAJOR}::Widgets
    Qt${QT_VERSION_MAJOR}::Quick
    Qt${QT_VERSION_MAJOR}::DBus
    Qt${QT_VERSION_MAJOR}::Test
    ukui-quick::framework
    ukui-system-tray
)
add_test(NAME controlPanelModelTest
    COMMAND ${CMAKE_COMMAND} -E env QT_QPA_PLATFORM=offscreen $<TARGET_FILE:controlPanelModelTest>)

add_executable(trayFocusTest
    tray-focus-test.cpp
    imitates/status-notifier-item.cpp)
target_include_directories(trayFocusTest BEFORE PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/imitates)
target_compile_definitions(trayFocusTest PRIVATE TRAY_QML_DIR="${CMAKE_CURRENT_SOURCE_DIR}/../widget/ui")
target_link_libraries(trayFocusTest PRIVATE ukui-system-tray ukui-quick::core ukui-quick::framework
    Qt${QT_VERSION_MAJOR}::Quick Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Test)
add_test(NAME trayFocusTest COMMAND $<TARGET_FILE:trayFocusTest>)
set_tests_properties(trayFocusTest PROPERTIES TIMEOUT 45
    ENVIRONMENT "QT_QPA_PLATFORM=offscreen;QT_QUICK_BACKEND=software;QT_QPA_PLATFORMTHEME=generic;GSETTINGS_BACKEND=memory")

# QML 加载检查使用本次构建的插件，避免误加载系统已安装的版本。
file(RELATIVE_PATH TRAY_PLUGIN_RELATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}/imports/org/ukui/systemTray" "${CMAKE_CURRENT_BINARY_DIR}/..")
file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/imports/org/ukui/systemTray/qmldir"
    CONTENT "module org.ukui.systemTray\nplugin ukui-system-tray ${TRAY_PLUGIN_RELATIVE_PATH}\n")
target_compile_definitions(trayFocusTest PRIVATE TRAY_TEST_IMPORTS="${CMAKE_CURRENT_BINARY_DIR}/imports")

add_executable(trayMenuTest
    tray-menu-test.cpp
    imitates/status-notifier-item.cpp)
target_include_directories(trayMenuTest BEFORE PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/imitates)
target_compile_definitions(trayMenuTest PRIVATE
    TRAY_QML_DIR="${CMAKE_CURRENT_SOURCE_DIR}/../widget/ui"
    TRAY_TEST_IMPORTS="${CMAKE_CURRENT_BINARY_DIR}/imports")
target_link_libraries(trayMenuTest PRIVATE ukui-system-tray ukui-quick::core ukui-quick::framework
    Qt${QT_VERSION_MAJOR}::Quick Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Test)
add_test(NAME trayMenuTest COMMAND $<TARGET_FILE:trayMenuTest>)
set_tests_properties(trayMenuTest PROPERTIES TIMEOUT 45
    ENVIRONMENT "QT_QPA_PLATFORM=offscreen;QT_QUICK_BACKEND=software;QT_QPA_PLATFORMTHEME=generic;GSETTINGS_BACKEND=memory")
