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"