diff options
Diffstat (limited to 'Swiften/Presence/UnitTest/PresenceOracleTest.cpp')
| -rw-r--r-- | Swiften/Presence/UnitTest/PresenceOracleTest.cpp | 63 |
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; |
Swift