diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-09-12 15:29:18 +0200 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-09-12 15:29:18 +0200 |
| commit | f9b26e12f593b185a15674e3ddda0b56d05b43c6 (patch) | |
| tree | 503d1c15099cea55536d9fb8d8a98d7fef576fa8 | |
| parent | c9b81bc66f2449fe4ca1d55259d6f70178f1a91d (diff) | |
| download | qxmpp-f9b26e12f593b185a15674e3ddda0b56d05b43c6.tar.gz | |
add/test QXmppTransferFileInfo parsing/serialisation
| -rw-r--r-- | src/client/QXmppTransferManager.cpp | 26 | ||||
| -rw-r--r-- | src/client/QXmppTransferManager.h | 5 | ||||
| -rw-r--r-- | tests/si.cpp | 52 | ||||
| -rw-r--r-- | tests/si.h | 2 |
4 files changed, 85 insertions, 0 deletions
diff --git a/src/client/QXmppTransferManager.cpp b/src/client/QXmppTransferManager.cpp index d55653a9..146bd08d 100644 --- a/src/client/QXmppTransferManager.cpp +++ b/src/client/QXmppTransferManager.cpp @@ -147,6 +147,32 @@ bool QXmppTransferFileInfo::operator==(const QXmppTransferFileInfo &other) const other.d->name == d->name; } +void QXmppTransferFileInfo::parse(const QDomElement &element) +{ + d->date = QXmppUtils::datetimeFromString(element.attribute("date")); + d->hash = QByteArray::fromHex(element.attribute("hash").toAscii()); + d->name = element.attribute("name"); + d->size = element.attribute("size").toLongLong(); + d->description = element.firstChildElement("desc").text(); +} + +void QXmppTransferFileInfo::toXml(QXmlStreamWriter *writer) const +{ + writer->writeStartElement("file"); + writer->writeAttribute("xmlns", ns_stream_initiation_file_transfer); + if (d->date.isValid()) + writer->writeAttribute("date", QXmppUtils::datetimeToString(d->date)); + if (!d->hash.isEmpty()) + writer->writeAttribute("hash", d->hash.toHex()); + if (!d->name.isEmpty()) + writer->writeAttribute("name", d->name); + if (d->size > 0) + writer->writeAttribute("size", QString::number(d->size)); + if (!d->description.isEmpty()) + writer->writeTextElement("desc", d->description); + writer->writeEndElement(); +} + class QXmppTransferJobPrivate { public: diff --git a/src/client/QXmppTransferManager.h b/src/client/QXmppTransferManager.h index cff0c03a..a14e075f 100644 --- a/src/client/QXmppTransferManager.h +++ b/src/client/QXmppTransferManager.h @@ -68,6 +68,11 @@ public: QXmppTransferFileInfo& operator=(const QXmppTransferFileInfo &other); bool operator==(const QXmppTransferFileInfo &other) const; + /// \cond + void parse(const QDomElement &element); + void toXml(QXmlStreamWriter *writer) const; + /// \endcond + private: QSharedDataPointer<QXmppTransferFileInfoPrivate> d; }; diff --git a/tests/si.cpp b/tests/si.cpp index 7a77f3ca..09e8cf42 100644 --- a/tests/si.cpp +++ b/tests/si.cpp @@ -23,10 +23,62 @@ */ #include "QXmppStreamInitiationIq.h" +#include "QXmppTransferManager.h" #include "si.h" #include "tests.h" +void tst_QXmppStreamInitiationIq::testFileInfo_data() +{ + QTest::addColumn<QByteArray>("xml"); + QTest::addColumn<QDateTime>("date"); + QTest::addColumn<QString>("description"); + QTest::addColumn<QByteArray>("hash"); + QTest::addColumn<QString>("name"); + QTest::addColumn<qint64>("size"); + + QTest::newRow("normal") + << QByteArray("<file xmlns=\"http://jabber.org/protocol/si/profile/file-transfer\" name=\"test.txt\" size=\"1022\"/>") + << QDateTime() + << QString() + << QByteArray() + << QString("test.txt") + << qint64(1022); + + QTest::newRow("full") + << QByteArray("<file xmlns=\"http://jabber.org/protocol/si/profile/file-transfer\" " + "date=\"1969-07-21T02:56:15Z\" " + "hash=\"552da749930852c69ae5d2141d3766b1\" " + "name=\"test.txt\" " + "size=\"1022\">" + "<desc>This is a test. If this were a real file...</desc>" + "</file>") + << QDateTime(QDate(1969, 7, 21), QTime(2, 56, 15), Qt::UTC) + << QString("This is a test. If this were a real file...") + << QByteArray::fromHex("552da749930852c69ae5d2141d3766b1") + << QString("test.txt") + << qint64(1022); +} + +void tst_QXmppStreamInitiationIq::testFileInfo() +{ + QFETCH(QByteArray, xml); + QFETCH(QDateTime, date); + QFETCH(QString, description); + QFETCH(QByteArray, hash); + QFETCH(QString, name); + QFETCH(qint64, size); + + QXmppTransferFileInfo info; + parsePacket(info, xml); + QCOMPARE(info.date(), date); + QCOMPARE(info.description(), description); + QCOMPARE(info.hash(), hash); + QCOMPARE(info.name(), name); + QCOMPARE(info.size(), size); + serializePacket(info, xml); +} + void tst_QXmppStreamInitiationIq::testOffer() { QByteArray xml( @@ -29,6 +29,8 @@ class tst_QXmppStreamInitiationIq : public QObject Q_OBJECT private slots: + void testFileInfo_data(); + void testFileInfo(); void testOffer(); }; |
