summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Presence/UnitTest/PresenceOracleTest.cpp')
-rw-r--r--Swiften/Presence/UnitTest/PresenceOracleTest.cpp63
1 files changed, 54 insertions, 9 deletions
diff --git a/Swiften/Presence/UnitTest/PresenceOracleTest.cpp b/Swiften/Presence/UnitTest/PresenceOracleTest.cpp
index 85dcca9..6d16d80 100644
--- a/Swiften/Presence/UnitTest/PresenceOracleTest.cpp
+++ b/Swiften/Presence/UnitTest/PresenceOracleTest.cpp
@@ -26,10 +26,11 @@ class PresenceOracleTest : public CppUnit::TestFixture {
26 CPPUNIT_TEST(testReconnectResetsPresences); 26 CPPUNIT_TEST(testReconnectResetsPresences);
27 CPPUNIT_TEST(testHighestPresenceSingle); 27 CPPUNIT_TEST(testHighestPresenceSingle);
28 CPPUNIT_TEST(testHighestPresenceMultiple); 28 CPPUNIT_TEST(testHighestPresenceMultiple);
29 CPPUNIT_TEST(testHighestPresenceGlobal); 29 CPPUNIT_TEST(testHighestPresenceGlobal);
30 CPPUNIT_TEST(testHighestPresenceChangePriority); 30 CPPUNIT_TEST(testHighestPresenceChangePriority);
31 CPPUNIT_TEST(testGetActivePresence);
31 CPPUNIT_TEST_SUITE_END(); 32 CPPUNIT_TEST_SUITE_END();
32 33
33 public: 34 public:
34 void setUp() { 35 void setUp() {
35 stanzaChannel_ = new DummyStanzaChannel(); 36 stanzaChannel_ = new DummyStanzaChannel();
@@ -50,19 +51,19 @@ class PresenceOracleTest : public CppUnit::TestFixture {
50 delete xmppRoster_; 51 delete xmppRoster_;
51 delete stanzaChannel_; 52 delete stanzaChannel_;
52 } 53 }
53 54
54 void testHighestPresenceSingle() { 55 void testHighestPresenceSingle() {
55 JID bareJID("alice@wonderland.lit"); 56 JID bareJID("alice@wonderland.lit");
56 Presence::ref fiveOn = makeOnline("blah", 5); 57 Presence::ref fiveOn = makeOnline("blah", 5);
57 Presence::ref fiveOff = makeOffline("/blah"); 58 Presence::ref fiveOff = makeOffline("/blah");
58 CPPUNIT_ASSERT_EQUAL(Presence::ref(), oracle_->getHighestPriorityPresence(bareJID)); 59 CPPUNIT_ASSERT_EQUAL(Presence::ref(), oracle_->getHighestPriorityPresence(bareJID));
59 stanzaChannel_->onPresenceReceived(fiveOn); 60 stanzaChannel_->onPresenceReceived(fiveOn);
60 CPPUNIT_ASSERT_EQUAL(fiveOn, oracle_->getHighestPriorityPresence(bareJID)); 61 CPPUNIT_ASSERT_EQUAL(fiveOn, oracle_->getHighestPriorityPresence(bareJID));
61 stanzaChannel_->onPresenceReceived(fiveOff); 62 stanzaChannel_->onPresenceReceived(fiveOff);
62 CPPUNIT_ASSERT_EQUAL(fiveOff, oracle_->getHighestPriorityPresence(bareJID)); 63 CPPUNIT_ASSERT_EQUAL(fiveOff, oracle_->getHighestPriorityPresence(bareJID));
63 } 64 }
64 65
65 void testHighestPresenceMultiple() { 66 void testHighestPresenceMultiple() {
66 JID bareJID("alice@wonderland.lit"); 67 JID bareJID("alice@wonderland.lit");
67 Presence::ref fiveOn = makeOnline("blah", 5); 68 Presence::ref fiveOn = makeOnline("blah", 5);
68 Presence::ref fiveOff = makeOffline("/blah"); 69 Presence::ref fiveOff = makeOffline("/blah");
@@ -149,12 +150,56 @@ class PresenceOracleTest : public CppUnit::TestFixture {
149 stanzaChannel_->setAvailable(false); 150 stanzaChannel_->setAvailable(false);
150 stanzaChannel_->setAvailable(true); 151 stanzaChannel_->setAvailable(true);
151 152
152 CPPUNIT_ASSERT(!oracle_->getLastPresence(user1)); 153 CPPUNIT_ASSERT(!oracle_->getLastPresence(user1));
153 } 154 }
155
156 void testGetActivePresence() {
157 {
158 std::vector<Presence::ref> presenceList;
159 presenceList.push_back(createPresence("alice@wonderland.lit/resourceA", 10, Presence::Available, StatusShow::Away));
160 presenceList.push_back(createPresence("alice@wonderland.lit/resourceB", 5, Presence::Available, StatusShow::Online));
161
162 CPPUNIT_ASSERT_EQUAL(StatusShow::Online, PresenceOracle::getActivePresence(presenceList)->getShow());
163 }
164
165 {
166 std::vector<Presence::ref> presenceList;
167 presenceList.push_back(createPresence("alice@wonderland.lit/resourceA", 10, Presence::Available, StatusShow::Away));
168 presenceList.push_back(createPresence("alice@wonderland.lit/resourceB", 5, Presence::Available, StatusShow::DND));
169
170 CPPUNIT_ASSERT_EQUAL(StatusShow::DND, PresenceOracle::getActivePresence(presenceList)->getShow());
171 }
172
173 {
174 std::vector<Presence::ref> presenceList;
175 presenceList.push_back(createPresence("alice@wonderland.lit/resourceA", 0, Presence::Available, StatusShow::Online));
176 presenceList.push_back(createPresence("alice@wonderland.lit/resourceB", 0, Presence::Available, StatusShow::DND));
177
178 CPPUNIT_ASSERT_EQUAL(StatusShow::Online, PresenceOracle::getActivePresence(presenceList)->getShow());
179 }
180
181 {
182 std::vector<Presence::ref> presenceList;
183 presenceList.push_back(createPresence("alice@wonderland.lit/resourceA", 1, Presence::Available, StatusShow::Online));
184 presenceList.push_back(createPresence("alice@wonderland.lit/resourceB", 0, Presence::Available, StatusShow::Online));
185
186 CPPUNIT_ASSERT_EQUAL(JID("alice@wonderland.lit/resourceA"), PresenceOracle::getActivePresence(presenceList)->getFrom());
187 }
188 }
154 189
155 private: 190 private:
191 Presence::ref createPresence(const JID &jid, int priority, Presence::Type type, const StatusShow::Type& statusShow) {
192 Presence::ref presence = boost::make_shared<Presence>();
193 presence->setFrom(jid);
194 presence->setPriority(priority);
195 presence->setType(type);
196 presence->setShow(statusShow);
197 return presence;
198 }
199
200
156 Presence::ref makeOnline(const std::string& resource, int priority) { 201 Presence::ref makeOnline(const std::string& resource, int priority) {
157 Presence::ref presence(new Presence()); 202 Presence::ref presence(new Presence());
158 presence->setPriority(priority); 203 presence->setPriority(priority);
159 presence->setFrom(JID("alice@wonderland.lit/" + resource)); 204 presence->setFrom(JID("alice@wonderland.lit/" + resource));
160 return presence; 205 return presence;