Warning, file /frameworks/plasma-framework/autotests/dialogstatetest.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 SPDX-FileCopyrightText: 2016 Eike Hein <hein@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "dialogstatetest.h" 0008 #include <KWindowInfo> 0009 #include <KX11Extras> 0010 0011 #include <QSignalSpy> 0012 0013 void DialogStateTest::initTestCase() 0014 { 0015 m_dialog = new PlasmaQuick::Dialog; 0016 m_dialog->setLocation(Plasma::Types::TopEdge); 0017 m_dialog->setGeometry(0, 0, 50, 50); 0018 0019 qRegisterMetaType<WId>("WId"); 0020 } 0021 0022 void DialogStateTest::cleanupTestCase() 0023 { 0024 delete m_dialog; 0025 } 0026 0027 void DialogStateTest::windowState() 0028 { 0029 if (QGuiApplication::platformName() == "wayland") { 0030 QEXPECT_FAIL("windowState", "KX11Extras::windowAdded doesn't work on wayland", Continue); 0031 return; 0032 } 0033 0034 for (int i = 0; i <= 100; ++i) { 0035 m_dialog->show(); 0036 0037 QSignalSpy windowAddedSpy(KX11Extras::self(), &KX11Extras::windowAdded); 0038 QVERIFY(windowAddedSpy.isValid()); 0039 QVERIFY(windowAddedSpy.wait()); 0040 0041 bool windowAdded = false; 0042 0043 while (windowAddedSpy.count()) { 0044 const QVariantList &arguments = windowAddedSpy.takeFirst(); 0045 0046 if (arguments.at(0).value<WId>() == m_dialog->winId()) { 0047 windowAdded = true; 0048 break; 0049 } 0050 if (windowAddedSpy.isEmpty()) { 0051 QVERIFY(windowAddedSpy.wait()); 0052 } 0053 } 0054 0055 QVERIFY(windowAdded); 0056 0057 QVERIFY(verifyState(m_dialog)); 0058 0059 m_dialog->hide(); 0060 0061 QSignalSpy windowRemovedSpy(KX11Extras::self(), &KX11Extras::windowRemoved); 0062 QVERIFY(windowRemovedSpy.isValid()); 0063 QVERIFY(windowRemovedSpy.wait()); 0064 0065 bool windowRemoved = false; 0066 0067 while (windowRemovedSpy.count()) { 0068 const QVariantList &arguments = windowRemovedSpy.takeFirst(); 0069 0070 if (arguments.at(0).value<WId>() == m_dialog->winId()) { 0071 windowRemoved = true; 0072 break; 0073 } 0074 } 0075 0076 QVERIFY(windowRemoved); 0077 } 0078 } 0079 0080 bool DialogStateTest::verifyState(PlasmaQuick::Dialog *dialog) const 0081 { 0082 KWindowInfo info(dialog->winId(), NET::WMState); 0083 0084 if (!(info.state() & NET::SkipTaskbar)) { 0085 return false; 0086 } 0087 0088 if (!info.hasState(NET::SkipPager)) { 0089 return false; 0090 } 0091 0092 return true; 0093 } 0094 0095 QTEST_MAIN(DialogStateTest)