diff options
| author | Tarun Gupta <tarun1995gupta@gmail.com> | 2017-06-26 13:18:09 (GMT) | 
|---|---|---|
| committer | Tobias Markmann <tm@ayena.de> | 2017-07-14 13:19:16 (GMT) | 
| commit | f21c9448c5187493fd08574962d88c2db1405512 (patch) | |
| tree | d8facf4bed5c792833719a1685084b8b4a676d87 | |
| parent | 0b4aaa1def9625ca3b4ddf869c988a68483135f8 (diff) | |
| download | swift-f21c9448c5187493fd08574962d88c2db1405512.zip swift-f21c9448c5187493fd08574962d88c2db1405512.tar.bz2 | |
Add MIXRegisterNick Element, its Parser and Serializer
License:
This patch is BSD-licensed, see Documentation/Licenses/BSD-simplified.txt for details.
Test-Information:
Added tests for MIXRegisterNick Parser and Serializer based on examples in XEP 0369, which passes.
Tested on Ubuntu 16.04 LTS.
Change-Id: I80796db9d540c58296afa3454f29e1fb81d04615
12 files changed, 202 insertions, 0 deletions
| diff --git a/Swiften/Elements/MIXRegisterNick.h b/Swiften/Elements/MIXRegisterNick.h new file mode 100644 index 0000000..3bd8c4a --- /dev/null +++ b/Swiften/Elements/MIXRegisterNick.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017 Tarun Gupta + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +#pragma once + +#include <memory> +#include <string> + +#include <Swiften/Base/API.h> +#include <Swiften/Elements/Payload.h> + +namespace Swift { +    class SWIFTEN_API MIXRegisterNick : public Payload { +        public: +            using ref = std::shared_ptr<MIXRegisterNick>; + +        public: + +            MIXRegisterNick() {} + +            const std::string& getNick() const { +                return nick_; +            } + +            void setNick(const std::string& nick) { +                nick_ = nick; +            } + +        private: +            std::string nick_; +    }; +} diff --git a/Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp b/Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp index 939e1af..8f57704 100644 --- a/Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp +++ b/Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp @@ -53,6 +53,7 @@  #include <Swiften/Parser/PayloadParsers/MAMResultParser.h>  #include <Swiften/Parser/PayloadParsers/MIXParticipantParserFactory.h>  #include <Swiften/Parser/PayloadParsers/MIXCreateParser.h> +#include <Swiften/Parser/PayloadParsers/MIXRegisterNickParserFactory.h>  #include <Swiften/Parser/PayloadParsers/MIXSetNickParserFactory.h>  #include <Swiften/Parser/PayloadParsers/MIXDestroyParser.h>  #include <Swiften/Parser/PayloadParsers/MIXJoinParserFactory.h> @@ -139,6 +140,7 @@ FullPayloadParserFactoryCollection::FullPayloadParserFactoryCollection() {      factories_.push_back(std::make_shared<ClientStateParserFactory>());      factories_.push_back(std::make_shared<MIXParticipantParserFactory>());      factories_.push_back(std::make_shared<GenericPayloadParserFactory<MIXDestroyParser> >("destroy", "urn:xmpp:mix:0")); +    factories_.push_back(std::make_shared<MIXRegisterNickParserFactory>());      factories_.push_back(std::make_shared<MIXSetNickParserFactory>());      factories_.push_back(std::make_shared<GenericPayloadParserFactory<MIXCreateParser> >("create", "urn:xmpp:mix:0"));      factories_.push_back(std::make_shared<GenericPayloadParserFactory<MIXUserPreferenceParser> >("user-preference", "urn:xmpp:mix:0")); diff --git a/Swiften/Parser/PayloadParsers/MIXRegisterNickParser.cpp b/Swiften/Parser/PayloadParsers/MIXRegisterNickParser.cpp new file mode 100644 index 0000000..945e9b2 --- /dev/null +++ b/Swiften/Parser/PayloadParsers/MIXRegisterNickParser.cpp @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2017 Tarun Gupta + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +#include <Swiften/Parser/PayloadParsers/MIXRegisterNickParser.h> + +namespace Swift { + +void MIXRegisterNickParser::handleTree(ParserElement::ref root) { +    for (const auto& child : root->getAllChildren()) { +        if (child->getName() == "nick" && child->getNamespace() == root->getNamespace()) { +            getPayloadInternal()->setNick(child->getText()); +        } +    } +} + +} diff --git a/Swiften/Parser/PayloadParsers/MIXRegisterNickParser.h b/Swiften/Parser/PayloadParsers/MIXRegisterNickParser.h new file mode 100644 index 0000000..cfb618e --- /dev/null +++ b/Swiften/Parser/PayloadParsers/MIXRegisterNickParser.h @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2017 Tarun Gupta + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +#pragma once + +#include <Swiften/Base/API.h> +#include <Swiften/Elements/MIXRegisterNick.h> +#include <Swiften/Parser/GenericPayloadTreeParser.h> + +namespace Swift { +    class SWIFTEN_API MIXRegisterNickParser : public GenericPayloadTreeParser<MIXRegisterNick> { +        public: +            MIXRegisterNickParser() {} +            virtual void handleTree(ParserElement::ref root) override; +    }; +} diff --git a/Swiften/Parser/PayloadParsers/MIXRegisterNickParserFactory.h b/Swiften/Parser/PayloadParsers/MIXRegisterNickParserFactory.h new file mode 100644 index 0000000..e03392c --- /dev/null +++ b/Swiften/Parser/PayloadParsers/MIXRegisterNickParserFactory.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2017 Tarun Gupta + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +#pragma once + +#include <Swiften/Base/API.h> +#include <Swiften/Parser/GenericPayloadParserFactory.h> +#include <Swiften/Parser/PayloadParsers/MIXRegisterNickParser.h> + +namespace Swift { +    class SWIFTEN_API MIXRegisterNickParserFactory : public PayloadParserFactory { +        public: +            MIXRegisterNickParserFactory() { +            } + +            virtual bool canParse(const std::string& element, const std::string& ns, const AttributeMap&) const override { +                return element == "register" && ns == "urn:xmpp:mix:0"; +            } + +            virtual PayloadParser* createPayloadParser() override { +                return new MIXRegisterNickParser(); +            } +    }; +} diff --git a/Swiften/Parser/PayloadParsers/UnitTest/MIXRegisterNickParserTest.cpp b/Swiften/Parser/PayloadParsers/UnitTest/MIXRegisterNickParserTest.cpp new file mode 100644 index 0000000..d0539fd --- /dev/null +++ b/Swiften/Parser/PayloadParsers/UnitTest/MIXRegisterNickParserTest.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2017 Tarun Gupta + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +#include <gtest/gtest.h> + +#include <Swiften/Elements/MIXRegisterNick.h> +#include <Swiften/Parser/PayloadParsers/UnitTest/PayloadsParserTester.h> + +using namespace Swift; + +TEST(MIXRegisterNickParserTest, WithNick) { +    PayloadsParserTester parser; +    ASSERT_TRUE(parser.parse( +                "<register xmlns=\"urn:xmpp:mix:0\"> <nick>thirdwitch</nick> </register>" +                )); + +    auto payload = parser.getPayload<MIXRegisterNick>(); +    ASSERT_TRUE(payload); +    ASSERT_EQ("thirdwitch", payload->getNick()); +} diff --git a/Swiften/Parser/SConscript b/Swiften/Parser/SConscript index d185052..bfc7850 100644 --- a/Swiften/Parser/SConscript +++ b/Swiften/Parser/SConscript @@ -69,6 +69,7 @@ sources = [          "PayloadParsers/DelayParser.cpp",          "PayloadParsers/MIXParticipantParser.cpp",          "PayloadParsers/MIXSetNickParser.cpp", +        "PayloadParsers/MIXRegisterNickParser.cpp",          "PayloadParsers/MIXDestroyParser.cpp",          "PayloadParsers/MIXCreateParser.cpp",          "PayloadParsers/MIXPayloadParser.cpp", diff --git a/Swiften/SConscript b/Swiften/SConscript index 8aa3b1c..bd1faf9 100644 --- a/Swiften/SConscript +++ b/Swiften/SConscript @@ -209,6 +209,7 @@ if env["SCONS_STAGE"] == "build" :              "Serializer/PayloadSerializers/FullPayloadSerializerCollection.cpp",              "Serializer/PayloadSerializers/MIXParticipantSerializer.cpp",              "Serializer/PayloadSerializers/MIXSetNickSerializer.cpp", +            "Serializer/PayloadSerializers/MIXRegisterNickSerializer.cpp",              "Serializer/PayloadSerializers/MIXDestroySerializer.cpp",              "Serializer/PayloadSerializers/MIXCreateSerializer.cpp",              "Serializer/PayloadSerializers/MIXPayloadSerializer.cpp", @@ -441,6 +442,7 @@ if env["SCONS_STAGE"] == "build" :              File("Parser/PayloadParsers/UnitTest/JingleParserTest.cpp"),              File("Parser/PayloadParsers/UnitTest/MIXParticipantParserTest.cpp"),              File("Parser/PayloadParsers/UnitTest/MIXPayloadParserTest.cpp"), +            File("Parser/PayloadParsers/UnitTest/MIXRegisterNickParserTest.cpp"),              File("Parser/PayloadParsers/UnitTest/MIXSetNickParserTest.cpp"),              File("Parser/PayloadParsers/UnitTest/MIXDestroyParserTest.cpp"),              File("Parser/PayloadParsers/UnitTest/MIXLeaveParserTest.cpp"), @@ -528,6 +530,7 @@ if env["SCONS_STAGE"] == "build" :              File("Serializer/PayloadSerializers/UnitTest/MUCAdminPayloadSerializerTest.cpp"),              File("Serializer/PayloadSerializers/UnitTest/MIXParticipantSerializerTest.cpp"),              File("Serializer/PayloadSerializers/UnitTest/MIXSetNickSerializerTest.cpp"), +            File("Serializer/PayloadSerializers/UnitTest/MIXRegisterNickSerializerTest.cpp"),              File("Serializer/PayloadSerializers/UnitTest/MIXDestroySerializerTest.cpp"),              File("Serializer/PayloadSerializers/UnitTest/MIXCreateSerializerTest.cpp"),              File("Serializer/PayloadSerializers/UnitTest/MIXPayloadSerializerTest.cpp"), diff --git a/Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.cpp b/Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.cpp index 7f76b31..d1b2e97 100644 --- a/Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.cpp +++ b/Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.cpp @@ -48,6 +48,7 @@  #include <Swiften/Serializer/PayloadSerializers/MIXJoinSerializer.h>  #include <Swiften/Serializer/PayloadSerializers/MIXDestroySerializer.h>  #include <Swiften/Serializer/PayloadSerializers/MIXParticipantSerializer.h> +#include <Swiften/Serializer/PayloadSerializers/MIXRegisterNickSerializer.h>  #include <Swiften/Serializer/PayloadSerializers/MIXCreateSerializer.h>  #include <Swiften/Serializer/PayloadSerializers/MIXPayloadSerializer.h>  #include <Swiften/Serializer/PayloadSerializers/MIXSetNickSerializer.h> @@ -164,6 +165,7 @@ FullPayloadSerializerCollection::FullPayloadSerializerCollection() {      serializers_.push_back(new ForwardedSerializer(this));      serializers_.push_back(new MIXParticipantSerializer());      serializers_.push_back(new MIXCreateSerializer()); +    serializers_.push_back(new MIXRegisterNickSerializer());      serializers_.push_back(new MIXPayloadSerializer());      serializers_.push_back(new MIXSetNickSerializer());      serializers_.push_back(new MIXUserPreferenceSerializer()); diff --git a/Swiften/Serializer/PayloadSerializers/MIXRegisterNickSerializer.cpp b/Swiften/Serializer/PayloadSerializers/MIXRegisterNickSerializer.cpp new file mode 100644 index 0000000..9045ffe --- /dev/null +++ b/Swiften/Serializer/PayloadSerializers/MIXRegisterNickSerializer.cpp @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2017 Tarun Gupta + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +#include <Swiften/Serializer/PayloadSerializers/MIXRegisterNickSerializer.h> + +#include <memory> + +#include <Swiften/Serializer/XML/XMLElement.h> +#include <Swiften/Serializer/XML/XMLTextNode.h> + +namespace Swift { + +MIXRegisterNickSerializer::MIXRegisterNickSerializer() : GenericPayloadSerializer<MIXRegisterNick>() { +} + +std::string MIXRegisterNickSerializer::serializePayload(std::shared_ptr<MIXRegisterNick> payload)  const { +    XMLElement registernickElement("register", "urn:xmpp:mix:0"); + +    auto nickElement = std::make_shared<XMLElement>("nick"); +    nickElement->addNode(std::make_shared<XMLTextNode>(payload->getNick())); +    registernickElement.addNode(nickElement); + +    return registernickElement.serialize(); +} + +} diff --git a/Swiften/Serializer/PayloadSerializers/MIXRegisterNickSerializer.h b/Swiften/Serializer/PayloadSerializers/MIXRegisterNickSerializer.h new file mode 100644 index 0000000..011fb18 --- /dev/null +++ b/Swiften/Serializer/PayloadSerializers/MIXRegisterNickSerializer.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2017 Tarun Gupta + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +#pragma once + +#include <Swiften/Base/API.h> +#include <Swiften/Elements/MIXRegisterNick.h> +#include <Swiften/Serializer/GenericPayloadSerializer.h> + +namespace Swift { +    class SWIFTEN_API MIXRegisterNickSerializer : public GenericPayloadSerializer<MIXRegisterNick> { +        public: +            MIXRegisterNickSerializer(); + +            virtual std::string serializePayload(std::shared_ptr<MIXRegisterNick> payload) const override; +    }; +} diff --git a/Swiften/Serializer/PayloadSerializers/UnitTest/MIXRegisterNickSerializerTest.cpp b/Swiften/Serializer/PayloadSerializers/UnitTest/MIXRegisterNickSerializerTest.cpp new file mode 100644 index 0000000..dc6cf0c --- /dev/null +++ b/Swiften/Serializer/PayloadSerializers/UnitTest/MIXRegisterNickSerializerTest.cpp @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2017 Tarun Gupta + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +#include <gtest/gtest.h> + +#include <Swiften/Serializer/PayloadSerializers/MIXRegisterNickSerializer.h> +#include <Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h> + +using namespace Swift; + +TEST(MIXRegisterNickSerializerTest, testSerializeNick) { +    MIXRegisterNickSerializer testling; + +    auto mix = std::shared_ptr<MIXRegisterNick>(new MIXRegisterNick()); +    mix->setNick(std::string("thirdwitch")); + +    std::string expectedResult = "<register xmlns=\"urn:xmpp:mix:0\"><nick>thirdwitch</nick></register>"; +    ASSERT_EQ(expectedResult, testling.serialize(mix)); +} | 
 Swift
 Swift