From 2535c1d383fa16d02d547090bd2e64b79c3a24c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Remko=20Tron=C3=A7on?= Date: Wed, 14 Sep 2011 22:31:36 +0200 Subject: Added reset() to PayloadAddingPresenceSender. diff --git a/Swiften/Presence/PayloadAddingPresenceSender.cpp b/Swiften/Presence/PayloadAddingPresenceSender.cpp index 1ece32a..5e8cd81 100644 --- a/Swiften/Presence/PayloadAddingPresenceSender.cpp +++ b/Swiften/Presence/PayloadAddingPresenceSender.cpp @@ -41,4 +41,8 @@ void PayloadAddingPresenceSender::setPayload(boost::shared_ptr payload) } } +void PayloadAddingPresenceSender::reset() { + lastSentPresence.reset(); +} + } diff --git a/Swiften/Presence/PayloadAddingPresenceSender.h b/Swiften/Presence/PayloadAddingPresenceSender.h index ddd460e..333842a 100644 --- a/Swiften/Presence/PayloadAddingPresenceSender.h +++ b/Swiften/Presence/PayloadAddingPresenceSender.h @@ -28,10 +28,18 @@ namespace Swift { * Sets the payload to be added to outgoing presences. * If initial presence has been sent, this will resend the last sent presence * with an updated payload. Initial presence is reset when unavailable presence is - * sent. + * sent, or when reset() is called. */ void setPayload(boost::shared_ptr); + /** + * Resets the presence sender. + * This puts the presence sender back in the initial state (before initial + * presence has been sent). + * This also resets the chained sender. + */ + void reset(); + private: boost::shared_ptr lastSentPresence; PresenceSender* sender; diff --git a/Swiften/Presence/UnitTest/PayloadAddingPresenceSenderTest.cpp b/Swiften/Presence/UnitTest/PayloadAddingPresenceSenderTest.cpp index 0dd6f74..3a6ab31 100644 --- a/Swiften/Presence/UnitTest/PayloadAddingPresenceSenderTest.cpp +++ b/Swiften/Presence/UnitTest/PayloadAddingPresenceSenderTest.cpp @@ -23,6 +23,7 @@ class PayloadAddingPresenceSenderTest : public CppUnit::TestFixture { CPPUNIT_TEST(testSendPresenceDoesNotAlterOriginalPayload); CPPUNIT_TEST(testSetPayloadAfterInitialPresenceResendsPresence); CPPUNIT_TEST(testSetPayloadAfterUnavailablePresenceDoesNotResendPresence); + CPPUNIT_TEST(testSetPayloadAfterResetDoesNotResendPresence); CPPUNIT_TEST(testSendDirectedPresenceIsNotResent); CPPUNIT_TEST_SUITE_END(); @@ -83,12 +84,24 @@ class PayloadAddingPresenceSenderTest : public CppUnit::TestFixture { void testSetPayloadAfterUnavailablePresenceDoesNotResendPresence() { boost::shared_ptr testling(createSender()); + testling->sendPresence(Presence::create("bar")); + Presence::ref presence = Presence::create("bar"); presence->setType(Presence::Unavailable); testling->sendPresence(presence); testling->setPayload(MyPayload::create("foo")); + CPPUNIT_ASSERT_EQUAL(2, static_cast(stanzaChannel->sentStanzas.size())); + } + + void testSetPayloadAfterResetDoesNotResendPresence() { + boost::shared_ptr testling(createSender()); + testling->sendPresence(Presence::create("bar")); + + testling->reset(); + testling->setPayload(MyPayload::create("foo")); + CPPUNIT_ASSERT_EQUAL(1, static_cast(stanzaChannel->sentStanzas.size())); } -- cgit v0.10.2-6-g49f6