2 changes: 0 additions & 2 deletions Swiften/Parser/PayloadParsers/MAMQueryParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
#include <boost/lexical_cast.hpp>
#include <boost/optional.hpp>
#include <Swiften/Base/DateTime.h>
#include <Swiften/Parser/PayloadParserFactory.h>
#include <Swiften/Parser/PayloadParserFactoryCollection.h>
#include <Swiften/Parser/PayloadParsers/FormParser.h>
#include <Swiften/Parser/PayloadParsers/ResultSetParser.h>
#include <Swiften/Parser/PayloadParsers/MAMQueryParser.h>
Expand Down
3 changes: 2 additions & 1 deletion Swiften/Parser/PayloadParsers/MAMQueryParser.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

#pragma once

#include <string>

#include <boost/shared_ptr.hpp>

#include <Swiften/Base/Override.h>
Expand All @@ -14,7 +16,6 @@
#include <Swiften/Parser/GenericPayloadParser.h>

namespace Swift {
class PayloadParserFactoryCollection;
class ResultSetParser;
class FormParser;

Expand Down
3 changes: 1 addition & 2 deletions Swiften/Parser/PayloadParsers/MAMResultParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@

#include <boost/lexical_cast.hpp>
#include <boost/optional.hpp>

#include <Swiften/Base/DateTime.h>
#include <Swiften/Parser/PayloadParserFactory.h>
#include <Swiften/Parser/PayloadParserFactoryCollection.h>
#include <Swiften/Parser/PayloadParsers/ForwardedParser.h>
#include <Swiften/Parser/PayloadParsers/MAMResultParser.h>

Expand Down
2 changes: 2 additions & 0 deletions Swiften/Parser/PayloadParsers/MAMResultParser.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

#pragma once

#include <string>

#include <boost/shared_ptr.hpp>

#include <Swiften/Base/Override.h>
Expand Down
35 changes: 0 additions & 35 deletions Swiften/Parser/PayloadParsers/UnitTest/MAMArchivedParserTest.cpp

This file was deleted.

59 changes: 59 additions & 0 deletions Swiften/Parser/PayloadParsers/UnitTest/MAMFinParserTest.cpp
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);
47 changes: 47 additions & 0 deletions Swiften/Parser/PayloadParsers/UnitTest/MAMQueryParserTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ class MAMQueryParserTest : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(MAMQueryParserTest);
CPPUNIT_TEST(testParse);
CPPUNIT_TEST(testParse_XEP0313_Example3);
CPPUNIT_TEST(testParse_XEP0313_Example4);
CPPUNIT_TEST(testParseEmpty);
CPPUNIT_TEST_SUITE_END();

Expand Down Expand Up @@ -58,6 +60,49 @@ class MAMQueryParserTest : public CppUnit::TestFixture
CPPUNIT_ASSERT_EQUAL(*resultSet->getMaxItems(), 10);
}

void testParse_XEP0313_Example3() {
PayloadsParserTester parser;
CPPUNIT_ASSERT(parser.parse(
"<query xmlns='urn:xmpp:mam:0'>"
"<x xmlns='jabber:x:data'>"
"<field var='FORM_TYPE'>"
"<value>urn:xmpp:mam:0</value>"
"</field>"
"<field var='with'>"
"<value>juliet@capulet.lit</value>"
"</field>"
"</x>"
"</query>"));

boost::shared_ptr<MAMQuery> payload = parser.getPayload<MAMQuery>();
CPPUNIT_ASSERT(!!payload && !!payload->getForm() && !!payload->getForm()->getField("FORM_TYPE") && !!payload->getForm()->getField("with"));
CPPUNIT_ASSERT_EQUAL(std::string("urn:xmpp:mam:0"), payload->getForm()->getField("FORM_TYPE")->getTextSingleValue());
CPPUNIT_ASSERT_EQUAL(std::string("juliet@capulet.lit"), payload->getForm()->getField("with")->getTextSingleValue());
}

