aboutsummaryrefslogtreecommitdiff
path: root/tests/TestClient.h
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2021-07-05 23:37:52 +0200
committerLinus Jahn <lnj@kaidan.im>2021-07-06 00:37:03 +0200
commit6b6fdfabb1ba8051f0a55e9e7bff123907253030 (patch)
tree5429461c7e1a0b1190772b6e5e4dbe79756f349c /tests/TestClient.h
parentd3db0c7e5044dc4507c82ed8f371ca8c324ac639 (diff)
downloadqxmpp-6b6fdfabb1ba8051f0a55e9e7bff123907253030.tar.gz
tests: Add TestClient class for client testing with QFutures
Diffstat (limited to 'tests/TestClient.h')
-rw-r--r--tests/TestClient.h106
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