diff options
author | Remko Tronçon <git@el-tramo.be> | 2012-09-17 11:52:40 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2012-09-17 18:01:27 (GMT) |
commit | d1aaf7fc9b9da32f04f84eef06bc0ee731e79223 (patch) | |
tree | 14ecd64cfd4b44e2664170983a5a0fefc47a03fd /Swiften/Base | |
parent | 3d6aa3b50090c19b50ae488494f1459bade88da3 (diff) | |
download | swift-d1aaf7fc9b9da32f04f84eef06bc0ee731e79223.zip swift-d1aaf7fc9b9da32f04f84eef06bc0ee731e79223.tar.bz2 |
Fixed URL parsing/serializing.
Resolves: #1157,#1158
Diffstat (limited to 'Swiften/Base')
-rw-r--r-- | Swiften/Base/URL.cpp | 22 | ||||
-rw-r--r-- | Swiften/Base/URL.h | 22 | ||||
-rw-r--r-- | Swiften/Base/UnitTest/URLTest.cpp | 10 |
3 files changed, 33 insertions, 21 deletions
diff --git a/Swiften/Base/URL.cpp b/Swiften/Base/URL.cpp index c36863f..28fe6d3 100644 --- a/Swiften/Base/URL.cpp +++ b/Swiften/Base/URL.cpp @@ -87,6 +87,28 @@ URL URL::fromString(const std::string& urlString) { } } +// FIXME: Escape non-ascii characters +std::string URL::toString() const { + if (empty) { + return ""; + } + std::string result = scheme + "://"; + if (!user.empty()) { + result += user; + if (!password.empty()) { + result += ":" + password; + } + result += "@"; + } + result += host; + if (port) { + result += ":"; + result += boost::lexical_cast<std::string>(*port); + } + result += path; + return result; +} + // Disabling this code for now, since GCC4.5+boost1.42 (on ubuntu) seems to // result in a bug. Replacing it with naive code. #if 0 diff --git a/Swiften/Base/URL.h b/Swiften/Base/URL.h index 00d58f1..75cf1a6 100644 --- a/Swiften/Base/URL.h +++ b/Swiften/Base/URL.h @@ -60,27 +60,7 @@ class SWIFTEN_API URL { return path; } - const std::string toString() const { - if (empty) { - return ""; - } - std::string result = scheme + "://"; - if (!user.empty()) { - result += user; - if (!password.empty()) { - result += ":" + password; - } - result += "@"; - } - result += host; - if (port > 0) { - result += ":"; - result += boost::lexical_cast<std::string>(port); - } - result += "/"; - result += path; - return result; - } + std::string toString() const; static int getPortOrDefaultPort(const URL& url); static URL fromString(const std::string&); diff --git a/Swiften/Base/UnitTest/URLTest.cpp b/Swiften/Base/UnitTest/URLTest.cpp index 4de1d33..55c81f6 100644 --- a/Swiften/Base/UnitTest/URLTest.cpp +++ b/Swiften/Base/UnitTest/URLTest.cpp @@ -21,6 +21,8 @@ class URLTest : public CppUnit::TestFixture { CPPUNIT_TEST(testFromString_WithUserInfo); CPPUNIT_TEST(testFromString_NonASCIIHost); CPPUNIT_TEST(testFromString_NonASCIIPath); + CPPUNIT_TEST(testToString); + CPPUNIT_TEST(testToString_WithPort); CPPUNIT_TEST_SUITE_END(); public: @@ -79,6 +81,14 @@ class URLTest : public CppUnit::TestFixture { CPPUNIT_ASSERT_EQUAL(std::string("/baz/tron\xc3\xa7on/bam"), url.getPath()); } + + void testToString() { + CPPUNIT_ASSERT_EQUAL(std::string("http://foo.bar/baz/bam"), URL("http", "foo.bar", "/baz/bam").toString()); + } + + void testToString_WithPort() { + CPPUNIT_ASSERT_EQUAL(std::string("http://foo.bar:1234/baz/bam"), URL("http", "foo.bar", 1234, "/baz/bam").toString()); + } }; CPPUNIT_TEST_SUITE_REGISTRATION(URLTest); |