diff options
author | Remko Tronçon <git@el-tramo.be> | 2011-09-14 20:31:36 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2011-09-14 20:31:36 (GMT) |
commit | 2535c1d383fa16d02d547090bd2e64b79c3a24c8 (patch) | |
tree | 5d89749d4786e7049972a69ec1b7df79cbe8a878 | |
parent | 83b526c1580a0a4effa01b5ffb710d7dfaea1e55 (diff) | |
download | swift-contrib-2535c1d383fa16d02d547090bd2e64b79c3a24c8.zip swift-contrib-2535c1d383fa16d02d547090bd2e64b79c3a24c8.tar.bz2 |
Added reset() to PayloadAddingPresenceSender.
-rw-r--r-- | Swiften/Presence/PayloadAddingPresenceSender.cpp | 4 | ||||
-rw-r--r-- | Swiften/Presence/PayloadAddingPresenceSender.h | 10 | ||||
-rw-r--r-- | Swiften/Presence/UnitTest/PayloadAddingPresenceSenderTest.cpp | 13 |
3 files changed, 26 insertions, 1 deletions
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 @@ -35,10 +35,14 @@ bool PayloadAddingPresenceSender::isAvailable() const { } void PayloadAddingPresenceSender::setPayload(boost::shared_ptr<Payload> payload) { this->payload = payload; if (lastSentPresence) { sendPresence(lastSentPresence); } } +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 @@ -22,19 +22,27 @@ namespace Swift { PayloadAddingPresenceSender(PresenceSender*); void sendPresence(boost::shared_ptr<Presence>); bool isAvailable() const; /** * 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<Payload>); + /** + * 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<Presence> lastSentPresence; PresenceSender* sender; boost::shared_ptr<Payload> payload; }; } 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 @@ -17,18 +17,19 @@ 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(testSetPayloadAfterResetDoesNotResendPresence); CPPUNIT_TEST(testSendDirectedPresenceIsNotResent); CPPUNIT_TEST_SUITE_END(); public: void setUp() { stanzaChannel = new DummyStanzaChannel(); presenceSender = new StanzaChannelPresenceSender(stanzaChannel); } @@ -77,24 +78,36 @@ class PayloadAddingPresenceSenderTest : public CppUnit::TestFixture { CPPUNIT_ASSERT_EQUAL(2, static_cast<int>(stanzaChannel->sentStanzas.size())); CPPUNIT_ASSERT_EQUAL(std::string("bar"), stanzaChannel->getStanzaAtIndex<Presence>(1)->getStatus()); CPPUNIT_ASSERT(stanzaChannel->getStanzaAtIndex<Presence>(1)->getPayload<MyPayload>()); } void testSetPayloadAfterUnavailablePresenceDoesNotResendPresence() { boost::shared_ptr<PayloadAddingPresenceSender> 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<int>(stanzaChannel->sentStanzas.size())); + } + + void testSetPayloadAfterResetDoesNotResendPresence() { + boost::shared_ptr<PayloadAddingPresenceSender> testling(createSender()); + testling->sendPresence(Presence::create("bar")); + + testling->reset(); + testling->setPayload(MyPayload::create("foo")); + CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(stanzaChannel->sentStanzas.size())); } void testSendDirectedPresenceIsNotResent() { boost::shared_ptr<PayloadAddingPresenceSender> testling(createSender()); testling->sendPresence(Presence::create("bar")); Presence::ref directedPresence = Presence::create("baz"); directedPresence->setTo(JID("foo@bar.com")); |