// SPDX-FileCopyrightText: 2019 Linus Jahn // // SPDX-License-Identifier: LGPL-2.1-or-later #include "QXmppMixIq.h" #include "util.h" #include Q_DECLARE_METATYPE(QXmppIq::Type); Q_DECLARE_METATYPE(QXmppMixIq::Type); class tst_QXmppMixIq : public QObject { Q_OBJECT private: Q_SLOT void testBase_data(); Q_SLOT void testBase(); Q_SLOT void testDefaults(); Q_SLOT void testSetters(); Q_SLOT void testInvalidActionType(); Q_SLOT void testIsMixIq(); }; void tst_QXmppMixIq::testBase_data() { QByteArray joinC2sSetXml( "" "" "" "" "" "" "" "third witch" "" "" ""); QByteArray joinS2sSetXml( "" "" "" "" "" "" "stpeter" "" ""); QByteArray joinS2sResultXml( "" "" "" "" "" "" "third witch" "" ""); QByteArray joinC2sResultXml( "" "" "" "" "" "" "" "" "" ""); QByteArray leaveC2sSetXml( "" "" "" "" ""); QByteArray leaveS2sSetXml( "" "" ""); QByteArray leaveS2sResultXml( "" "" ""); QByteArray leaveC2sResultXml( "" "" "" "" ""); QByteArray updateSubscriptionSetXml( "" "" "" "" ""); QByteArray updateSubscriptionResultXml( "" "" "" "" ""); QByteArray setNickSetXml( "" "" "thirdwitch" "" ""); QByteArray setNickResultXml( "" "" "thirdwitch" "" ""); QByteArray createXml( "" "" ""); QByteArray createWithoutNameXml( "" "" ""); QByteArray destroyXml( "" "" ""); QByteArray emptyXml( ""); QStringList emptyNodes; QStringList defaultNodes; defaultNodes << "urn:xmpp:mix:nodes:messages" << "urn:xmpp:mix:nodes:presence" << "urn:xmpp:mix:nodes:participants" << "urn:xmpp:mix:nodes:info"; QTest::addColumn("xml"); QTest::addColumn("type"); QTest::addColumn("actionType"); QTest::addColumn("jid"); QTest::addColumn("channelName"); QTest::addColumn("nodes"); QTest::addColumn("nick"); QTest::newRow("join-c2s-set") << joinC2sSetXml << QXmppIq::Set << QXmppMixIq::ClientJoin << "coven@mix.shakespeare.example" << "" << defaultNodes << "third witch"; QTest::newRow("join-s2s-set") << joinS2sSetXml << QXmppIq::Set << QXmppMixIq::Join << "" << "" << defaultNodes << "stpeter"; QTest::newRow("join-s2s-result") << joinS2sResultXml << QXmppIq::Result << QXmppMixIq::Join << "123456#coven@mix.shakespeare.example" << "" << defaultNodes << "third witch"; QTest::newRow("join-c2s-result") << joinC2sResultXml << QXmppIq::Result << QXmppMixIq::ClientJoin << "123456#coven@mix.shakespeare.example" << "" << defaultNodes << ""; QTest::newRow("leave-c2s-set") << leaveC2sSetXml << QXmppIq::Set << QXmppMixIq::ClientLeave << "coven@mix.shakespeare.example" << "" << emptyNodes << ""; QTest::newRow("leave-s2s-set") << leaveS2sSetXml << QXmppIq::Set << QXmppMixIq::Leave << "" << "" << emptyNodes << ""; QTest::newRow("leave-s2s-result") << leaveS2sResultXml << QXmppIq::Result << QXmppMixIq::Leave << "" << "" << emptyNodes << ""; QTest::newRow("leave-c2s-result") << leaveC2sResultXml << QXmppIq::Result << QXmppMixIq::ClientLeave << "" << "" << emptyNodes << ""; QTest::newRow("update-subscription-set") << updateSubscriptionSetXml << QXmppIq::Set << QXmppMixIq::UpdateSubscription << "" << "" << (QStringList() << "urn:xmpp:mix:nodes:messages") << ""; QTest::newRow("update-subscription-result") << updateSubscriptionResultXml << QXmppIq::Result << QXmppMixIq::UpdateSubscription << "hag66@shakespeare.example" << "" << (QStringList() << "urn:xmpp:mix:nodes:messages") << ""; QTest::newRow("setnick-set") << setNickSetXml << QXmppIq::Set << QXmppMixIq::SetNick << "" << "" << emptyNodes << "thirdwitch"; QTest::newRow("setnick-result") << setNickResultXml << QXmppIq::Result << QXmppMixIq::SetNick << "" << "" << emptyNodes << "thirdwitch"; QTest::newRow("create") << createXml << QXmppIq::Set << QXmppMixIq::Create << "" << "coven" << emptyNodes << ""; QTest::newRow("create-without-name") << createWithoutNameXml << QXmppIq::Set << QXmppMixIq::Create << "" << "" << emptyNodes << ""; QTest::newRow("destroy") << destroyXml << QXmppIq::Set << QXmppMixIq::Destroy << "" << "coven" << emptyNodes << ""; QTest::newRow("empty") << emptyXml << QXmppIq::Set << QXmppMixIq::None << "" << "" << emptyNodes << ""; } void tst_QXmppMixIq::testBase() { QFETCH(QByteArray, xml); QFETCH(QXmppIq::Type, type); QFETCH(QXmppMixIq::Type, actionType); QFETCH(QString, jid); QFETCH(QString, channelName); QFETCH(QStringList, nodes); QFETCH(QString, nick); QXmppMixIq iq; parsePacket(iq, xml); QCOMPARE(iq.type(), type); QCOMPARE(iq.actionType(), actionType); QCOMPARE(iq.jid(), jid); QCOMPARE(iq.channelName(), channelName); QCOMPARE(iq.nodes(), nodes); QCOMPARE(iq.nick(), nick); serializePacket(iq, xml); } void tst_QXmppMixIq::testDefaults() { QXmppMixIq iq; QCOMPARE(iq.actionType(), QXmppMixIq::None); QCOMPARE(iq.jid(), QString()); QCOMPARE(iq.channelName(), QString()); QCOMPARE(iq.nodes(), QStringList()); QCOMPARE(iq.nick(), QString()); } void tst_QXmppMixIq::testSetters() { QXmppMixIq iq; iq.setActionType(QXmppMixIq::Join); QCOMPARE(iq.actionType(), QXmppMixIq::Join); iq.setJid("interestingnews@mix.example.com"); QCOMPARE(iq.jid(), QString("interestingnews@mix.example.com")); iq.setChannelName("interestingnews"); QCOMPARE(iq.channelName(), QString("interestingnews")); iq.setNodes(QStringList() << "com:example:mix:node:custom"); QCOMPARE(iq.nodes(), QStringList() << "com:example:mix:node:custom"); iq.setNick("SMUDO"); QCOMPARE(iq.nick(), QString("SMUDO")); } void tst_QXmppMixIq::testInvalidActionType() { const QByteArray xml = "" "" ""; QXmppMixIq iq; parsePacket(iq, xml); QCOMPARE(iq.actionType(), QXmppMixIq::None); } void tst_QXmppMixIq::testIsMixIq() { const QByteArray trueXml( "" "" ""); const QByteArray truePamXml( "" "" "" "" ""); const QByteArray falseXml( "" "" ""); QDomDocument doc; doc.setContent(trueXml, true); QDomElement trueElement = doc.documentElement(); QVERIFY(QXmppMixIq::isMixIq(trueElement)); doc.setContent(truePamXml, true); QDomElement truePamElement = doc.documentElement(); QVERIFY(QXmppMixIq::isMixIq(truePamElement)); doc.setContent(falseXml, true); QDomElement falseElement = doc.documentElement(); QVERIFY(!QXmppMixIq::isMixIq(falseElement)); } QTEST_MAIN(tst_QXmppMixIq) #include "tst_qxmppmixiq.moc"