void testParse_XEP0313_Example4() {
PayloadsParserTester parser;
CPPUNIT_ASSERT(parser.parse(
"<query xmlns='urn:xmpp:mam:0'>"
"<x xmlns='jabber:x:data'>"
"<field var='FORM_TYPE'>"
"<value>urn:xmpp:mam:0</value>"
"</field>"
"<field var='start'>"
"<value>2010-06-07T00:00:00Z</value>"
"</field>"
"<field var='end'>"
"<value>2010-07-07T13:23:54Z</value>"
"</field>"
"</x>"
"</query>"));
boost::shared_ptr<MAMQuery> payload = parser.getPayload<MAMQuery>();
CPPUNIT_ASSERT(!!payload && !!payload->getForm() && !!payload->getForm()->getField("FORM_TYPE") && !!payload->getForm()->getField("start") && !!payload->getForm()->getField("start"));
CPPUNIT_ASSERT_EQUAL(std::string("urn:xmpp:mam:0"), payload->getForm()->getField("FORM_TYPE")->getTextSingleValue());
CPPUNIT_ASSERT_EQUAL(std::string("2010-06-07T00:00:00Z"), payload->getForm()->getField("start")->getTextSingleValue());
CPPUNIT_ASSERT_EQUAL(std::string("2010-07-07T13:23:54Z"), payload->getForm()->getField("end")->getTextSingleValue());
}

