1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
/*
* Copyright (C) 2008-2020 The QXmpp developers
*
* Authors:
* Melvin Keskin
* 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 <QObject>
#include "QXmppClient.h"
#include "QXmppVCardIq.h"
#include "QXmppVCardManager.h"
#include "util.h"
Q_DECLARE_METATYPE(QXmppVCardIq);
class tst_QXmppVCardManager : public QObject
{
Q_OBJECT
private slots:
void testHandleStanza_data();
void testHandleStanza();
private:
QXmppClient m_client;
};
void tst_QXmppVCardManager::testHandleStanza_data()
{
QTest::addColumn<QXmppVCardIq>("expectedIq");
QTest::addColumn<bool>("isClientVCard");
#define ROW(name, iq, clientVCard) \
QTest::newRow(QT_STRINGIFY(name)) << iq << clientVCard
QXmppVCardIq iq;
iq.setType(QXmppIq::Result);
iq.setTo("stpeter@jabber.org/roundabout");
iq.setFullName("Jeremie Miller");
auto iqFromBare = iq;
iqFromBare.setFrom("stpeter@jabber.org");
auto iqFromFull = iq;
iqFromFull.setFrom("stpeter@jabber.org/roundabout");
ROW(client-vcard-from-empty, iq, true);
ROW(client-vcard-from-bare, iqFromBare, true);
ROW(client-vcard-from-full, iqFromFull, false);
#undef ROW
}
void tst_QXmppVCardManager::testHandleStanza()
{
QFETCH(QXmppVCardIq, expectedIq);
QFETCH(bool, isClientVCard);
// initialize new manager to clear internal values
QXmppVCardManager *manager = new QXmppVCardManager();
m_client.addExtension(manager);
// sets own jid internally
m_client.connectToServer("stpeter@jabber.org", {});
m_client.disconnectFromServer();
bool vCardReceived = false;
bool clientVCardReceived = false;
QObject context;
connect(manager, &QXmppVCardManager::vCardReceived, &context, [&](QXmppVCardIq iq) {
vCardReceived = true;
QCOMPARE(iq, expectedIq);
});
connect(manager, &QXmppVCardManager::clientVCardReceived, &context, [&]() {
clientVCardReceived = true;
QCOMPARE(manager->clientVCard(), expectedIq);
});
bool accepted = manager->handleStanza(writePacketToDom(expectedIq));
QVERIFY(accepted);
QVERIFY(vCardReceived);
QCOMPARE(clientVCardReceived, isClientVCard);
// clean up (client deletes manager)
m_client.removeExtension(manager);
}
QTEST_MAIN(tst_QXmppVCardManager)
#include "tst_qxmppvcardmanager.moc"
|