summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2011-09-14 20:31:36 (GMT)
committerRemko Tronçon <git@el-tramo.be>2011-09-14 20:31:36 (GMT)
commit2535c1d383fa16d02d547090bd2e64b79c3a24c8 (patch)
tree5d89749d4786e7049972a69ec1b7df79cbe8a878
parent83b526c1580a0a4effa01b5ffb710d7dfaea1e55 (diff)
downloadswift-contrib-2535c1d383fa16d02d547090bd2e64b79c3a24c8.zip
swift-contrib-2535c1d383fa16d02d547090bd2e64b79c3a24c8.tar.bz2
Added reset() to PayloadAddingPresenceSender.
-rw-r--r--Swiften/Presence/PayloadAddingPresenceSender.cpp4
-rw-r--r--Swiften/Presence/PayloadAddingPresenceSender.h10
-rw-r--r--Swiften/Presence/UnitTest/PayloadAddingPresenceSenderTest.cpp13
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"));