14#include "KWayland/Client/compositor.h"
15#include "KWayland/Client/connection_thread.h"
16#include "KWayland/Client/event_queue.h"
17#include "KWayland/Client/plasmawindowmanagement.h"
18#include "KWayland/Client/region.h"
19#include "KWayland/Client/registry.h"
20#include "KWayland/Client/surface.h"
31 void testEnterLeaveActivity();
39 KWayland::Client::ConnectionThread *m_connection;
40 KWayland::Client::Compositor *m_compositor;
41 KWayland::Client::EventQueue *m_queue;
42 KWayland::Client::PlasmaWindowManagement *m_windowManagement;
43 KWayland::Client::PlasmaWindow *m_window;
48static const QString s_socketName = QStringLiteral(
"kwayland-test-wayland-activities-0");
53 , m_compositorInterface(nullptr)
54 , m_connection(nullptr)
55 , m_compositor(nullptr)
61void TestActivities::init()
71 m_connection =
new KWayland::Client::ConnectionThread;
72 QSignalSpy connectedSpy(m_connection, &KWayland::Client::ConnectionThread::connected);
73 m_connection->setSocketName(s_socketName);
75 m_thread =
new QThread(
this);
76 m_connection->moveToThread(m_thread);
79 m_connection->initConnection();
80 QVERIFY(connectedSpy.wait());
82 m_queue =
new KWayland::Client::EventQueue(
this);
83 QVERIFY(!m_queue->isValid());
84 m_queue->setup(m_connection);
85 QVERIFY(m_queue->isValid());
87 KWayland::Client::Registry registry;
88 QSignalSpy compositorSpy(®istry, &KWayland::Client::Registry::compositorAnnounced);
90 QSignalSpy windowManagementSpy(®istry, &KWayland::Client::Registry::plasmaWindowManagementAnnounced);
92 QVERIFY(!registry.eventQueue());
93 registry.setEventQueue(m_queue);
94 QCOMPARE(registry.eventQueue(), m_queue);
95 registry.create(m_connection->display());
96 QVERIFY(registry.isValid());
100 QVERIFY(compositorSpy.wait());
101 m_compositor = registry.createCompositor(compositorSpy.first().first().value<quint32>(), compositorSpy.first().last().value<quint32>(),
this);
105 QVERIFY(windowManagementSpy.wait());
107 registry.createPlasmaWindowManagement(windowManagementSpy.first().first().value<quint32>(), windowManagementSpy.first().last().value<quint32>(),
this);
109 QSignalSpy windowSpy(m_windowManagement, &KWayland::Client::PlasmaWindowManagement::windowCreated);
110 m_windowInterface = m_windowManagementInterface->
createWindow(
this, QUuid::createUuid());
111 m_windowInterface->
setPid(1337);
113 QVERIFY(windowSpy.wait());
114 m_window = windowSpy.first().first().value<KWayland::Client::PlasmaWindow *>();
117void TestActivities::cleanup()
119#define CLEANUP(variable) \
122 variable = nullptr; \
129 m_connection->deleteLater();
130 m_connection =
nullptr;
139 CLEANUP(m_windowManagementInterface)
144void TestActivities::testEnterLeaveActivity()
147 m_window->requestEnterActivity(QStringLiteral(
"0-1"));
148 enterRequestedSpy.wait();
150 QCOMPARE(enterRequestedSpy.takeFirst().at(0).toString(), QStringLiteral(
"0-1"));
152 QSignalSpy activityEnteredSpy(m_window, &KWayland::Client::PlasmaWindow::plasmaActivityEntered);
157 QCOMPARE(m_windowInterface->
plasmaActivities().first(), QStringLiteral(
"0-1"));
160 activityEnteredSpy.wait();
161 QCOMPARE(activityEnteredSpy.takeFirst().at(0).toString(), QStringLiteral(
"0-1"));
162 QCOMPARE(m_window->plasmaActivities().length(), 1);
163 QCOMPARE(m_window->plasmaActivities().first(), QStringLiteral(
"0-1"));
167 activityEnteredSpy.wait();
168 QCOMPARE(activityEnteredSpy.takeFirst().at(0).toString(), QStringLiteral(
"0-3"));
170 QCOMPARE(m_window->plasmaActivities().length(), 2);
171 QCOMPARE(m_window->plasmaActivities()[1], QStringLiteral(
"0-3"));
175 m_window->requestLeaveActivity(QStringLiteral(
"0-1"));
176 leaveRequestedSpy.wait();
178 QCOMPARE(leaveRequestedSpy.takeFirst().at(0).toString(), QStringLiteral(
"0-1"));
180 QSignalSpy activityLeftSpy(m_window, &KWayland::Client::PlasmaWindow::plasmaActivityLeft);
185 QCOMPARE(m_windowInterface->
plasmaActivities().first(), QStringLiteral(
"0-3"));
188 activityLeftSpy.wait();
189 QCOMPARE(activityLeftSpy.takeFirst().at(0).toString(), QStringLiteral(
"0-1"));
190 QCOMPARE(m_window->plasmaActivities().length(), 1);
191 QCOMPARE(m_window->plasmaActivities().first(), QStringLiteral(
"0-3"));
195#include "test_plasma_activities.moc"
Class holding the Wayland server display loop.
bool addSocketName(const QString &name=QString())
void leavePlasmaActivityRequested(const QString &activity)
QStringList plasmaActivities() const
void enterPlasmaActivityRequested(const QString &activity)
void removePlasmaActivity(const QString &id)
void addPlasmaActivity(const QString &id)
PlasmaWindowInterface * createWindow(QObject *parent, const QUuid &uuid)
TestActivities(QObject *parent=nullptr)
#define CLEANUP(variable)