find_package(Qt6 REQUIRED COMPONENTS Test Network DBus Widgets)
find_program(DBUS_RUN_SESSION dbus-run-session REQUIRED)

function(g19_test name)
    add_test(NAME ${name} COMMAND ${DBUS_RUN_SESSION} -- $<TARGET_FILE:${name}>)
    set_tests_properties(${name} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen;PULSE_SERVER=unix:/tmp/g19-test-no-pulse;DISPLAY=;WAYLAND_DISPLAY=" TIMEOUT 45)
endfunction()

add_executable(test_core test_core.cpp ../src/gscreen.cpp)
target_link_libraries(test_core PRIVATE Qt6::Test Qt6::Widgets Qt6::DBus Qt6::Network)
g19_test(test_core)

add_executable(test_audio test_audio.cpp ../src/plugins/musicviewer/visualizer.cpp)
target_link_libraries(test_audio PRIVATE Qt6::Test Qt6::Widgets ${PULSEAUDIO_LIBRARY})
target_link_options(test_audio PRIVATE -Wl,--wrap=pa_stream_peek -Wl,--wrap=pa_stream_drop)
g19_test(test_audio)

add_executable(test_device test_device.cpp ../src/g19device.cpp)
target_link_libraries(test_device PRIVATE Qt6::Test Qt6::Widgets ${LIBUSB_1_LIBRARIES})
foreach(symbol set_auto_detach_kernel_driver claim_interface submit_transfer cancel_transfer handle_events_timeout release_interface close)
    target_link_options(test_device PRIVATE -Wl,--wrap=libusb_${symbol})
endforeach()
g19_test(test_device)

add_executable(test_plugins test_plugins.cpp ../src/gscreen.cpp)
target_link_libraries(test_plugins PRIVATE Qt6::Test Qt6::Widgets Qt6::DBus Qt6::Network)
target_compile_definitions(test_plugins PRIVATE PLUGIN_BUILD_DIR="${CMAKE_BINARY_DIR}/src/plugins")
add_dependencies(test_plugins clock backlight keybacklight pavolume mpris hardwaremonitor sparklinegraph httpnotification processmonitor macroeditor musicviewer)
g19_test(test_plugins)

add_executable(test_macro test_macro.cpp)
target_link_libraries(test_macro PRIVATE macroeditor Qt6::Test Qt6::Widgets Qt6::DBus KF6::Wallet)
target_compile_definitions(test_macro PRIVATE HAVE_KF6WALLET)
find_package(X11)
if(X11_FOUND)
    target_compile_definitions(test_macro PRIVATE HAVE_X11)
    target_link_libraries(test_macro PRIVATE ${X11_LIBRARIES})
endif()
g19_test(test_macro)

add_executable(test_mpris test_mpris.cpp ../src/plugins/musicviewer/mpriscontroller.cpp ../src/plugins/mpris/mprisfetcher2.cpp)
target_link_libraries(test_mpris PRIVATE Qt6::Test Qt6::Widgets Qt6::DBus)
g19_test(test_mpris)

pkg_check_modules(LIBEIS REQUIRED IMPORTED_TARGET libeis-1.0>=1.4)
add_executable(test_wayland test_wayland.cpp ../src/waylandinput.cpp)
target_link_libraries(test_wayland PRIVATE Qt6::Test Qt6::DBus PkgConfig::LIBEI PkgConfig::LIBEIS PkgConfig::XKBCOMMON)
g19_test(test_wayland)
