diff options
| author | Linus Jahn <lnj@kaidan.im> | 2021-07-05 23:37:52 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2021-07-06 00:37:03 +0200 |
| commit | 6b6fdfabb1ba8051f0a55e9e7bff123907253030 (patch) | |
| tree | 5429461c7e1a0b1190772b6e5e4dbe79756f349c /tests/TestClient.h | |
| parent | d3db0c7e5044dc4507c82ed8f371ca8c324ac639 (diff) | |
| download | qxmpp-6b6fdfabb1ba8051f0a55e9e7bff123907253030.tar.gz | |
tests: Add TestClient class for client testing with QFutures
Diffstat (limited to 'tests/TestClient.h')
| -rw-r--r-- | tests/TestClient.h | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/tests/TestClient.h b/tests/TestClient.h new file mode 100644 index 00000000..6dcec3de --- /dev/null +++ b/tests/TestClient.h @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2008-2021 The QXmpp developers + * + * Author: + * Linus Jahn + * + * Source: + * https://github.com/qxmpp-project/qxmpp + * + * This file is a part of QXmpp library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + */ + +#ifndef CLIENTTESTING_H +#define CLIENTTESTING_H + +#include "QXmppClient.h" +#include "QXmppClient_p.h" +#include "QXmppOutgoingClient.h" +#include "util.h" + +class TestClient : public QXmppClient +{ + Q_OBJECT +public: + TestClient(bool enableDebug = false) + : QXmppClient(), + debugEnabled(enableDebug) + { + // clear extensions + qDeleteAll(d->extensions); + d->extensions.clear(); + // enable stream management (so IQ requests are not stopped) + d->stream->enableStreamManagement(true); + // setup logging (for expect()) + logger()->setLoggingType(QXmppLogger::SignalLogging); + connect(logger(), &QXmppLogger::message, this, &TestClient::onLoggerMessage); + resetIdCount(); + } + + ~TestClient() override + { + } + + template<typename T, typename ...Args> + T *addNewExtension(Args... args) + { + auto *ext = new T(args...); + addExtension(ext); + return ext; + } + + void inject(const QByteArray &xml) + { + d->stream->handleIqResponse(xmlToDom(xml)); + QCoreApplication::processEvents(); + resetIdCount(); + } + + void expect(QString &&packet) + { + QVERIFY2(!m_sentPackets.empty(), "No packet was sent!"); + QCOMPARE(m_sentPackets.takeFirst(), packet.replace(u'\'', u'"')); + resetIdCount(); + } + void ignore() + { + m_sentPackets.takeFirst(); + resetIdCount(); + } + + void resetIdCount() + { + QXmppStanza::s_uniqeIdNo = 0; + } + +private: + void onLoggerMessage(QXmppLogger::MessageType type, const QString &text) + { + if (type != QXmppLogger::SentMessage || + text == QLatin1String("<r xmlns=\"urn:xmpp:sm:3\"/>")) { + return; + } + + if (debugEnabled) { + qDebug() << "LOG" << text; + } + + m_sentPackets << text; + } + + bool debugEnabled; + QList<QString> m_sentPackets; +}; + +#endif // CLIENTTESTING_H |
