diff options
-rw-r--r-- | Swiften/IDN/SConscript | 6 | ||||
-rw-r--r-- | Swiften/IDN/UnitTest/StringPrepTest.cpp | 34 | ||||
-rw-r--r-- | Swiften/JID/JID.cpp | 9 | ||||
-rw-r--r-- | Swiften/JID/UnitTest/JIDTest.cpp | 7 |
4 files changed, 51 insertions, 5 deletions
diff --git a/Swiften/IDN/SConscript b/Swiften/IDN/SConscript index 7382578..99b35fd 100644 --- a/Swiften/IDN/SConscript +++ b/Swiften/IDN/SConscript @@ -1,4 +1,4 @@ -Import("swiften_env") +Import("swiften_env", "env") myenv = swiften_env.Clone() myenv.MergeFlags(swiften_env["LIBIDN_FLAGS"]) @@ -8,3 +8,7 @@ objects = myenv.SwiftenObject([ "IDNA.cpp", ]) swiften_env.Append(SWIFTEN_OBJECTS = [objects]) + +env.Append(UNITTEST_SOURCES = [ + File("UnitTest/StringPrepTest.cpp"), + ]) diff --git a/Swiften/IDN/UnitTest/StringPrepTest.cpp b/Swiften/IDN/UnitTest/StringPrepTest.cpp new file mode 100644 index 0000000..beab01e --- /dev/null +++ b/Swiften/IDN/UnitTest/StringPrepTest.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <cppunit/extensions/HelperMacros.h> +#include <cppunit/extensions/TestFactoryRegistry.h> + +#include "Swiften/IDN/StringPrep.h" + +using namespace Swift; + +class StringPrepTest : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(StringPrepTest); + CPPUNIT_TEST(testStringPrep); + CPPUNIT_TEST(testStringPrep_Empty); + CPPUNIT_TEST_SUITE_END(); + + public: + void testStringPrep() { + std::string result = StringPrep::getPrepared("tron\xc3\x87on", StringPrep::NamePrep); + + CPPUNIT_ASSERT_EQUAL(std::string("tron\xc3\xa7on"), result); + } + + void testStringPrep_Empty() { + CPPUNIT_ASSERT_EQUAL(std::string(""), StringPrep::getPrepared("", StringPrep::NamePrep)); + CPPUNIT_ASSERT_EQUAL(std::string(""), StringPrep::getPrepared("", StringPrep::XMPPNodePrep)); + CPPUNIT_ASSERT_EQUAL(std::string(""), StringPrep::getPrepared("", StringPrep::XMPPResourcePrep)); + } +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(StringPrepTest); diff --git a/Swiften/JID/JID.cpp b/Swiften/JID/JID.cpp index 653ac6a..66d6ff6 100644 --- a/Swiften/JID/JID.cpp +++ b/Swiften/JID/JID.cpp @@ -173,10 +173,6 @@ void JID::nameprepAndSetComponents(const std::string& node, const std::string& d r.first->second = StringPrep::getPrepared(domain, StringPrep::XMPPNodePrep); } domain_ = r.first->second; - if (domain_.empty()) { - valid_ = false; - return; - } r = resourcePrepCache.insert(std::make_pair(resource, std::string())); if (r.second) { @@ -184,6 +180,11 @@ void JID::nameprepAndSetComponents(const std::string& node, const std::string& d } resource_ = r.first->second; #endif + + if (domain_.empty()) { + valid_ = false; + return; + } } catch (const std::exception&) { valid_ = false; diff --git a/Swiften/JID/UnitTest/JIDTest.cpp b/Swiften/JID/UnitTest/JIDTest.cpp index cd21d03..81d24ea 100644 --- a/Swiften/JID/UnitTest/JIDTest.cpp +++ b/Swiften/JID/UnitTest/JIDTest.cpp @@ -25,6 +25,7 @@ class JIDTest : public CppUnit::TestFixture CPPUNIT_TEST(testConstructorWithString_EmptyNode); CPPUNIT_TEST(testConstructorWithString_IllegalResource); CPPUNIT_TEST(testConstructorWithStrings); + CPPUNIT_TEST(testConstructorWithStrings_EmptyDomain); CPPUNIT_TEST(testIsBare); CPPUNIT_TEST(testIsBare_NotBare); CPPUNIT_TEST(testToBare); @@ -144,6 +145,12 @@ class JIDTest : public CppUnit::TestFixture CPPUNIT_ASSERT_EQUAL(std::string("baz"), testling.getResource()); } + void testConstructorWithStrings_EmptyDomain() { + JID testling("foo", "", "baz"); + + CPPUNIT_ASSERT(!testling.isValid()); + } + void testIsBare() { CPPUNIT_ASSERT(JID("foo@bar").isBare()); } |