diff options
author | Remko Tronçon <git@el-tramo.be> | 2010-10-23 21:08:19 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2010-11-03 12:17:40 (GMT) |
commit | 9d9fb66aefef85a1c5ad432391014d15011747d1 (patch) | |
tree | 55b1ebe7dcb0108008a28ebf8fee773b27e60547 /Swiften/Presence/UnitTest | |
parent | d509598b0f0edf5e103caedbab8662edc834445e (diff) | |
download | swift-contrib-9d9fb66aefef85a1c5ad432391014d15011747d1.zip swift-contrib-9d9fb66aefef85a1c5ad432391014d15011747d1.tar.bz2 |
Added ClientDiscoManager.
Diffstat (limited to 'Swiften/Presence/UnitTest')
-rw-r--r-- | Swiften/Presence/UnitTest/PayloadAddingPresenceSenderTest.cpp | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/Swiften/Presence/UnitTest/PayloadAddingPresenceSenderTest.cpp b/Swiften/Presence/UnitTest/PayloadAddingPresenceSenderTest.cpp new file mode 100644 index 0000000..3a6487a --- /dev/null +++ b/Swiften/Presence/UnitTest/PayloadAddingPresenceSenderTest.cpp @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2010 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 <vector> +#include <boost/bind.hpp> + +#include "Swiften/Presence/PayloadAddingPresenceSender.h" +#include "Swiften/Presence/StanzaChannelPresenceSender.h" +#include "Swiften/Elements/Body.h" +#include "Swiften/Client/DummyStanzaChannel.h" + +using namespace Swift; + +class PayloadAddingPresenceSenderTest : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(PayloadAddingPresenceSenderTest); + CPPUNIT_TEST(testSetPayloadAddsPayloadOnPresenceSend); + CPPUNIT_TEST(testSetNullPayloadDoesNotAddPayloadOnPresenceSend); + CPPUNIT_TEST(testSendPresenceDoesNotAlterOriginalPayload); + CPPUNIT_TEST(testSetPayloadAfterInitialPresenceResendsPresence); + CPPUNIT_TEST(testSetPayloadAfterUnavailablePresenceDoesNotResendPresence); + CPPUNIT_TEST(testSendDirectedPresenceIsNotResent); + CPPUNIT_TEST_SUITE_END(); + + public: + void setUp() { + stanzaChannel = new DummyStanzaChannel(); + presenceSender = new StanzaChannelPresenceSender(stanzaChannel); + } + + void tearDown() { + delete presenceSender; + delete stanzaChannel; + } + + void testSetPayloadAddsPayloadOnPresenceSend() { + std::auto_ptr<PayloadAddingPresenceSender> testling(createSender()); + + testling->setPayload(MyPayload::create("foo")); + testling->sendPresence(Presence::create("bar")); + + CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(stanzaChannel->sentStanzas.size())); + CPPUNIT_ASSERT_EQUAL(String("bar"), stanzaChannel->getStanzaAtIndex<Presence>(0)->getStatus()); + CPPUNIT_ASSERT(stanzaChannel->getStanzaAtIndex<Presence>(0)->getPayload<MyPayload>()); + } + + void testSetNullPayloadDoesNotAddPayloadOnPresenceSend() { + std::auto_ptr<PayloadAddingPresenceSender> testling(createSender()); + + testling->setPayload(MyPayload::ref()); + testling->sendPresence(Presence::create("bar")); + + CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(stanzaChannel->sentStanzas.size())); + CPPUNIT_ASSERT_EQUAL(String("bar"), stanzaChannel->getStanzaAtIndex<Presence>(0)->getStatus()); + CPPUNIT_ASSERT(!stanzaChannel->getStanzaAtIndex<Presence>(0)->getPayload<MyPayload>()); + } + + void testSendPresenceDoesNotAlterOriginalPayload() { + std::auto_ptr<PayloadAddingPresenceSender> testling(createSender()); + + testling->setPayload(MyPayload::create("foo")); + Presence::ref presence(Presence::create("bar")); + testling->sendPresence(presence); + + CPPUNIT_ASSERT(!presence->getPayload<MyPayload>()); + } + + void testSetPayloadAfterInitialPresenceResendsPresence() { + std::auto_ptr<PayloadAddingPresenceSender> testling(createSender()); + + testling->sendPresence(Presence::create("bar")); + testling->setPayload(MyPayload::create("foo")); + + CPPUNIT_ASSERT_EQUAL(2, static_cast<int>(stanzaChannel->sentStanzas.size())); + CPPUNIT_ASSERT_EQUAL(String("bar"), stanzaChannel->getStanzaAtIndex<Presence>(1)->getStatus()); + CPPUNIT_ASSERT(stanzaChannel->getStanzaAtIndex<Presence>(1)->getPayload<MyPayload>()); + } + + void testSetPayloadAfterUnavailablePresenceDoesNotResendPresence() { + std::auto_ptr<PayloadAddingPresenceSender> testling(createSender()); + + Presence::ref presence = Presence::create("bar"); + presence->setType(Presence::Unavailable); + testling->sendPresence(presence); + + testling->setPayload(MyPayload::create("foo")); + + CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(stanzaChannel->sentStanzas.size())); + } + + void testSendDirectedPresenceIsNotResent() { + std::auto_ptr<PayloadAddingPresenceSender> testling(createSender()); + + testling->sendPresence(Presence::create("bar")); + Presence::ref directedPresence = Presence::create("baz"); + directedPresence->setTo(JID("foo@bar.com")); + testling->sendPresence(directedPresence); + testling->setPayload(MyPayload::create("foo")); + + CPPUNIT_ASSERT_EQUAL(3, static_cast<int>(stanzaChannel->sentStanzas.size())); + CPPUNIT_ASSERT_EQUAL(String("bar"), stanzaChannel->getStanzaAtIndex<Presence>(2)->getStatus()); + } + + private: + std::auto_ptr<PayloadAddingPresenceSender> createSender() { + std::auto_ptr<PayloadAddingPresenceSender> sender(new PayloadAddingPresenceSender(presenceSender)); + return sender; + } + + struct MyPayload : public Payload { + typedef boost::shared_ptr<MyPayload> ref; + + MyPayload(const String& body) : body(body) {} + + static ref create(const String& body) { + return ref(new MyPayload(body)); + } + + String body; + }; + + private: + DummyStanzaChannel* stanzaChannel; + StanzaChannelPresenceSender* presenceSender; +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(PayloadAddingPresenceSenderTest); |