/* * Copyright (C) 2008-2021 The QXmpp developers * * Authors: * Jeremy Lainé * Manjeet Dahiya * * 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. * */ #include "QXmppCarbonManager.h" #include "QXmppClient.h" #include "QXmppMessage.h" #include "util.h" #include class QXmppCarbonTestHelper : public QObject { Q_OBJECT public slots: void messageSent(const QXmppMessage& msg); void messageReceived(const QXmppMessage& msg); public: QXmppMessage m_expectedMessage; bool m_expectSent; bool m_signalTriggered; void compareMessages(const QXmppMessage& lhs, const QXmppMessage& rhs); }; class tst_QXmppCarbonManager : public QObject { Q_OBJECT private slots: void initTestCase(); void testHandleStanza_data(); void testHandleStanza(); private: QXmppCarbonTestHelper m_helper; QXmppCarbonManager *m_manager; QXmppClient client; }; void tst_QXmppCarbonManager::initTestCase() { m_manager = new QXmppCarbonManager(); connect(m_manager, &QXmppCarbonManager::messageSent, &m_helper, &QXmppCarbonTestHelper::messageSent); connect(m_manager, &QXmppCarbonManager::messageReceived, &m_helper, &QXmppCarbonTestHelper::messageReceived); client.connectToServer("romeo@montague.example", "a"); client.disconnectFromServer(); client.addExtension(m_manager); } void tst_QXmppCarbonManager::testHandleStanza_data() { QTest::addColumn("xml"); QTest::addColumn("accept"); QTest::addColumn("sent"); QTest::addColumn("forwardedxml"); QTest::newRow("received1") << QByteArray("" "" "" "" "What man art thou that, thus bescreen'd in night, so stumblest on my counsel?" "0e3141cd80894871a68e6fe6b1ec56fa" "" "" "" "") << true << false << QByteArray("" "What man art thou that, thus bescreen'd in night, so stumblest on my counsel?" "0e3141cd80894871a68e6fe6b1ec56fa" ""); QTest::newRow("sent1") << QByteArray("" "" "" "" "Neither, fair saint, if either thee dislike." "0e3141cd80894871a68e6fe6b1ec56fa" "" "" "" "") << true << true << QByteArray("" "Neither, fair saint, if either thee dislike." "0e3141cd80894871a68e6fe6b1ec56fa" ""); QTest::newRow("received-wrong-from") << QByteArray("" "" "" "" "What man art thou that, thus bescreen'd in night, so stumblest on my counsel?" "0e3141cd80894871a68e6fe6b1ec56fa" "" "" "" "") << false << false << QByteArray("" "What man art thou that, thus bescreen'd in night, so stumblest on my counsel?" "0e3141cd80894871a68e6fe6b1ec56fa" ""); QTest::newRow("sent-wrong-from") << QByteArray("" "" "" "" "Neither, fair saint, if either thee dislike." "0e3141cd80894871a68e6fe6b1ec56fa" "" "" "" "") << false << true << QByteArray("" "Neither, fair saint, if either thee dislike." "0e3141cd80894871a68e6fe6b1ec56fa" ""); QTest::newRow("forwarded_normal") << QByteArray("" "A most courteous exposition!" "" "" "" "Yet I should kill thee with much cherishing." "" "" "" "" "" "") << false << false << QByteArray(); } void tst_QXmppCarbonManager::testHandleStanza() { QFETCH(QByteArray, xml); QFETCH(bool, accept); QFETCH(bool, sent); QFETCH(QByteArray, forwardedxml); m_helper.m_expectedMessage = QXmppMessage(); if (!forwardedxml.isEmpty()) parsePacket(m_helper.m_expectedMessage, forwardedxml); m_helper.m_expectSent = sent; m_helper.m_signalTriggered = false; QDomDocument doc; QCOMPARE(doc.setContent(xml, true), true); QDomElement element = doc.documentElement(); bool accepted = m_manager->handleStanza(element); QCOMPARE(accepted, accept); QCOMPARE(m_helper.m_signalTriggered, accept); } void QXmppCarbonTestHelper::messageSent(const QXmppMessage& msg) { m_signalTriggered = true; QCOMPARE(m_expectSent, true); compareMessages(m_expectedMessage, msg); } void QXmppCarbonTestHelper::messageReceived(const QXmppMessage& msg) { m_signalTriggered = true; QCOMPARE(m_expectSent, false); compareMessages(m_expectedMessage, msg); } void QXmppCarbonTestHelper::compareMessages(const QXmppMessage& lhs, const QXmppMessage& rhs) { QCOMPARE(lhs.body(), rhs.body()); QCOMPARE(lhs.from(), rhs.from()); QCOMPARE(lhs.id(), rhs.id()); QCOMPARE(lhs.isAttentionRequested(), rhs.isAttentionRequested()); QCOMPARE(lhs.isMarkable(), rhs.isMarkable()); QCOMPARE(lhs.isPrivate(), rhs.isPrivate()); QCOMPARE(lhs.isReceiptRequested(), rhs.isReceiptRequested()); QCOMPARE(lhs.lang(), rhs.lang()); QCOMPARE(lhs.to(), rhs.to()); QCOMPARE(lhs.thread(), rhs.thread()); QCOMPARE(lhs.stamp(), rhs.stamp()); QCOMPARE(lhs.type(), rhs.type()); } QTEST_MAIN(tst_QXmppCarbonManager) #include "tst_qxmppcarbonmanager.moc"