File indexing completed on 2024-04-21 03:59:18
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 #include <private/qtx11extras_p.h> 0010 0011 #include <kxmessages.h> 0012 #include <qtest_widgets.h> 0013 0014 class KXMessages_UnitTest : public QObject 0015 { 0016 Q_OBJECT 0017 public: 0018 enum BroadcastType { 0019 BroadcastMessageObject, 0020 BroadcastStaticConnection, 0021 }; 0022 enum ReceiverType { 0023 ReceiverTypeDefault, 0024 ReceiverTypeConnection, 0025 }; 0026 KXMessages_UnitTest() 0027 : m_msgs() 0028 { 0029 } 0030 0031 private Q_SLOTS: 0032 void testStart_data(); 0033 void testStart(); 0034 0035 private: 0036 KXMessages m_msgs; 0037 }; 0038 0039 Q_DECLARE_METATYPE(KXMessages_UnitTest::BroadcastType) 0040 Q_DECLARE_METATYPE(KXMessages_UnitTest::ReceiverType) 0041 0042 void KXMessages_UnitTest::testStart_data() 0043 { 0044 QTest::addColumn<KXMessages_UnitTest::BroadcastType>("broadcastType"); 0045 QTest::addColumn<KXMessages_UnitTest::ReceiverType>("receiverType"); 0046 0047 QTest::newRow("object") << BroadcastMessageObject << ReceiverTypeDefault; 0048 QTest::newRow("connection") << BroadcastStaticConnection << ReceiverTypeDefault; 0049 QTest::newRow("object/xcb") << BroadcastMessageObject << ReceiverTypeConnection; 0050 QTest::newRow("connection/xcb") << BroadcastStaticConnection << ReceiverTypeConnection; 0051 } 0052 0053 void KXMessages_UnitTest::testStart() 0054 { 0055 QFETCH(KXMessages_UnitTest::BroadcastType, broadcastType); 0056 QFETCH(KXMessages_UnitTest::ReceiverType, receiverType); 0057 const QByteArray type = "kxmessage_unittest"; 0058 std::unique_ptr<KXMessages> receiver; 0059 switch (receiverType) { 0060 case KXMessages_UnitTest::ReceiverTypeDefault: 0061 receiver.reset(new KXMessages(type)); 0062 break; 0063 case KXMessages_UnitTest::ReceiverTypeConnection: 0064 receiver.reset(new KXMessages(QX11Info::connection(), QX11Info::appRootWindow(), type)); 0065 break; 0066 default: 0067 Q_UNREACHABLE(); 0068 break; 0069 } 0070 0071 // Check that all message sizes work, i.e. no bug when exactly 20 or 40 bytes, 0072 // despite the internal splitting. 0073 QString message; 0074 for (int i = 1; i < 50; ++i) { 0075 QSignalSpy spy(receiver.get(), &KXMessages::gotMessage); 0076 message += "a"; 0077 switch (broadcastType) { 0078 case KXMessages_UnitTest::BroadcastMessageObject: 0079 m_msgs.broadcastMessage(type, message); 0080 break; 0081 case KXMessages_UnitTest::BroadcastStaticConnection: 0082 QVERIFY(KXMessages::broadcastMessageX(QX11Info::connection(), type.constData(), message, QX11Info::appScreen())); 0083 break; 0084 } 0085 0086 QVERIFY(spy.wait()); 0087 QCOMPARE(spy.count(), 1); 0088 QCOMPARE(spy.at(0).at(0).toString(), message); 0089 } 0090 } 0091 0092 QTEST_MAIN(KXMessages_UnitTest) 0093 0094 #include "kxmessages_unittest.moc"