macro(KEYBOARD_DAEMON_UNIT_TESTS _testname)
               add_executable(${_testname}_test ${_testname}_test.cpp ../${_testname}.cpp ../debug.cpp)
               ecm_mark_nongui_executable(${_testname}_test)
               ecm_mark_as_test(${_testname}_test)
               add_test(NAME kcm-keyboard-${_testname} COMMAND ${_testname}_test)
               target_link_libraries(${_testname}_test
                                     Qt::Concurrent
                                     Qt::Widgets
                                     Qt::Xml
                                     Qt::Test
                                     KF5::I18n
                                     KF5::WindowSystem
                                     X11::xkbfile
                                     X11::X11
               )
               if (QT_MAJOR_VERSION EQUAL "5")
                  target_link_libraries(${_testname}_test Qt5::X11Extras)
               else()
                  target_link_libraries(${_testname}_test Qt::GuiPrivate)
               endif()
endmacro(KEYBOARD_DAEMON_UNIT_TESTS)

keyboard_daemon_unit_tests(xkb_rules)
keyboard_daemon_unit_tests(iso_codes)

add_executable(flags_test flags_test.cpp)
ecm_mark_nongui_executable(flags_test)
ecm_mark_as_test(flags_test)
add_test(NAME kcm-keyboard-flags_test COMMAND flags_test)
target_link_libraries(flags_test
                      kcm_keyboard_static
                      Qt::Test
                      Qt::DBus
                      Qt::Widgets
                      KF5::GuiAddons
                      KF5::KCMUtils
                      KF5::I18n
                      KF5::Plasma
                      KF5::WindowSystem
                      XCB::XCB
                      XCB::XKB
                      X11::xkbfile
                      X11::X11
)

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config/base.1.1.xml ${CMAKE_CURRENT_BINARY_DIR}/config/base.1.1.xml COPYONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config/base.bad.xml ${CMAKE_CURRENT_BINARY_DIR}/config/base.bad.xml COPYONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config/base.xml ${CMAKE_CURRENT_BINARY_DIR}/config/base.xml COPYONLY)

if( X11_XTest_FOUND )
   add_executable(keyboard_daemon_test keyboard_daemon_test.cpp ../keyboard_daemon.cpp ../layout_memory.cpp ../layout_memory_persister.cpp ../flags.cpp ../udev_helper.cpp ../x11_helper.cpp ../xkb_helper.cpp ../xinput_helper.cpp ../keyboard_config.cpp ../xkb_rules.cpp ../keyboard_hardware.cpp ../bindings.cpp ../debug.cpp ../layoutnames.cpp)
   add_test(NAME kcm-keyboard-keyboard_daemon_test COMMAND keyboard_daemon_test)
   add_dependencies(keyboard_daemon_test kded_keyboard)
   ecm_mark_nongui_executable(keyboard_daemon_test)
   ecm_mark_as_test(keyboard_daemon_test)
   target_link_libraries(keyboard_daemon_test
                         kcm_keyboard_static
                         Qt::Concurrent
                         Qt::Xml
                         Qt::Test
                         KF5::ConfigCore
                         KF5::CoreAddons
                         KF5::KCMUtils
                         KF5::DBusAddons
                         KF5::GuiAddons
                         KF5::I18n
                         KF5::Notifications
                         KF5::Plasma
                         KF5::GlobalAccel
                         KF5::WindowSystem
                         KF5::XmlGui
                         XCB::XCB
                         XCB::XKB
                         X11::xkbfile
                         ${X11_XTest_LIB}
                         X11::X11
   )
   if (QT_MAJOR_VERSION EQUAL "5")
      target_link_libraries(keyboard_daemon_test Qt5::X11Extras)
   endif()

   if (HAVE_XINPUT)
      target_link_libraries(keyboard_daemon_test X11::Xi)
   endif()

   if (HAVE_UDEV)
      target_link_libraries(keyboard_daemon_test UDev::UDev)
   endif()
endif()
