From 49d27079117c6b2763ff7c582815bc2a7b083a7f Mon Sep 17 00:00:00 2001 From: Kevin Smith Date: Mon, 7 Jun 2010 21:29:38 +0100 Subject: Don't resolve Nick for a bare MUC JID as an empty string. Resolves: #435 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 #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 groups_; @@ -27,6 +31,29 @@ class NickResolverTest : public CppUnit::TestFixture public: NickResolverTest() {} + void testMUCNick() { + boost::shared_ptr xmppRoster(new XMPPRoster()); + NickResolver resolver(xmppRoster); + MockMUCRegistry registry; + resolver.setMUCRegistry(®istry); + registry.setNext(true); + JID testJID("foo@bar/baz"); + + CPPUNIT_ASSERT_EQUAL(String("baz"), resolver.jidToNick(testJID)); + } + + void testMUCNoNick() { + boost::shared_ptr xmppRoster(new XMPPRoster()); + NickResolver resolver(xmppRoster); + MockMUCRegistry registry; + resolver.setMUCRegistry(®istry); + registry.setNext(true); + JID testJID("foo@bar"); + + CPPUNIT_ASSERT_EQUAL(String("foo@bar"), resolver.jidToNick(testJID)); + } + + void testNoMatch() { boost::shared_ptr xmppRoster(new XMPPRoster()); NickResolver resolver(xmppRoster); -- cgit v0.10.2-6-g49f6