| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -6,6 +6,8 @@ | |
|
|
||
| #pragma once | ||
|
|
||
| #include <string> | ||
|
|
||
| #include <boost/shared_ptr.hpp> | ||
|
|
||
| #include <Swiften/Base/Override.h> | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,59 @@ | ||
| /* | ||
| * Copyright (c) 2014 Kevin Smith and Remko Tronçon | ||
| * Licensed under the GNU General Public License v3. | ||
| * See Documentation/Licenses/GPLv3.txt for more information. | ||
| */ | ||
|
|
||
| #include <cppunit/extensions/HelperMacros.h> | ||
| #include <cppunit/extensions/TestFactoryRegistry.h> | ||
|
|
||
| #include <Swiften/Elements/MAMFin.h> | ||
| #include <Swiften/Parser/PayloadParsers/UnitTest/PayloadsParserTester.h> | ||
|
|
||
| using namespace Swift; | ||
|
|
||
| class MAMFinParserTest : public CppUnit::TestFixture | ||
| { | ||
| CPPUNIT_TEST_SUITE(MAMFinParserTest); | ||
| CPPUNIT_TEST(testParse_XEP0313_Exmaple1); | ||
| CPPUNIT_TEST(testParse_XEP0313_Exmaple9); | ||
| CPPUNIT_TEST_SUITE_END(); | ||
|
|
||
| public: | ||
| void testParse_XEP0313_Exmaple1() { | ||
| PayloadsParserTester parser; | ||
| CPPUNIT_ASSERT(parser.parse( | ||
| "<fin xmlns='urn:xmpp:mam:0' queryid='f27' />")); | ||
|
|
||
| boost::shared_ptr<MAMFin> payload = parser.getPayload<MAMFin>(); | ||
| CPPUNIT_ASSERT(!!payload); | ||
| CPPUNIT_ASSERT_EQUAL(false, payload->isComplete()); | ||
| CPPUNIT_ASSERT_EQUAL(true, payload->isStable()); | ||
|
|
||
| boost::optional<std::string> queryID = payload->getQueryID(); | ||
| CPPUNIT_ASSERT(queryID); | ||
| CPPUNIT_ASSERT_EQUAL(std::string("f27"), queryID.get()); | ||
| } | ||
|
|
||
| void testParse_XEP0313_Exmaple9() { | ||
| PayloadsParserTester parser; | ||
| CPPUNIT_ASSERT(parser.parse( | ||
| "<fin xmlns='urn:xmpp:mam:0' complete='true'>" | ||
| "<set xmlns='http://jabber.org/protocol/rsm'>" | ||
| "<first index='0'>23452-4534-1</first>" | ||
| "<last>390-2342-22</last>" | ||
| "<count>16</count>" | ||
| "</set>" | ||
| "</fin>")); | ||
|
|
||
| boost::shared_ptr<MAMFin> payload = parser.getPayload<MAMFin>(); | ||
| CPPUNIT_ASSERT(!!payload); | ||
| CPPUNIT_ASSERT_EQUAL(true, payload->isComplete()); | ||
| CPPUNIT_ASSERT_EQUAL(true, payload->isStable()); | ||
|
|
||
| CPPUNIT_ASSERT(!!payload->getResultSet()); | ||
| boost::shared_ptr<ResultSet> resultSet = payload->getResultSet(); | ||
| } | ||
| }; | ||
|
|
||
| CPPUNIT_TEST_SUITE_REGISTRATION(MAMFinParserTest); |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
| /* | ||
| * Copyright (c) 2014 Kevin Smith and Remko Tronçon | ||
| * Licensed under the GNU General Public License v3. | ||
| * See Documentation/Licenses/GPLv3.txt for more information. | ||
| */ | ||
|
|
||
| #include <boost/lexical_cast.hpp> | ||
| #include <boost/smart_ptr/make_shared.hpp> | ||
| #include <Swiften/Serializer/XML/XMLElement.h> | ||
| #include <Swiften/Serializer/XML/XMLRawTextNode.h> | ||
| #include <Swiften/Serializer/PayloadSerializerCollection.h> | ||
| #include <Swiften/Serializer/PayloadSerializers/MAMFinSerializer.h> | ||
| #include <Swiften/Serializer/PayloadSerializers/ResultSetSerializer.h> | ||
|
|
||
| using namespace Swift; | ||
|
|
||
| MAMFinSerializer::MAMFinSerializer() { | ||
| } | ||
|
|
||
| MAMFinSerializer::~MAMFinSerializer() { | ||
| } | ||
|
|
||
| std::string MAMFinSerializer::serializePayload(boost::shared_ptr<MAMFin> payload) const { | ||
| if (!payload) { | ||
| return ""; | ||
| } | ||
|
|
||
| XMLElement element("fin", "urn:xmpp:mam:0"); | ||
|
|
||
| if (payload->isComplete()) { | ||
| element.setAttribute("complete", "true"); | ||
| } | ||
|
|
||
| if (!payload->isStable()) { | ||
| element.setAttribute("stable", "false"); | ||
| } | ||
|
|
||
| if (payload->getQueryID()) { | ||
| element.setAttribute("queryid", *payload->getQueryID()); | ||
| } | ||
|
|
||
| if (payload->getResultSet()) { | ||
| element.addNode(boost::make_shared<XMLRawTextNode>(ResultSetSerializer().serialize(payload->getResultSet()))); | ||
| } | ||
|
|
||
| return element.serialize(); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,64 @@ | ||
| /* | ||
| * Copyright (c) 2014 Kevin Smith and Remko Tronçon | ||
| * Licensed under the GNU General Public License v3. | ||
| * See Documentation/Licenses/GPLv3.txt for more information. | ||
| */ | ||
|
|
||
| #include <boost/smart_ptr/make_shared.hpp> | ||
|
|
||
| #include <cppunit/extensions/HelperMacros.h> | ||
| #include <cppunit/extensions/TestFactoryRegistry.h> | ||
|
|
||
| #include <Swiften/Serializer/PayloadSerializers/MAMFinSerializer.h> | ||
| #include <Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h> | ||
|
|
||
| using namespace Swift; | ||
|
|
||
| class MAMFinSerializerTest : public CppUnit::TestFixture { | ||
| CPPUNIT_TEST_SUITE(MAMFinSerializerTest); | ||
| CPPUNIT_TEST(testSerialize_XEP0313_Exmaple1); | ||
| CPPUNIT_TEST(testSerialize_XEP0313_Exmaple9); | ||
| CPPUNIT_TEST_SUITE_END(); | ||
|
|
||
| public: | ||
| void testSerialize_XEP0313_Exmaple1() { | ||
| MAMFinSerializer serializer; | ||
|
|
||
| boost::shared_ptr<MAMFin> fin = boost::make_shared<MAMFin>(); | ||
| fin->setQueryID("f27"); | ||
|
|
||
| std::string expectedResult = | ||
| "<fin queryid=\"f27\" xmlns=\"urn:xmpp:mam:0\"/>"; | ||
| CPPUNIT_ASSERT_EQUAL(expectedResult, serializer.serialize(fin)); | ||
| } | ||
|
|
||
| void testSerialize_XEP0313_Exmaple9() { | ||
| MAMFinSerializer serializer; | ||
|
|
||
| boost::shared_ptr<MAMFin> fin = boost::make_shared<MAMFin>(); | ||
| fin->setComplete(true); | ||
|
|
||
| boost::shared_ptr<ResultSet> set = boost::make_shared<ResultSet>(); | ||
| set->setFirstID(std::string("23452-4534-1")); | ||
| set->setFirstIDIndex(0); | ||
| set->setLastID(std::string("390-2342-22")); | ||
| set->setCount(16); | ||
|
|
||
| fin->setResultSet(set); | ||
|
|
||
| std::string expectedResult = | ||
| "<fin complete=\"true\" xmlns=\"urn:xmpp:mam:0\">" | ||
| "<set xmlns=\"http://jabber.org/protocol/rsm\">" | ||
| "<count>16</count>" | ||
| "<first index=\"0\">23452-4534-1</first>" | ||
| "<last>390-2342-22</last>" | ||
| "</set>" | ||
| "</fin>"; | ||
| CPPUNIT_ASSERT_EQUAL(expectedResult, serializer.serialize(fin)); | ||
| } | ||
|
|
||
| private: | ||
| FullPayloadSerializerCollection serializers; | ||
| }; | ||
|
|
||
| CPPUNIT_TEST_SUITE_REGISTRATION(MAMFinSerializerTest); |