Warning, file /frameworks/kwindowsystem/autotests/kxmessages_unittest.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* This file is part of the KDE libraries 0002 0003 SPDX-FileCopyrightText: 2012 David Faure <faure@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.1-or-later 0006 */ 0007 0008 #include <QSignalSpy> 0009 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) 0010 #include <private/qtx11extras_p.h> 0011 #else 0012 #include <QX11Info> 0013 #endif 0014 0015 #include <kxmessages.h> 0016 #include <qtest_widgets.h> 0017 0018 class KXMessages_UnitTest : public QObject 0019 { 0020 Q_OBJECT 0021 public: 0022 enum BroadcastType { 0023 BroadcastMessageObject, 0024 #if KWINDOWSYSTEM_ENABLE_DEPRECATED_SINCE(5, 0) 0025 BroadcastStaticDisplay, 0026 #endif 0027 BroadcastStaticConnection, 0028 }; 0029 enum ReceiverType { 0030 ReceiverTypeDefault, 0031 ReceiverTypeConnection, 0032 }; 0033 KXMessages_UnitTest() 0034 : m_msgs() 0035 { 0036 } 0037 0038 private Q_SLOTS: 0039 void testStart_data(); 0040 void testStart(); 0041 0042 private: 0043 KXMessages m_msgs; 0044 }; 0045 0046 Q_DECLARE_METATYPE(KXMessages_UnitTest::BroadcastType) 0047 Q_DECLARE_METATYPE(KXMessages_UnitTest::ReceiverType) 0048 0049 void KXMessages_UnitTest::testStart_data() 0050 { 0051 QTest::addColumn<KXMessages_UnitTest::BroadcastType>("broadcastType"); 0052 QTest::addColumn<KXMessages_UnitTest::ReceiverType>("receiverType"); 0053 0054 QTest::newRow("object") << BroadcastMessageObject << ReceiverTypeDefault; 0055 #if KWINDOWSYSTEM_ENABLE_DEPRECATED_SINCE(5, 0) 0056 QTest::newRow("display") << BroadcastStaticDisplay << ReceiverTypeDefault; 0057 #endif 0058 QTest::newRow("connection") << BroadcastStaticConnection << ReceiverTypeDefault; 0059 QTest::newRow("object/xcb") << BroadcastMessageObject << ReceiverTypeConnection; 0060 #if KWINDOWSYSTEM_ENABLE_DEPRECATED_SINCE(5, 0) 0061 QTest::newRow("display/xcb") << BroadcastStaticDisplay << ReceiverTypeConnection; 0062 #endif 0063 QTest::newRow("connection/xcb") << BroadcastStaticConnection << ReceiverTypeConnection; 0064 } 0065 0066 void KXMessages_UnitTest::testStart() 0067 { 0068 QFETCH(KXMessages_UnitTest::BroadcastType, broadcastType); 0069 QFETCH(KXMessages_UnitTest::ReceiverType, receiverType); 0070 const QByteArray type = "kxmessage_unittest"; 0071 std::unique_ptr<KXMessages> receiver; 0072 switch (receiverType) { 0073 case KXMessages_UnitTest::ReceiverTypeDefault: 0074 receiver.reset(new KXMessages(type)); 0075 break; 0076 case KXMessages_UnitTest::ReceiverTypeConnection: 0077 receiver.reset(new KXMessages(QX11Info::connection(), QX11Info::appRootWindow(), type)); 0078 break; 0079 default: 0080 Q_UNREACHABLE(); 0081 break; 0082 } 0083 0084 // Check that all message sizes work, i.e. no bug when exactly 20 or 40 bytes, 0085 // despite the internal splitting. 0086 QString message; 0087 for (int i = 1; i < 50; ++i) { 0088 QSignalSpy spy(receiver.get(), &KXMessages::gotMessage); 0089 message += "a"; 0090 switch (broadcastType) { 0091 case KXMessages_UnitTest::BroadcastMessageObject: 0092 m_msgs.broadcastMessage(type, message); 0093 break; 0094 #if KWINDOWSYSTEM_ENABLE_DEPRECATED_SINCE(5, 0) 0095 case KXMessages_UnitTest::BroadcastStaticDisplay: 0096 QVERIFY(KXMessages::broadcastMessageX(QX11Info::display(), type.constData(), message)); 0097 break; 0098 #endif 0099 case KXMessages_UnitTest::BroadcastStaticConnection: 0100 QVERIFY(KXMessages::broadcastMessageX(QX11Info::connection(), type.constData(), message, QX11Info::appScreen())); 0101 break; 0102 } 0103 0104 QVERIFY(spy.wait()); 0105 QCOMPARE(spy.count(), 1); 0106 QCOMPARE(spy.at(0).at(0).toString(), message); 0107 } 0108 } 0109 0110 QTEST_MAIN(KXMessages_UnitTest) 0111 0112 #include "kxmessages_unittest.moc"