plasma-framework/autotests/dialogstatetest.cpp

94 lines
2.2 KiB
C++

/*
SPDX-FileCopyrightText: 2016 Eike Hein <hein@kde.org>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include "dialogstatetest.h"
#include <KWindowSystem>
#include <QSignalSpy>
void DialogStateTest::initTestCase()
{
m_dialog = new PlasmaQuick::Dialog;
m_dialog->setLocation(Plasma::Types::TopEdge);
m_dialog->setGeometry(0, 0, 50, 50);
qRegisterMetaType<WId>("WId");
}
void DialogStateTest::cleanupTestCase()
{
delete m_dialog;
}
void DialogStateTest::windowState()
{
if (QGuiApplication::platformName() == "wayland") {
QEXPECT_FAIL("windowState", "KWindowSystem::windowAdded doesn't work on wayland", Continue);
return;
}
for (int i = 0; i <= 100; ++i) {
m_dialog->show();
QSignalSpy windowAddedSpy(KWindowSystem::self(), &KWindowSystem::windowAdded);
QVERIFY(windowAddedSpy.isValid());
QVERIFY(windowAddedSpy.wait());
bool windowAdded = false;
while (windowAddedSpy.count()) {
const QVariantList &arguments = windowAddedSpy.takeFirst();
if (arguments.at(0).value<WId>() == m_dialog->winId()) {
windowAdded = true;
break;
}
if (windowAddedSpy.isEmpty()) {
QVERIFY(windowAddedSpy.wait());
}
}
QVERIFY(windowAdded);
QVERIFY(verifyState(m_dialog));
m_dialog->hide();
QSignalSpy windowRemovedSpy(KWindowSystem::self(), &KWindowSystem::windowRemoved);
QVERIFY(windowRemovedSpy.isValid());
QVERIFY(windowRemovedSpy.wait());
bool windowRemoved = false;
while (windowRemovedSpy.count()) {
const QVariantList &arguments = windowRemovedSpy.takeFirst();
if (arguments.at(0).value<WId>() == m_dialog->winId()) {
windowRemoved = true;
break;
}
}
QVERIFY(windowRemoved);
}
}
bool DialogStateTest::verifyState(PlasmaQuick::Dialog *dialog) const
{
KWindowInfo info(dialog->winId(), NET::WMState);
if (!(info.state() & NET::SkipTaskbar)) {
return false;
}
if (!info.hasState(NET::SkipPager)) {
return false;
}
return true;
}
QTEST_MAIN(DialogStateTest)