From 537e325e2d44e696993b78ae2b8dd8437433c2b9 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Fri, 4 Jan 2019 20:49:09 +0100 Subject: Implement MIX-CORE XEP-0369: Info/Participant node items This implements the pubsub items for the MIX participants and info node as defined by XEP-0369: Mediated Information eXchange (MIX) in version 0.14.2. https://xmpp.org/extensions/xep-0369.html#participants-node https://xmpp.org/extensions/xep-0369.html#info-node --- tests/CMakeLists.txt | 1 + tests/qxmppmixitem/tst_qxmppmixitem.cpp | 159 ++++++++++++++++++++++++++++++++ 2 files changed, 160 insertions(+) create mode 100644 tests/qxmppmixitem/tst_qxmppmixitem.cpp (limited to 'tests') diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 223a198c..794cd609 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -25,6 +25,7 @@ add_simple_test(qxmppiceconnection) add_simple_test(qxmppiq) add_simple_test(qxmppjingleiq) add_simple_test(qxmppmammanager) +add_simple_test(qxmppmixitem) add_simple_test(qxmppmessage) add_simple_test(qxmppmixiq) add_simple_test(qxmppnonsaslauthiq) diff --git a/tests/qxmppmixitem/tst_qxmppmixitem.cpp b/tests/qxmppmixitem/tst_qxmppmixitem.cpp new file mode 100644 index 00000000..46e3e680 --- /dev/null +++ b/tests/qxmppmixitem/tst_qxmppmixitem.cpp @@ -0,0 +1,159 @@ +/* + * Copyright (C) 2008-2019 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. + * + */ + +#include +#include +#include "QXmppMixItem.h" +#include "QXmppPubSubIq.h" +#include "util.h" + +class tst_QXmppMixItem : public QObject +{ + Q_OBJECT + +private slots: + void testInfo(); + void testIsInfoItem(); + void testParticipant(); + void testIsParticipantItem(); +}; + +void tst_QXmppMixItem::testInfo() +{ + const QByteArray xml( + "" + "" + "urn:xmpp:mix:core:0" + "" + "" + "Witches Coven" + "" + "" + "A location not far from the blasted heath where the " + "three witches meet" + "" + "" + "greymalkin@shakespeare.example" + "joan@shakespeare.example" + "" + "" + ); + + QXmppMixInfoItem item; + parsePacket(item, xml); + + QCOMPARE(item.name(), QString("Witches Coven")); + QCOMPARE(item.description(), QString("A location not far from the blasted " + "heath where the three witches meet")); + QCOMPARE(item.contactJids(), QStringList() << "greymalkin@shakespeare.example" + << "joan@shakespeare.example"); + + QXmppElement element = item.toElement(); + serializePacket(element, xml); + + // test setters + item.setName("Skynet Development"); + QCOMPARE(item.name(), QString("Skynet Development")); + item.setDescription("Very cool development group."); + QCOMPARE(item.description(), QString("Very cool development group.")); + item.setContactJids(QStringList() << "somebody@example.org"); + QCOMPARE(item.contactJids(), QStringList() << "somebody@example.org"); +} + +void tst_QXmppMixItem::testIsInfoItem() +{ + QDomDocument doc; + QDomElement element; + + const QByteArray xmlCorrect( + "" + "" + "urn:xmpp:mix:core:0" + "" + "" + ); + QCOMPARE(doc.setContent(xmlCorrect, true), true); + element = doc.documentElement(); + QVERIFY(QXmppMixInfoItem::isMixChannelInfo(element)); + + const QByteArray xmlWrong( + "" + "" + "other:namespace" + "" + "" + ); + QCOMPARE(doc.setContent(xmlWrong, true), true); + element = doc.documentElement(); + QVERIFY(!QXmppMixInfoItem::isMixChannelInfo(element)); +} + +void tst_QXmppMixItem::testParticipant() +{ + const QByteArray xml( + "" + "hag66@shakespeare.example" + "thirdwitch" + "" + ); + + QXmppMixParticipantItem item; + parsePacket(item, xml); + + QCOMPARE(item.nick(), QString("thirdwitch")); + QCOMPARE(item.jid(), QString("hag66@shakespeare.example")); + + QXmppElement element = item.toElement(); + serializePacket(element, xml); + + // test setters + item.setNick("thomasd"); + QCOMPARE(item.nick(), QString("thomasd")); + item.setJid("thomas@d.example"); + QCOMPARE(item.jid(), QString("thomas@d.example")); +} + +void tst_QXmppMixItem::testIsParticipantItem() +{ + QDomDocument doc; + QDomElement element; + + const QByteArray xmlCorrect( + "" + "" + ); + QCOMPARE(doc.setContent(xmlCorrect, true), true); + element = doc.documentElement(); + QVERIFY(QXmppMixParticipantItem::isMixParticipantItem(element)); + + const QByteArray xmlWrong( + "" + "" + ); + QCOMPARE(doc.setContent(xmlWrong, true), true); + element = doc.documentElement(); + QVERIFY(!QXmppMixParticipantItem::isMixParticipantItem(element)); +} + +QTEST_MAIN(tst_QXmppMixItem) +#include "tst_qxmppmixitem.moc" -- cgit v1.2.3