// SPDX-FileCopyrightText: 2012 Jeremy Lainé // SPDX-FileCopyrightText: 2012 Manjeet Dahiya // SPDX-FileCopyrightText: 2020 Linus Jahn // // SPDX-License-Identifier: LGPL-2.1-or-later #ifndef TESTS_UTIL_H #define TESTS_UTIL_H #include "QXmppPasswordChecker.h" #include #include #include // QVERIFY2 with empty return value (return {};) #define QVERIFY_RV(statement, description) \ if (!QTest::qVerify(statement, #statement, description, __FILE__, __LINE__)) \ return {}; template inline QDomElement xmlToDom(const String &xml) { QDomDocument doc; QVERIFY_RV(doc.setContent(xml, true), "XML is not valid"); return doc.documentElement(); } template static QByteArray packetToXml(const T &packet) { QBuffer buffer; buffer.open(QIODevice::ReadWrite); QXmlStreamWriter writer(&buffer); packet.toXml(&writer); auto data = buffer.data(); data.replace(u'\'', "'"); return data; } template static void parsePacket(T &packet, const QByteArray &xml) { // qDebug() << "parsing" << xml; packet.parse(xmlToDom(xml)); } template static void serializePacket(T &packet, const QByteArray &xml) { auto processedXml = xml; processedXml.replace(u'\'', u'"'); const auto data = packetToXml(packet); qDebug() << "expect " << processedXml; qDebug() << "writing" << data; QCOMPARE(data, processedXml); } template QDomElement writePacketToDom(T packet) { QBuffer buffer; buffer.open(QIODevice::ReadWrite); QXmlStreamWriter writer(&buffer); packet.toXml(&writer); QDomDocument doc; doc.setContent(buffer.data(), true); return doc.documentElement(); } template T expectFutureVariant(const QFuture &future) { #define return \ return { } QVERIFY(future.isFinished()); QVERIFY2(std::holds_alternative(future.result()), "Variant contains wrong type!"); #undef return return std::get(future.result()); } class TestPasswordChecker : public QXmppPasswordChecker { public: void addCredentials(const QString &user, const QString &password) { m_credentials.insert(user, password); }; /// Retrieves the password for the given username. QXmppPasswordReply::Error getPassword(const QXmppPasswordRequest &request, QString &password) override { if (m_credentials.contains(request.username())) { password = m_credentials.value(request.username()); return QXmppPasswordReply::NoError; } else { return QXmppPasswordReply::AuthorizationError; } }; /// Returns whether getPassword() is enabled. bool hasGetPassword() const override { return true; }; private: QMap m_credentials; }; #endif // TESTS_UTIL_H