kwin/autotests/CMakeLists.txt

258 lines
7.5 KiB
CMake
Raw Normal View History

add_definitions(-DKWIN_UNIT_TEST)
remove_definitions(-DQT_USE_QSTRINGBUILDER)
2023-11-17 08:59:08 +00:00
add_subdirectory(effect)
add_subdirectory(integration)
add_subdirectory(libinput)
add_subdirectory(wayland)
# drm autotests are broken on FreeBSD for yet unknown reasons
# As the test isn't doing anything platform specific, only run it on Linux
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
add_subdirectory(drm)
endif()
########################################################
# Test WindowPaintData
########################################################
set(testWindowPaintData_SRCS test_window_paint_data.cpp)
add_executable(testWindowPaintData ${testWindowPaintData_SRCS})
target_link_libraries(testWindowPaintData kwin Qt::Widgets Qt::Test )
add_test(NAME kwin-testWindowPaintData COMMAND testWindowPaintData)
ecm_mark_as_test(testWindowPaintData)
########################################################
# Test VirtualDesktopManager
########################################################
set(testVirtualDesktops_SRCS
../src/virtualdesktops.cpp
test_virtual_desktops.cpp
)
add_executable(testVirtualDesktops ${testVirtualDesktops_SRCS})
target_link_libraries(testVirtualDesktops
kwin
Qt::Test
Qt::Widgets
2023-02-24 18:22:37 +00:00
KF6::ConfigCore
KF6::GlobalAccel
KF6::I18n
KF6::WindowSystem
)
add_test(NAME kwin-testVirtualDesktops COMMAND testVirtualDesktops)
ecm_mark_as_test(testVirtualDesktops)
Improved resolving whether a window is on local machine Most windows use the hostname in WM_CLIENT_MACHINE, but there are windows using the FQDN (for example libreoffice). So instead of "foo" it is "foo.local.net" or similar. The logic so far has been unable to properly determine whether windows with FQDN are on the local system. In order to solve this problem the handling is split out into an own class which stores the information of hostname and whether it is a local machine. This is to not query multiple times. To determine whether the Client is on the local system getaddrinfo is used for the own hostname and the FQDN provided in WM_CLIENT_MACHINE. If one of the queried names matches, we know that it is on the local machine. The old logic to compare the hostname is still used and getaddrinfo is only a fallback in case hostname does not match. The problem with getaddrinfo is, that it accesses the network and by that could block. To circumvent this problem the calls are moved into threads by using QtConcurrent::run. Obviously this brings disadvantages. When trying to resolve whether a Client is on the local machine and a FQDN is used, the information is initially wrong. The new ClientMachine class emits a signal when the information that the system is local becomes available, but for some things this is just too late: * window rules are already gathered * Session Management has already taken place In both cases this is an acceptable loss. For window rules it just needs a proper matching of the machine in case of localhost (remote hosts are not affected). And the case of session management is very academic as it is unlikely that a restoring session contains remote windows. BUG: 308391 FIXED-IN: 4.11 REVIEW: 108235
2013-01-07 07:07:27 +00:00
########################################################
# Test ClientMachine
########################################################
if(KWIN_BUILD_X11)
set(testClientMachine_SRCS
../src/client_machine.cpp
test_client_machine.cpp
xcb_scaling_mock.cpp
)
add_executable(testClientMachine ${testClientMachine_SRCS})
set_target_properties(testClientMachine PROPERTIES COMPILE_DEFINITIONS "NO_NONE_WINDOW")
target_link_libraries(testClientMachine
Qt::Concurrent
Qt::GuiPrivate
Qt::Test
Qt::Widgets
KF6::ConfigCore
KF6::WindowSystem
XCB::XCB
XCB::XFIXES
${X11_X11_LIB} # to make jenkins happy
)
add_test(NAME kwin-testClientMachine COMMAND testClientMachine)
ecm_mark_as_test(testClientMachine)
########################################################
# Test XcbWrapper
########################################################
add_executable(testXcbWrapper test_xcb_wrapper.cpp xcb_scaling_mock.cpp)
target_link_libraries(testXcbWrapper
Qt::GuiPrivate
Qt::Test
Qt::Widgets
KF6::ConfigCore
KF6::WindowSystem
XCB::XCB
)
add_test(NAME kwin-testXcbWrapper COMMAND testXcbWrapper)
ecm_mark_as_test(testXcbWrapper)
add_executable(testXcbSizeHints test_xcb_size_hints.cpp xcb_scaling_mock.cpp)
set_target_properties(testXcbSizeHints PROPERTIES COMPILE_DEFINITIONS "NO_NONE_WINDOW")
target_link_libraries(testXcbSizeHints
Qt::GuiPrivate
Qt::Test
Qt::Widgets
KF6::ConfigCore
KF6::WindowSystem
XCB::ICCCM
XCB::XCB
)
add_test(NAME kwin-testXcbSizeHints COMMAND testXcbSizeHints)
ecm_mark_as_test(testXcbSizeHints)
########################################################
# Test XcbWindow
########################################################
add_executable(testXcbWindow test_xcb_window.cpp xcb_scaling_mock.cpp)
target_link_libraries(testXcbWindow
Qt::GuiPrivate
Qt::Test
Qt::Widgets
KF6::ConfigCore
KF6::WindowSystem
XCB::XCB
)
add_test(NAME kwin-testXcbWindow COMMAND testXcbWindow)
ecm_mark_as_test(testXcbWindow)
########################################################
# Test X11 TimestampUpdate
########################################################
add_executable(testX11TimestampUpdate test_x11_timestamp_update.cpp)
target_link_libraries(testX11TimestampUpdate
KF6::CoreAddons
Qt::Test
Qt::GuiPrivate
kwin
)
add_test(NAME kwin-testX11TimestampUpdate COMMAND testX11TimestampUpdate)
ecm_mark_as_test(testX11TimestampUpdate)
endif()
Introduce a KWin internal on-screen-notification service Summary: Recently we noticed that there are multiple areas where KWin needs to inform the user about how to operate. Examples are: * Screenshot * ColorPicker * Pointer constraint enabled * Pointer constraint about to be removed * Kill Window For Screenshot and ColorPicker we used an EffectFrame to render it. But this is not an optimal solution as it's lacking many features we would need. We cannot properly use it from within KWin core, we cannot implement features like hide on mouse over, etc. etc. This change introduces an OnScreenNotification which supports: * showing an icon * showing a message * timeout It is Qml styled, so that it can be easily adjusted. This is a big improvement over the EffectFrame solution. The Qml file creates a Plasma Dialog of type OSD. Thus KWin places it like the normal OSD windows and also looks kind of similar. In the case of KWin the focus is more on the message, than an icon, so the icon is placed left of the text. While the OnScreenNotification is supposed to be used like a singleton, it doesn't use the KWin singleton pattern. Instead a small wrapper namespace OSD is introduced which provides a convenient API for KWin internal areas to show/hide the notification. By not using the KWin singleton pattern, the OnScreenNotification does not depend on any other parts of KWin and can be easily unit-tested. A few features are still missing and will be added in further commits: * hide-out on mouse over * optional skip close animation (needed for screenshot) * X11 support (not that important as it's mostly for Wayland features) Reviewers: #kwin, #plasma Subscribers: plasma-devel, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D3723
2016-12-18 10:53:50 +00:00
########################################################
# Test OnScreenNotification
########################################################
set(testOnScreenNotification_SRCS
../src/input_event_spy.cpp
../src/onscreennotification.cpp
onscreennotificationtest.cpp
Introduce a KWin internal on-screen-notification service Summary: Recently we noticed that there are multiple areas where KWin needs to inform the user about how to operate. Examples are: * Screenshot * ColorPicker * Pointer constraint enabled * Pointer constraint about to be removed * Kill Window For Screenshot and ColorPicker we used an EffectFrame to render it. But this is not an optimal solution as it's lacking many features we would need. We cannot properly use it from within KWin core, we cannot implement features like hide on mouse over, etc. etc. This change introduces an OnScreenNotification which supports: * showing an icon * showing a message * timeout It is Qml styled, so that it can be easily adjusted. This is a big improvement over the EffectFrame solution. The Qml file creates a Plasma Dialog of type OSD. Thus KWin places it like the normal OSD windows and also looks kind of similar. In the case of KWin the focus is more on the message, than an icon, so the icon is placed left of the text. While the OnScreenNotification is supposed to be used like a singleton, it doesn't use the KWin singleton pattern. Instead a small wrapper namespace OSD is introduced which provides a convenient API for KWin internal areas to show/hide the notification. By not using the KWin singleton pattern, the OnScreenNotification does not depend on any other parts of KWin and can be easily unit-tested. A few features are still missing and will be added in further commits: * hide-out on mouse over * optional skip close animation (needed for screenshot) * X11 support (not that important as it's mostly for Wayland features) Reviewers: #kwin, #plasma Subscribers: plasma-devel, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D3723
2016-12-18 10:53:50 +00:00
)
add_executable(testOnScreenNotification ${testOnScreenNotification_SRCS})
Introduce a KWin internal on-screen-notification service Summary: Recently we noticed that there are multiple areas where KWin needs to inform the user about how to operate. Examples are: * Screenshot * ColorPicker * Pointer constraint enabled * Pointer constraint about to be removed * Kill Window For Screenshot and ColorPicker we used an EffectFrame to render it. But this is not an optimal solution as it's lacking many features we would need. We cannot properly use it from within KWin core, we cannot implement features like hide on mouse over, etc. etc. This change introduces an OnScreenNotification which supports: * showing an icon * showing a message * timeout It is Qml styled, so that it can be easily adjusted. This is a big improvement over the EffectFrame solution. The Qml file creates a Plasma Dialog of type OSD. Thus KWin places it like the normal OSD windows and also looks kind of similar. In the case of KWin the focus is more on the message, than an icon, so the icon is placed left of the text. While the OnScreenNotification is supposed to be used like a singleton, it doesn't use the KWin singleton pattern. Instead a small wrapper namespace OSD is introduced which provides a convenient API for KWin internal areas to show/hide the notification. By not using the KWin singleton pattern, the OnScreenNotification does not depend on any other parts of KWin and can be easily unit-tested. A few features are still missing and will be added in further commits: * hide-out on mouse over * optional skip close animation (needed for screenshot) * X11 support (not that important as it's mostly for Wayland features) Reviewers: #kwin, #plasma Subscribers: plasma-devel, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D3723
2016-12-18 10:53:50 +00:00
target_link_libraries(testOnScreenNotification
Qt::DBus
Qt::Quick
Qt::Test
Qt::Widgets # QAction include
2023-02-24 18:22:37 +00:00
KF6::ConfigCore
Introduce a KWin internal on-screen-notification service Summary: Recently we noticed that there are multiple areas where KWin needs to inform the user about how to operate. Examples are: * Screenshot * ColorPicker * Pointer constraint enabled * Pointer constraint about to be removed * Kill Window For Screenshot and ColorPicker we used an EffectFrame to render it. But this is not an optimal solution as it's lacking many features we would need. We cannot properly use it from within KWin core, we cannot implement features like hide on mouse over, etc. etc. This change introduces an OnScreenNotification which supports: * showing an icon * showing a message * timeout It is Qml styled, so that it can be easily adjusted. This is a big improvement over the EffectFrame solution. The Qml file creates a Plasma Dialog of type OSD. Thus KWin places it like the normal OSD windows and also looks kind of similar. In the case of KWin the focus is more on the message, than an icon, so the icon is placed left of the text. While the OnScreenNotification is supposed to be used like a singleton, it doesn't use the KWin singleton pattern. Instead a small wrapper namespace OSD is introduced which provides a convenient API for KWin internal areas to show/hide the notification. By not using the KWin singleton pattern, the OnScreenNotification does not depend on any other parts of KWin and can be easily unit-tested. A few features are still missing and will be added in further commits: * hide-out on mouse over * optional skip close animation (needed for screenshot) * X11 support (not that important as it's mostly for Wayland features) Reviewers: #kwin, #plasma Subscribers: plasma-devel, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D3723
2016-12-18 10:53:50 +00:00
)
add_test(NAME kwin-testOnScreenNotification COMMAND testOnScreenNotification)
Introduce a KWin internal on-screen-notification service Summary: Recently we noticed that there are multiple areas where KWin needs to inform the user about how to operate. Examples are: * Screenshot * ColorPicker * Pointer constraint enabled * Pointer constraint about to be removed * Kill Window For Screenshot and ColorPicker we used an EffectFrame to render it. But this is not an optimal solution as it's lacking many features we would need. We cannot properly use it from within KWin core, we cannot implement features like hide on mouse over, etc. etc. This change introduces an OnScreenNotification which supports: * showing an icon * showing a message * timeout It is Qml styled, so that it can be easily adjusted. This is a big improvement over the EffectFrame solution. The Qml file creates a Plasma Dialog of type OSD. Thus KWin places it like the normal OSD windows and also looks kind of similar. In the case of KWin the focus is more on the message, than an icon, so the icon is placed left of the text. While the OnScreenNotification is supposed to be used like a singleton, it doesn't use the KWin singleton pattern. Instead a small wrapper namespace OSD is introduced which provides a convenient API for KWin internal areas to show/hide the notification. By not using the KWin singleton pattern, the OnScreenNotification does not depend on any other parts of KWin and can be easily unit-tested. A few features are still missing and will be added in further commits: * hide-out on mouse over * optional skip close animation (needed for screenshot) * X11 support (not that important as it's mostly for Wayland features) Reviewers: #kwin, #plasma Subscribers: plasma-devel, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D3723
2016-12-18 10:53:50 +00:00
ecm_mark_as_test(testOnScreenNotification)
Add support for global touchpad swipe gestures Summary: This change adds global touchpad swipe gestures to the GlobalShortcutsManager and hooks up the swipe gestures as defined at the Plasma Affenfels sprint: * swipe up: Desktop Grid * swipe down: Present Windows * swipe left: previous virtual desktop * swipe right: next virtual desktop The main work is handled by two new classes: SwipeGesture and GestureRecognizer. This is implemented in a way that it can be extended to also recognize touch screen gestures and pinch gestures. The SwipeGesture defines what is required for the gesture to trigger. Currently this includes the minimum and maximum number of fingers participating in the gesture and the direction. The gesture gets registered in the GestureRecognizer. The events for the gesture are fed into the GestureRecognizer. It evaluates which gestures could trigger and tracks them for every update of the gesture. In the process of the gesture tracking the GestureRecognizer emits signals on the Gesture: * started: when the Gesture gets considered for a sequence * cancelled: the Gesture no longer matches the sequence * triggered: the sequence ended and the Gesture still matches The remaining changes are related to hook up the existing shortcut framework with the new touchpad gestures. The GlobalShortcutManager gained support for it, InputRedirection and EffectsHandler offer methods to register a QAction. VirtualDesktopManager, PresentWindows and DesktopGrid are adjusted to support the gesture. Reviewers: #kwin, #plasma_on_wayland Subscribers: plasma-devel Tags: #plasma_on_wayland Differential Revision: https://phabricator.kde.org/D5097
2017-03-18 10:00:30 +00:00
########################################################
# Test Gestures
########################################################
set(testGestures_SRCS
../src/gestures.cpp
test_gestures.cpp
Add support for global touchpad swipe gestures Summary: This change adds global touchpad swipe gestures to the GlobalShortcutsManager and hooks up the swipe gestures as defined at the Plasma Affenfels sprint: * swipe up: Desktop Grid * swipe down: Present Windows * swipe left: previous virtual desktop * swipe right: next virtual desktop The main work is handled by two new classes: SwipeGesture and GestureRecognizer. This is implemented in a way that it can be extended to also recognize touch screen gestures and pinch gestures. The SwipeGesture defines what is required for the gesture to trigger. Currently this includes the minimum and maximum number of fingers participating in the gesture and the direction. The gesture gets registered in the GestureRecognizer. The events for the gesture are fed into the GestureRecognizer. It evaluates which gestures could trigger and tracks them for every update of the gesture. In the process of the gesture tracking the GestureRecognizer emits signals on the Gesture: * started: when the Gesture gets considered for a sequence * cancelled: the Gesture no longer matches the sequence * triggered: the sequence ended and the Gesture still matches The remaining changes are related to hook up the existing shortcut framework with the new touchpad gestures. The GlobalShortcutManager gained support for it, InputRedirection and EffectsHandler offer methods to register a QAction. VirtualDesktopManager, PresentWindows and DesktopGrid are adjusted to support the gesture. Reviewers: #kwin, #plasma_on_wayland Subscribers: plasma-devel Tags: #plasma_on_wayland Differential Revision: https://phabricator.kde.org/D5097
2017-03-18 10:00:30 +00:00
)
add_executable(testGestures ${testGestures_SRCS})
Add support for global touchpad swipe gestures Summary: This change adds global touchpad swipe gestures to the GlobalShortcutsManager and hooks up the swipe gestures as defined at the Plasma Affenfels sprint: * swipe up: Desktop Grid * swipe down: Present Windows * swipe left: previous virtual desktop * swipe right: next virtual desktop The main work is handled by two new classes: SwipeGesture and GestureRecognizer. This is implemented in a way that it can be extended to also recognize touch screen gestures and pinch gestures. The SwipeGesture defines what is required for the gesture to trigger. Currently this includes the minimum and maximum number of fingers participating in the gesture and the direction. The gesture gets registered in the GestureRecognizer. The events for the gesture are fed into the GestureRecognizer. It evaluates which gestures could trigger and tracks them for every update of the gesture. In the process of the gesture tracking the GestureRecognizer emits signals on the Gesture: * started: when the Gesture gets considered for a sequence * cancelled: the Gesture no longer matches the sequence * triggered: the sequence ended and the Gesture still matches The remaining changes are related to hook up the existing shortcut framework with the new touchpad gestures. The GlobalShortcutManager gained support for it, InputRedirection and EffectsHandler offer methods to register a QAction. VirtualDesktopManager, PresentWindows and DesktopGrid are adjusted to support the gesture. Reviewers: #kwin, #plasma_on_wayland Subscribers: plasma-devel Tags: #plasma_on_wayland Differential Revision: https://phabricator.kde.org/D5097
2017-03-18 10:00:30 +00:00
target_link_libraries(testGestures
Qt::Test
Qt::Widgets
Add support for global touchpad swipe gestures Summary: This change adds global touchpad swipe gestures to the GlobalShortcutsManager and hooks up the swipe gestures as defined at the Plasma Affenfels sprint: * swipe up: Desktop Grid * swipe down: Present Windows * swipe left: previous virtual desktop * swipe right: next virtual desktop The main work is handled by two new classes: SwipeGesture and GestureRecognizer. This is implemented in a way that it can be extended to also recognize touch screen gestures and pinch gestures. The SwipeGesture defines what is required for the gesture to trigger. Currently this includes the minimum and maximum number of fingers participating in the gesture and the direction. The gesture gets registered in the GestureRecognizer. The events for the gesture are fed into the GestureRecognizer. It evaluates which gestures could trigger and tracks them for every update of the gesture. In the process of the gesture tracking the GestureRecognizer emits signals on the Gesture: * started: when the Gesture gets considered for a sequence * cancelled: the Gesture no longer matches the sequence * triggered: the sequence ended and the Gesture still matches The remaining changes are related to hook up the existing shortcut framework with the new touchpad gestures. The GlobalShortcutManager gained support for it, InputRedirection and EffectsHandler offer methods to register a QAction. VirtualDesktopManager, PresentWindows and DesktopGrid are adjusted to support the gesture. Reviewers: #kwin, #plasma_on_wayland Subscribers: plasma-devel Tags: #plasma_on_wayland Differential Revision: https://phabricator.kde.org/D5097
2017-03-18 10:00:30 +00:00
)
add_test(NAME kwin-testGestures COMMAND testGestures)
Add support for global touchpad swipe gestures Summary: This change adds global touchpad swipe gestures to the GlobalShortcutsManager and hooks up the swipe gestures as defined at the Plasma Affenfels sprint: * swipe up: Desktop Grid * swipe down: Present Windows * swipe left: previous virtual desktop * swipe right: next virtual desktop The main work is handled by two new classes: SwipeGesture and GestureRecognizer. This is implemented in a way that it can be extended to also recognize touch screen gestures and pinch gestures. The SwipeGesture defines what is required for the gesture to trigger. Currently this includes the minimum and maximum number of fingers participating in the gesture and the direction. The gesture gets registered in the GestureRecognizer. The events for the gesture are fed into the GestureRecognizer. It evaluates which gestures could trigger and tracks them for every update of the gesture. In the process of the gesture tracking the GestureRecognizer emits signals on the Gesture: * started: when the Gesture gets considered for a sequence * cancelled: the Gesture no longer matches the sequence * triggered: the sequence ended and the Gesture still matches The remaining changes are related to hook up the existing shortcut framework with the new touchpad gestures. The GlobalShortcutManager gained support for it, InputRedirection and EffectsHandler offer methods to register a QAction. VirtualDesktopManager, PresentWindows and DesktopGrid are adjusted to support the gesture. Reviewers: #kwin, #plasma_on_wayland Subscribers: plasma-devel Tags: #plasma_on_wayland Differential Revision: https://phabricator.kde.org/D5097
2017-03-18 10:00:30 +00:00
ecm_mark_as_test(testGestures)
2017-05-05 17:16:38 +00:00
set(testOpenGLContextAttributeBuilder_SRCS
../src/opengl/abstract_opengl_context_attribute_builder.cpp
../src/opengl/egl_context_attribute_builder.cpp
opengl_context_attribute_builder_test.cpp
)
if (HAVE_GLX)
set(testOpenGLContextAttributeBuilder_SRCS ${testOpenGLContextAttributeBuilder_SRCS} ../src/backends/x11/standalone/x11_standalone_glx_context_attribute_builder.cpp)
endif()
add_executable(testOpenGLContextAttributeBuilder ${testOpenGLContextAttributeBuilder_SRCS})
target_link_libraries(testOpenGLContextAttributeBuilder epoxy::epoxy Qt::Test)
add_test(NAME kwin-testOpenGLContextAttributeBuilder COMMAND testOpenGLContextAttributeBuilder)
ecm_mark_as_test(testOpenGLContextAttributeBuilder)
set(testXkb_SRCS
../src/xkb.cpp
test_xkb.cpp
)
qt_add_dbus_interface(testXkb_SRCS ${CMAKE_SOURCE_DIR}/src/org.freedesktop.DBus.Properties.xml dbusproperties_interface)
add_executable(testXkb ${testXkb_SRCS})
target_link_libraries(testXkb
kwin
Qt::Gui
2023-02-25 20:21:59 +00:00
Qt::GuiPrivate
Qt::Test
Qt::Widgets
2023-02-24 18:22:37 +00:00
KF6::ConfigCore
KF6::WindowSystem
XKB::XKB
)
add_test(NAME kwin-testXkb COMMAND testXkb)
ecm_mark_as_test(testXkb)
########################################################
# Test FTrace
########################################################
add_executable(testFtrace test_ftrace.cpp)
target_link_libraries(testFtrace
Qt::Test
kwin
)
add_test(NAME kwin-testFtrace COMMAND testFtrace)
ecm_mark_as_test(testFtrace)
########################################################
# Test KWin Utils
########################################################
add_executable(testUtils test_utils.cpp)
target_link_libraries(testUtils
Qt::Test
kwin
)
add_test(NAME kwin-testUtils COMMAND testUtils)
ecm_mark_as_test(testUtils)
2023-12-14 20:37:34 +00:00
########################################################
# Test OutputTransform
########################################################
add_executable(testOutputTransform output_transform_test.cpp)
target_link_libraries(testOutputTransform
Qt::Test
kwin
)
add_test(NAME kwin-testOutputTransform COMMAND testOutputTransform)
ecm_mark_as_test(testOutputTransform)
########################################################
# Test Colorspace
########################################################
add_executable(testColorspaces test_colorspaces.cpp)
target_link_libraries(testColorspaces
Qt::Test
kwin
)
add_test(NAME kwin-testColorspaces COMMAND testColorspaces)
ecm_mark_as_test(testColorspaces)