summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2010-06-07 20:29:38 (GMT)
committerKevin Smith <git@kismith.co.uk>2010-06-07 20:29:38 (GMT)
commit49d27079117c6b2763ff7c582815bc2a7b083a7f (patch)
treea6bec2820d9e205585b5d4b7d3765653b2227a3b /Swift/Controllers
parentcca06e56679065f4b166a72623da36ddf598366e (diff)
downloadswift-49d27079117c6b2763ff7c582815bc2a7b083a7f.zip
swift-49d27079117c6b2763ff7c582815bc2a7b083a7f.tar.bz2
Don't resolve Nick for a bare MUC JID as an empty string.
Resolves: #435
Diffstat (limited to 'Swift/Controllers')
-rw-r--r--Swift/Controllers/NickResolver.cpp2
-rw-r--r--Swift/Controllers/UnitTest/MockMUCRegistry.h24
-rw-r--r--Swift/Controllers/UnitTest/NickResolverTest.cpp27
3 files changed, 52 insertions, 1 deletions
diff --git a/Swift/Controllers/NickResolver.cpp b/Swift/Controllers/NickResolver.cpp
index ed2c8df..29ff51b 100644
--- a/Swift/Controllers/NickResolver.cpp
+++ b/Swift/Controllers/NickResolver.cpp
@@ -26,7 +26,7 @@ String NickResolver::jidToNick(const JID& jid) {
String nick;
if (mucRegistry_ && mucRegistry_->isMUC(jid.toBare()) ) {
- return jid.getResource();
+ return jid.getResource().isEmpty() ? jid.toBare().toString() : jid.getResource();
}
if (xmppRoster_->containsJID(jid) && !xmppRoster_->getNameForJID(jid).isEmpty()) {
diff --git a/Swift/Controllers/UnitTest/MockMUCRegistry.h b/Swift/Controllers/UnitTest/MockMUCRegistry.h
new file mode 100644
index 0000000..fdda8e1
--- /dev/null
+++ b/Swift/Controllers/UnitTest/MockMUCRegistry.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include "Swiften/MUC/MUCRegistry.h"
+
+namespace Swift {
+ class JID;
+
+ class MockMUCRegistry : public MUCRegistry {
+ public:
+ virtual ~MockMUCRegistry() {};
+
+ void setNext(bool next) {next_ = next;}
+ virtual bool isMUC(const JID&) const {return next_;}
+
+ private:
+ bool next_;
+ };
+}
diff --git a/Swift/Controllers/UnitTest/NickResolverTest.cpp b/Swift/Controllers/UnitTest/NickResolverTest.cpp
index 997723f..913bdcc 100644
--- a/Swift/Controllers/UnitTest/NickResolverTest.cpp
+++ b/Swift/Controllers/UnitTest/NickResolverTest.cpp
@@ -8,6 +8,7 @@
#include <cppunit/extensions/TestFactoryRegistry.h>
#include "Swift/Controllers/NickResolver.h"
+#include "Swift/Controllers/UnitTest/MockMUCRegistry.h"
#include "Swiften/Roster/XMPPRoster.h"
using namespace Swift;
@@ -20,6 +21,9 @@ class NickResolverTest : public CppUnit::TestFixture
CPPUNIT_TEST(testMatch);
CPPUNIT_TEST(testOverwrittenMatch);
CPPUNIT_TEST(testRemovedMatch);
+ CPPUNIT_TEST(testMUCNick);
+ CPPUNIT_TEST(testMUCNoNick);
+ CPPUNIT_TEST(testRemovedMatch);
CPPUNIT_TEST_SUITE_END();
std::vector<String> groups_;
@@ -27,6 +31,29 @@ class NickResolverTest : public CppUnit::TestFixture
public:
NickResolverTest() {}
+ void testMUCNick() {
+ boost::shared_ptr<XMPPRoster> xmppRoster(new XMPPRoster());
+ NickResolver resolver(xmppRoster);
+ MockMUCRegistry registry;
+ resolver.setMUCRegistry(&registry);
+ registry.setNext(true);
+ JID testJID("foo@bar/baz");
+
+ CPPUNIT_ASSERT_EQUAL(String("baz"), resolver.jidToNick(testJID));
+ }
+
+ void testMUCNoNick() {
+ boost::shared_ptr<XMPPRoster> xmppRoster(new XMPPRoster());
+ NickResolver resolver(xmppRoster);
+ MockMUCRegistry registry;
+ resolver.setMUCRegistry(&registry);
+ registry.setNext(true);
+ JID testJID("foo@bar");
+
+ CPPUNIT_ASSERT_EQUAL(String("foo@bar"), resolver.jidToNick(testJID));
+ }
+
+
void testNoMatch() {
boost::shared_ptr<XMPPRoster> xmppRoster(new XMPPRoster());
NickResolver resolver(xmppRoster);