void testParseEmpty() {
PayloadsParserTester parser;
CPPUNIT_ASSERT(parser.parse(
Expand All @@ -71,6 +116,8 @@ class MAMQueryParserTest : public CppUnit::TestFixture
CPPUNIT_ASSERT(!payload->getForm());
CPPUNIT_ASSERT(!payload->getResultSet());
}


};

CPPUNIT_TEST_SUITE_REGISTRATION(MAMQueryParserTest);
2 changes: 1 addition & 1 deletion Swiften/Parser/SConscript
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,9 @@ sources = [
"PayloadParsers/PubSubErrorParserFactory.cpp",
"PayloadParsers/ResultSetParser.cpp",
"PayloadParsers/ForwardedParser.cpp",
"PayloadParsers/MAMFinParser.cpp",
"PayloadParsers/MAMResultParser.cpp",
"PayloadParsers/MAMQueryParser.cpp",
"PayloadParsers/MAMArchivedParser.cpp",
"PayloadParsers/IsodeIQDelegationParser.cpp",
"PlatformXMLParserFactory.cpp",
"PresenceParser.cpp",
Expand Down
8 changes: 4 additions & 4 deletions Swiften/SConscript
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ if env["SCONS_STAGE"] == "build" :
"Elements/Forwarded.cpp",
"Elements/MAMResult.cpp",
"Elements/MAMQuery.cpp",
"Elements/MAMArchived.cpp",
"Elements/MAMFin.cpp",
"Elements/IsodeIQDelegation.cpp",
"Entity/Entity.cpp",
"Entity/PayloadPersister.cpp",
Expand Down Expand Up @@ -231,9 +231,9 @@ if env["SCONS_STAGE"] == "build" :
"Serializer/PayloadSerializers/WhiteboardSerializer.cpp",
"Serializer/PayloadSerializers/ResultSetSerializer.cpp",
"Serializer/PayloadSerializers/ForwardedSerializer.cpp",
"Serializer/PayloadSerializers/MAMFinSerializer.cpp",
"Serializer/PayloadSerializers/MAMResultSerializer.cpp",
"Serializer/PayloadSerializers/MAMQuerySerializer.cpp",
"Serializer/PayloadSerializers/MAMArchivedSerializer.cpp",
"Serializer/PayloadSerializers/IsodeIQDelegationSerializer.cpp",
"Serializer/PresenceSerializer.cpp",
"Serializer/StanzaSerializer.cpp",
Expand Down Expand Up @@ -426,9 +426,9 @@ if env["SCONS_STAGE"] == "build" :
File("Parser/PayloadParsers/UnitTest/IdleParserTest.cpp"),
File("Parser/PayloadParsers/UnitTest/ResultSetParserTest.cpp"),
File("Parser/PayloadParsers/UnitTest/ForwardedParserTest.cpp"),
File("Parser/PayloadParsers/UnitTest/MAMFinParserTest.cpp"),
File("Parser/PayloadParsers/UnitTest/MAMResultParserTest.cpp"),
File("Parser/PayloadParsers/UnitTest/MAMQueryParserTest.cpp"),
File("Parser/PayloadParsers/UnitTest/MAMArchivedParserTest.cpp"),
File("Parser/UnitTest/BOSHBodyExtractorTest.cpp"),
File("Parser/UnitTest/AttributeMapTest.cpp"),
File("Parser/UnitTest/EnumParserTest.cpp"),
Expand Down Expand Up @@ -483,9 +483,9 @@ if env["SCONS_STAGE"] == "build" :
File("Serializer/PayloadSerializers/UnitTest/IdleSerializerTest.cpp"),
File("Serializer/PayloadSerializers/UnitTest/ResultSetSerializerTest.cpp"),
File("Serializer/PayloadSerializers/UnitTest/ForwardedSerializerTest.cpp"),
File("Serializer/PayloadSerializers/UnitTest/MAMFinSerializerTest.cpp"),
File("Serializer/PayloadSerializers/UnitTest/MAMResultSerializerTest.cpp"),
File("Serializer/PayloadSerializers/UnitTest/MAMQuerySerializerTest.cpp"),
File("Serializer/PayloadSerializers/UnitTest/MAMArchivedSerializerTest.cpp"),
File("Serializer/PayloadSerializers/UnitTest/PubSubItemSerializerTest.cpp"),
File("Serializer/PayloadSerializers/UnitTest/PubSubItemsSerializerTest.cpp"),
File("Serializer/UnitTest/StreamFeaturesSerializerTest.cpp"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
#include <Swiften/Serializer/PayloadSerializers/JinglePayloadSerializer.h>
#include <Swiften/Serializer/PayloadSerializers/JingleS5BTransportPayloadSerializer.h>
#include <Swiften/Serializer/PayloadSerializers/LastSerializer.h>
#include <Swiften/Serializer/PayloadSerializers/MAMArchivedSerializer.h>
#include <Swiften/Serializer/PayloadSerializers/MAMQuerySerializer.h>
#include <Swiften/Serializer/PayloadSerializers/MAMResultSerializer.h>
#include <Swiften/Serializer/PayloadSerializers/MUCAdminPayloadSerializer.h>
Expand Down Expand Up @@ -147,7 +146,6 @@ FullPayloadSerializerCollection::FullPayloadSerializerCollection() {
serializers_.push_back(new ForwardedSerializer(this));
serializers_.push_back(new MAMResultSerializer(this));
serializers_.push_back(new MAMQuerySerializer());
serializers_.push_back(new MAMArchivedSerializer());
serializers_.push_back(new IsodeIQDelegationSerializer(this));

foreach(PayloadSerializer* serializer, serializers_) {
Expand Down
32 changes: 0 additions & 32 deletions Swiften/Serializer/PayloadSerializers/MAMArchivedSerializer.cpp

This file was deleted.

47 changes: 47 additions & 0 deletions Swiften/Serializer/PayloadSerializers/MAMFinSerializer.cpp
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
Expand Up @@ -9,17 +9,17 @@
#include <boost/shared_ptr.hpp>
#include <Swiften/Base/Override.h>
#include <Swiften/Base/API.h>
#include <Swiften/Elements/MAMArchived.h>
#include <Swiften/Elements/MAMFin.h>
#include <Swiften/Serializer/GenericPayloadSerializer.h>

namespace Swift {
class PayloadSerializerCollection;

class SWIFTEN_API MAMArchivedSerializer : public GenericPayloadSerializer<MAMArchived> {
class SWIFTEN_API MAMFinSerializer : public GenericPayloadSerializer<MAMFin> {
public:
MAMArchivedSerializer();
virtual ~MAMArchivedSerializer();
MAMFinSerializer();
virtual ~MAMFinSerializer();

virtual std::string serializePayload(boost::shared_ptr<MAMArchived>) const SWIFTEN_OVERRIDE;
virtual std::string serializePayload(boost::shared_ptr<MAMFin>) const SWIFTEN_OVERRIDE;
};
}

This file was deleted.

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);