[haiku-commits] haiku: hrev47303 - src/tests/kits/net/url build/jam

  • From: pulkomandy@xxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 3 Jun 2014 18:11:39 +0200 (CEST)

hrev47303 adds 5 changesets to branch 'master'
old head: 01fbdbab832e607c7923c886bd3ae850386e6ffc
new head: b2468f37f68f4a8e5e548bba18830706048e86ab
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=b2468f3+%5E01fbdba

----------------------------------------------------------------------------

5abe892: Remove deprecated file.

68c13f9: Convert BUrl tests to the UnitTester framework.

002f37b: Explicit template instanciation to please gcc2.
  
  Makes CPPUNIT_ASSERT_EQUAL useable.

0013f47: Import tests from http://skew.org/uri/uri%5Ftests.html
  
  This shows there are some problems with BUrl, still.
  CppUnit stops at the first failed assert in each test, which doesn't
  give a good overview of the number of failures in this case (the first
  subtest fails). A possible solution is splitting this into smaller
  subsets.

b2468f3: Add hybrid tiff packages.
  
  Should fix the build.

                             [ Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> ]

----------------------------------------------------------------------------

9 files changed, 544 insertions(+), 162 deletions(-)
build/jam/OptionalTestPackages                 |  41 --
build/jam/images/definitions/common-tail       |   1 -
build/jam/repositories/HaikuPorts/x86_gcc2     |   2 +
headers/tools/cppunit/cppunit/TestAssert.h     |   4 +-
src/tests/kits/net/url/Jamfile                 |   7 +-
src/tests/kits/net/url/ServiceKitTestAddon.cpp |  21 +
src/tests/kits/net/url/UrlTest.cpp             | 486 +++++++++++++++++++++
src/tests/kits/net/url/UrlTest.h               |  28 ++
src/tests/kits/net/url/url_test.cpp            | 116 -----

############################################################################

Commit:      5abe892c762f0c4fe542147615ba1b45742a974b
URL:         http://cgit.haiku-os.org/haiku/commit/?id=5abe892
Author:      Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
Date:        Tue Jun  3 11:17:23 2014 UTC

Remove deprecated file.

----------------------------------------------------------------------------

diff --git a/build/jam/OptionalTestPackages b/build/jam/OptionalTestPackages
deleted file mode 100644
index ec9c6c6..0000000
--- a/build/jam/OptionalTestPackages
+++ /dev/null
@@ -1,41 +0,0 @@
-# This file defines the optional packages containing tests of all kinds that 
can
-# be added to the Haiku image. It is directly included from HaikuImage -- all
-# variables defined there can be used
-
-# Available Optional Test Packages:
-#      libMicro
-
-
-# libMicro
-# TODO: Make this an actual package!
-# if [ IsOptionalHaikuImagePackageAdded libMicro ] {
-#      # add scripts, tattle executable and README
-#      SEARCH on <libmicro>bench <libmicro>multiview <libmicro>README
-#              = [ FDirName $(HAIKU_TOP) src tests system benchmarks libMicro 
] ;
-#
-#      AddFilesToHaikuImage home benchmarks libmicro
-#              : <libmicro>bench <libmicro>multiview <libmicro>README ;
-#      AddFilesToHaikuImage home benchmarks libmicro bin-BePC : tattle ;
-#
-#      # add libmicro benchmarks
-#      AddFilesToHaikuImage home benchmarks libmicro bin-BePC :
-#              atomic <libmicro>bind cachetocache cascade_cond cascade_fcntl
-#              cascade_flock cascade_lockf cascade_mutex chdir close close_tcp
-#              connection dup exec exec_bin exit exp fcntl fcntl_ndelay 
file_lock fork
-#              getcontext getenv <libmicro>getpeername getpid getrusage 
getsockname
-#              gettimeofday isatty listen localtime_r <libmicro>log longjmp 
lrand48
-#              lseek malloc memcpy memmove memrand memset mktime mmap mprotect 
msync
-#              munmap mutex nop <libmicro>open pipe poll pread pthread_create 
pwrite
-#              read realpath recurse select semop setcontext setsockopt 
sigaction
-#              siglongjmp signal sigprocmask <libmicro>socket socketpair 
<libmicro>stat
-#              strcasecmp strchr strcmp strcpy strftime strlen strtol system 
time times
-#              write writev ;
-#
-#      AddSymlinkToHaikuImage home benchmarks libmicro : bin-BePC : bin ;
-#
-#      AddOptionalPackageDescriptionToHaikuImage
-#              <libmicro>.OptionalPackageDescription
-#              : $(HAIKU_TOP) src tests system benchmarks libMicro ;
-#      AddLicenseToHaikuImage <libmicro>OPENSOLARIS.LICENSE : OpenSolaris
-#              : $(HAIKU_TOP) src tests system benchmarks libMicro ;
-# }
diff --git a/build/jam/images/definitions/common-tail 
b/build/jam/images/definitions/common-tail
index 5057b1a..0f18139 100644
--- a/build/jam/images/definitions/common-tail
+++ b/build/jam/images/definitions/common-tail
@@ -45,7 +45,6 @@ AddDirectoryToHaikuImage system var log ;
 
 
 include [ FDirName $(HAIKU_BUILD_RULES_DIR) OptionalPackages ] ;
-include [ FDirName $(HAIKU_BUILD_RULES_DIR) OptionalTestPackages ] ;
 
 
 #pragma mark - User/Group Setup

############################################################################

Commit:      68c13f94fb5f66309c084ea67dbd9db457470d55
URL:         http://cgit.haiku-os.org/haiku/commit/?id=68c13f9
Author:      Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
Date:        Tue Jun  3 11:33:27 2014 UTC

Convert BUrl tests to the UnitTester framework.

----------------------------------------------------------------------------

diff --git a/src/tests/kits/net/url/Jamfile b/src/tests/kits/net/url/Jamfile
index a5900b2..bb25e40 100644
--- a/src/tests/kits/net/url/Jamfile
+++ b/src/tests/kits/net/url/Jamfile
@@ -1,6 +1,9 @@
 SubDir HAIKU_TOP src tests kits net url ;
 
-Application url_test
-       : url_test.cpp
+UnitTestLib servicekittest.so :
+       ServiceKitTestAddon.cpp
+
+       UrlTest.cpp
+
        : be $(TARGET_NETWORK_LIBS) $(HAIKU_NETAPI_LIB) $(TARGET_LIBSTDC++)
        ;
diff --git a/src/tests/kits/net/url/ServiceKitTestAddon.cpp 
b/src/tests/kits/net/url/ServiceKitTestAddon.cpp
new file mode 100644
index 0000000..5b665bc
--- /dev/null
+++ b/src/tests/kits/net/url/ServiceKitTestAddon.cpp
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2014 Haiku, Inc.
+ * Distributed under the terms of the MIT License.
+ */
+
+
+#include <TestSuite.h>
+#include <TestSuiteAddon.h>
+
+#include "UrlTest.h"
+
+
+BTestSuite*
+getTestSuite()
+{
+       BTestSuite* suite = new BTestSuite("ServicesKit");
+
+       UrlTest::AddTests(*suite);
+
+       return suite;
+}
diff --git a/src/tests/kits/net/url/UrlTest.cpp 
b/src/tests/kits/net/url/UrlTest.cpp
new file mode 100644
index 0000000..87c427a
--- /dev/null
+++ b/src/tests/kits/net/url/UrlTest.cpp
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2010, Christophe Huriaux
+ * Copyright 2014, Haiku, inc.
+ * Distributed under the terms of the MIT licence
+ */
+
+
+#include "UrlTest.h"
+
+
+#include <cstdlib>
+#include <cstring>
+#include <cstdio>
+
+#include <NetworkKit.h>
+
+#include <cppunit/TestCaller.h>
+#include <cppunit/TestSuite.h>
+
+
+UrlTest::UrlTest()
+{
+}
+
+
+UrlTest::~UrlTest()
+{
+}
+
+
+// Test if rebuild url are the same length of parsed one
+void UrlTest::LengthTest()
+{
+       int8 testIndex;
+       BUrl testUrl;
+
+       const char* kTestLength[] =
+       {
+               "http://user:pass@xxxxxxxxxxx:80/path?query#fragment";,
+               "http://user:pass@xxxxxxxxxxx:80/path?query#";,
+               "http://user:pass@xxxxxxxxxxx:80/path?query";,
+               "http://user:pass@xxxxxxxxxxx:80/path?";,
+               "http://user:pass@xxxxxxxxxxx:80/path";,
+               "http://user:pass@xxxxxxxxxxx:80/";,
+               "http://user:pass@xxxxxxxxxxx";,
+               "http://user:pass@";,
+               "http://www.foo.com";,
+               "http://";,
+               "http:"
+       };
+
+       for (testIndex = 0; kTestLength[testIndex] != NULL; testIndex++)
+       {
+               NextSubTest();
+               testUrl.SetUrlString(kTestLength[testIndex]);
+
+               CPPUNIT_ASSERT(strlen(kTestLength[testIndex]) == 
strlen(testUrl.UrlString()));
+       }
+}
+
+typedef struct
+{
+       const char* url;
+
+       struct
+       {
+               const char* protocol;
+               const char* userName;
+               const char* password;
+               const char* host;
+               int16           port;
+               const char* path;
+               const char* request;
+               const char* fragment;
+       } expected;
+} ExplodeTest;
+
+
+const ExplodeTest      kTestExplode[] =
+       //  Url
+       //       Protocol     User  Password  Hostname  Port     Path    
Request      Fragment
+       //       -------- --------- --------- --------- ---- ---------- 
---------- ------------
+       {
+               { "http://user:pass@host:80/path?query#fragment";,
+                       { "http",   "user",   "pass",   "host",  80,   "/path", 
  "query",   "fragment" } },
+               { "http://www.host.tld/path?query#fragment";,
+                       { "http",   "",        "", "www.host.tld",0,   "/path", 
  "query",   "fragment" } }
+       };
+
+void UrlTest::ExplodeImplodeTest()
+{
+       uint8 testIndex;
+       BUrl testUrl;
+
+       for (testIndex = 0; testIndex < (sizeof(kTestExplode) / 
sizeof(ExplodeTest)); testIndex++)
+       {
+               NextSubTest();
+               testUrl.SetUrlString(kTestExplode[testIndex].url);
+
+               CPPUNIT_ASSERT(BString(kTestExplode[testIndex].url)
+                       == BString(testUrl.UrlString()));
+               
CPPUNIT_ASSERT(BString(kTestExplode[testIndex].expected.protocol)
+                       == BString(testUrl.Protocol()));
+               
CPPUNIT_ASSERT(BString(kTestExplode[testIndex].expected.userName)
+                       == BString(testUrl.UserName()));
+               
CPPUNIT_ASSERT(BString(kTestExplode[testIndex].expected.password)
+                       == BString(testUrl.Password()));
+               CPPUNIT_ASSERT(BString(kTestExplode[testIndex].expected.host)
+                       == BString(testUrl.Host()));
+               CPPUNIT_ASSERT(kTestExplode[testIndex].expected.port == 
testUrl.Port());
+               CPPUNIT_ASSERT(BString(kTestExplode[testIndex].expected.path)
+                       == BString(testUrl.Path()));
+               CPPUNIT_ASSERT(BString(kTestExplode[testIndex].expected.request)
+                       == BString(testUrl.Request()));
+               
CPPUNIT_ASSERT(BString(kTestExplode[testIndex].expected.fragment)
+                       == BString(testUrl.Fragment()));
+       }
+}
+
+
+void
+UrlTest::PathOnly()
+{
+       BUrl test = "lol";
+       CPPUNIT_ASSERT(test.HasPath());
+       CPPUNIT_ASSERT(test.Path() == "lol");
+       CPPUNIT_ASSERT(test.UrlString() == "lol");
+}
+
+
+/* static */ void
+UrlTest::AddTests(BTestSuite& parent)
+{
+       CppUnit::TestSuite& suite = *new CppUnit::TestSuite("UrlTest");
+
+       suite.addTest(new CppUnit::TestCaller<UrlTest>(
+               "UrlTest::LengthTest", &UrlTest::LengthTest));
+       suite.addTest(new CppUnit::TestCaller<UrlTest>(
+               "UrlTest::ExplodeImplodeTest", &UrlTest::ExplodeImplodeTest));
+       suite.addTest(new CppUnit::TestCaller<UrlTest>("UrlTest::PathOnly",
+               &UrlTest::PathOnly));
+
+       parent.addTest("UrlTest", &suite);
+}
diff --git a/src/tests/kits/net/url/UrlTest.h b/src/tests/kits/net/url/UrlTest.h
new file mode 100644
index 0000000..24c9722
--- /dev/null
+++ b/src/tests/kits/net/url/UrlTest.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2014 Haiku, inc.
+ * Distributed under the terms of the MIT License.
+ */
+#ifndef URL_TEST_H
+#define URL_TEST_H
+
+
+#include <TestCase.h>
+#include <TestSuite.h>
+
+
+class UrlTest: public BTestCase {
+public:
+                                       UrlTest();
+       virtual                 ~UrlTest();
+
+                       void    LengthTest();
+                       void    ExplodeImplodeTest();
+                       void    PathOnly();
+
+       static  void    AddTests(BTestSuite& suite);
+};
+
+
+#endif
diff --git a/src/tests/kits/net/url/url_test.cpp 
b/src/tests/kits/net/url/url_test.cpp
deleted file mode 100644
index c23010a..0000000
--- a/src/tests/kits/net/url/url_test.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-#include <cstdlib>
-#include <cstring>
-#include <cstdio>
-#include <iostream>
-
-#include <NetworkKit.h>
-
-#ifdef ASSERT
-#undef ASSERT
-#endif
-
-#define REPORT(assert, line) cout << "ASSERT() failed at line " << line << ": 
" <<  #assert << endl
-#define ASSERT(assertion) { if (!(assertion)) { REPORT(assertion, __LINE__ ); 
} }
-
-using namespace std;
-
-typedef struct
-{
-       const char* url;
-
-       struct
-       {
-               const char* protocol;
-               const char* userName;
-               const char* password;
-               const char* host;
-               int16           port;
-               const char* path;
-               const char* request;
-               const char* fragment;
-       } expected;
-} ExplodeTest;
-
-
-const char*                    kTestLength[] =
-       {
-               "http://user:pass@xxxxxxxxxxx:80/path?query#fragment";,
-               "http://user:pass@xxxxxxxxxxx:80/path?query#";,
-               "http://user:pass@xxxxxxxxxxx:80/path?query";,
-               "http://user:pass@xxxxxxxxxxx:80/path?";,
-               "http://user:pass@xxxxxxxxxxx:80/path";,
-               "http://user:pass@xxxxxxxxxxx:80/";,
-               "http://user:pass@xxxxxxxxxxx";,
-               "http://user:pass@";,
-               "http://www.foo.com";,
-               "http://";,
-               "http:"
-       };
-
-const ExplodeTest      kTestExplode[] =
-       //  Url
-       //       Protocol     User  Password  Hostname  Port     Path    
Request      Fragment
-       //       -------- --------- --------- --------- ---- ---------- 
---------- ------------
-       {
-               { "http://user:pass@host:80/path?query#fragment";,
-                       { "http",   "user",   "pass",   "host",  80,   "/path", 
  "query",   "fragment" } },
-               { "http://www.host.tld/path?query#fragment";,
-                       { "http",   "",        "", "www.host.tld",0,   "/path", 
  "query",   "fragment" } }
-       };
-
-// Test if rebuild url are the same length of parsed one
-void lengthTest()
-{
-       int8 testIndex;
-       BUrl testUrl;
-
-       for (testIndex = 0; kTestLength[testIndex] != NULL; testIndex++)
-       {
-               testUrl.SetUrlString(kTestLength[testIndex]);
-
-               cout << "`" << kTestLength[testIndex] << "' vs `" << 
testUrl.UrlString() << "'" << endl;
-               ASSERT(strlen(kTestLength[testIndex]) == 
strlen(testUrl.UrlString()));
-       }
-}
-
-void explodeImplodeTest()
-{
-       uint8 testIndex;
-       BUrl testUrl;
-
-       for (testIndex = 0; testIndex < (sizeof(kTestExplode) / 
sizeof(ExplodeTest)); testIndex++)
-       {
-               testUrl.SetUrlString(kTestExplode[testIndex].url);
-
-               ASSERT(BString(kTestExplode[testIndex].url) == 
BString(testUrl.UrlString()));
-               ASSERT(BString(kTestExplode[testIndex].expected.protocol) == 
BString(testUrl.Protocol()));
-               ASSERT(BString(kTestExplode[testIndex].expected.userName) == 
BString(testUrl.UserName()));
-               ASSERT(BString(kTestExplode[testIndex].expected.password) == 
BString(testUrl.Password()));
-               ASSERT(BString(kTestExplode[testIndex].expected.host) == 
BString(testUrl.Host()));
-               ASSERT(kTestExplode[testIndex].expected.port == testUrl.Port());
-               ASSERT(BString(kTestExplode[testIndex].expected.path) == 
BString(testUrl.Path()));
-               ASSERT(BString(kTestExplode[testIndex].expected.request) == 
BString(testUrl.Request()));
-               ASSERT(BString(kTestExplode[testIndex].expected.fragment) == 
BString(testUrl.Fragment()));
-       }
-}
-
-using std::cout;
-using std::endl;
-
-int
-main(int, char**)
-{
-       cout << "Running lengthTest:" << endl;
-       lengthTest();
-       cout << endl;
-
-       cout << "Running explodeImplodeTest:" << endl;
-       explodeImplodeTest();
-       cout << endl;
-
-       BUrl test = "lol";
-       cout << "Path: " << test.HasPath() << " -> " << test.Path() << endl;
-       cout << "Rebuild: " << test.UrlString() << endl;
-
-       return EXIT_SUCCESS;
-}

############################################################################

Commit:      002f37b0cca92e4cf72857c72ac95db5a8b09615
URL:         http://cgit.haiku-os.org/haiku/commit/?id=002f37b
Author:      Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
Date:        Tue Jun  3 13:27:53 2014 UTC

Explicit template instanciation to please gcc2.

Makes CPPUNIT_ASSERT_EQUAL useable.

----------------------------------------------------------------------------

diff --git a/headers/tools/cppunit/cppunit/TestAssert.h 
b/headers/tools/cppunit/cppunit/TestAssert.h
index d4f1315..c204910 100644
--- a/headers/tools/cppunit/cppunit/TestAssert.h
+++ b/headers/tools/cppunit/cppunit/TestAssert.h
@@ -173,7 +173,7 @@ namespace CppUnit {
  * removed by specializing the CppUnit::assertion_traits.
  */
 #define CPPUNIT_ASSERT_EQUAL(expected,actual)                     \
-  ( ::CppUnit::TestAssert::assertEquals( (expected),              \
+  ( ::CppUnit::TestAssert::assertEquals<typeof(expected)>( (expected), \
                                          (actual),                \
                                          CPPUNIT_SOURCELINE() ) )
 
@@ -196,7 +196,7 @@ namespace CppUnit {
  * removed by specializing the CppUnit::assertion_traits.
  */
 #define CPPUNIT_ASSERT_EQUAL_MESSAGE(message,expected,actual)     \
-  ( ::CppUnit::TestAssert::assertEquals( (expected),              \
+  ( ::CppUnit::TestAssert::assertEquals<typeof(expected)>( (expected),  \
                                          (actual),                \
                                          CPPUNIT_SOURCELINE(),    \
                                          (message) ) )

############################################################################

Commit:      0013f47d3fbbe006200e4164c6b2e52e16952f68
URL:         http://cgit.haiku-os.org/haiku/commit/?id=0013f47
Author:      Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
Date:        Tue Jun  3 15:10:29 2014 UTC

Import tests from http://skew.org/uri/uri%5Ftests.html

This shows there are some problems with BUrl, still.
CppUnit stops at the first failed assert in each test, which doesn't
give a good overview of the number of failures in this case (the first
subtest fails). A possible solution is splitting this into smaller
subsets.

----------------------------------------------------------------------------

diff --git a/src/tests/kits/net/url/UrlTest.cpp 
b/src/tests/kits/net/url/UrlTest.cpp
index 87c427a..ef88f5c 100644
--- a/src/tests/kits/net/url/UrlTest.cpp
+++ b/src/tests/kits/net/url/UrlTest.cpp
@@ -28,8 +28,8 @@ UrlTest::~UrlTest()
 }
 
 
-// Test if rebuild url are the same length of parsed one
-void UrlTest::LengthTest()
+// Test that parsing a valid URL and converting back to string doesn't alter it
+void UrlTest::ParseTest()
 {
        int8 testIndex;
        BUrl testUrl;
@@ -52,9 +52,10 @@ void UrlTest::LengthTest()
        for (testIndex = 0; kTestLength[testIndex] != NULL; testIndex++)
        {
                NextSubTest();
-               testUrl.SetUrlString(kTestLength[testIndex]);
 
-               CPPUNIT_ASSERT(strlen(kTestLength[testIndex]) == 
strlen(testUrl.UrlString()));
+               testUrl.SetUrlString(kTestLength[testIndex]);
+               CPPUNIT_ASSERT_EQUAL(BString(kTestLength[testIndex]),
+                       testUrl.UrlString());
        }
 }
 
@@ -97,23 +98,24 @@ void UrlTest::ExplodeImplodeTest()
                NextSubTest();
                testUrl.SetUrlString(kTestExplode[testIndex].url);
 
-               CPPUNIT_ASSERT(BString(kTestExplode[testIndex].url)
-                       == BString(testUrl.UrlString()));
-               
CPPUNIT_ASSERT(BString(kTestExplode[testIndex].expected.protocol)
-                       == BString(testUrl.Protocol()));
-               
CPPUNIT_ASSERT(BString(kTestExplode[testIndex].expected.userName)
-                       == BString(testUrl.UserName()));
-               
CPPUNIT_ASSERT(BString(kTestExplode[testIndex].expected.password)
-                       == BString(testUrl.Password()));
-               CPPUNIT_ASSERT(BString(kTestExplode[testIndex].expected.host)
-                       == BString(testUrl.Host()));
-               CPPUNIT_ASSERT(kTestExplode[testIndex].expected.port == 
testUrl.Port());
-               CPPUNIT_ASSERT(BString(kTestExplode[testIndex].expected.path)
-                       == BString(testUrl.Path()));
-               CPPUNIT_ASSERT(BString(kTestExplode[testIndex].expected.request)
-                       == BString(testUrl.Request()));
-               
CPPUNIT_ASSERT(BString(kTestExplode[testIndex].expected.fragment)
-                       == BString(testUrl.Fragment()));
+               CPPUNIT_ASSERT_EQUAL(BString(kTestExplode[testIndex].url),
+                       BString(testUrl.UrlString()));
+               
CPPUNIT_ASSERT_EQUAL(BString(kTestExplode[testIndex].expected.protocol),
+                       BString(testUrl.Protocol()));
+               
CPPUNIT_ASSERT_EQUAL(BString(kTestExplode[testIndex].expected.userName),
+                       BString(testUrl.UserName()));
+               
CPPUNIT_ASSERT_EQUAL(BString(kTestExplode[testIndex].expected.password),
+                       BString(testUrl.Password()));
+               
CPPUNIT_ASSERT_EQUAL(BString(kTestExplode[testIndex].expected.host),
+                       BString(testUrl.Host()));
+               CPPUNIT_ASSERT_EQUAL(kTestExplode[testIndex].expected.port,
+                       testUrl.Port());
+               
CPPUNIT_ASSERT_EQUAL(BString(kTestExplode[testIndex].expected.path),
+                       BString(testUrl.Path()));
+               
CPPUNIT_ASSERT_EQUAL(BString(kTestExplode[testIndex].expected.request),
+                       BString(testUrl.Request()));
+               
CPPUNIT_ASSERT_EQUAL(BString(kTestExplode[testIndex].expected.fragment),
+                       BString(testUrl.Fragment()));
        }
 }
 
@@ -123,8 +125,344 @@ UrlTest::PathOnly()
 {
        BUrl test = "lol";
        CPPUNIT_ASSERT(test.HasPath());
-       CPPUNIT_ASSERT(test.Path() == "lol");
-       CPPUNIT_ASSERT(test.UrlString() == "lol");
+       CPPUNIT_ASSERT_EQUAL(BString("lol"), test.Path());
+       CPPUNIT_ASSERT_EQUAL(BString("lol"), test.UrlString());
+}
+
+
+void
+UrlTest::RelativeUriTest()
+{
+       // http://skew.org/uri/uri%5Ftests.html
+       struct RelativeUrl {
+               const char* base;
+               const char* relative;
+               const char* absolute;
+       };
+
+       const RelativeUrl tests[] = {
+               {"http://example.com/path?query#frag";, "",
+                       "http://example.com/path?query"},
+               {"foo:a/b",                     "../c",                         
        "foo:c"},
+               {"foo:a",                               "foo:.",                
                "foo:"},
+               {"zz:abc",                              "/foo/../../../bar",    
"zz:/bar"},
+               {"zz:abc",                              "/foo/../bar",          
        "zz:/bar"},
+               {"zz:abc",                              "foo/../../../bar",     
        "zz:bar"},
+               {"zz:abc",                              "zz:.",                 
                "zz:"},
+               {"http://a/b/c/d;p?q";,  "/.",                                   
"http://a/"},
+               {"http://a/b/c/d;p?q";,  "/.foo",                                
"http://a/.foo"},
+               {"http://a/b/c/d;p?q";,  ".foo",                                 
"http://a/b/c/.foo"},
+               {"http://a/b/c/d;p?q";,  "g:h",                                  
"g:h"},
+
+               {"http://a/b/c/d;p?q";,  "g:h",                                  
"g:h"},
+               {"http://a/b/c/d;p?q";,  "g",                                    
"http://a/b/c/g"},
+               {"http://a/b/c/d;p?q";,  "./g",                                  
"http://a/b/c/g"},
+               {"http://a/b/c/d;p?q";,  "g/",                                   
"http://a/b/c/g/"},
+               {"http://a/b/c/d;p?q";,  "/g",                                   
"http://a/g"},
+               {"http://a/b/c/d;p?q";,  "//g",                                  
"http://g"},
+               {"http://a/b/c/d;p?q";,  "?y",                                   
"http://a/b/c/d;p?y"},
+               {"http://a/b/c/d;p?q";,  "g?y",                                  
"http://a/b/c/g?y"},
+               {"http://a/b/c/d;p?q";,  "#s",                                   
"http://a/b/c/d;p?q#s"},
+               {"http://a/b/c/d;p?q";,  "g#s",                                  
"http://a/b/c/g#s"},
+               {"http://a/b/c/d;p?q";,  "g?y#s",                                
"http://a/b/c/g?y#s"},
+               {"http://a/b/c/d;p?q";,  ";x",                                   
"http://a/b/c/;x"},
+               {"http://a/b/c/d;p?q";,  "g;x",                                  
"http://a/b/c/g;x"},
+               {"http://a/b/c/d;p?q";,  "g;x?y#s",                              
"http://a/b/c/g;x?y#s"},
+               {"http://a/b/c/d;p?q";,  "",                                     
        "http://a/b/c/d;p?q"},
+               {"http://a/b/c/d;p?q";,  ".",                                    
"http://a/b/c/"},
+               {"http://a/b/c/d;p?q";,  "./",                                   
"http://a/b/c/"},
+               {"http://a/b/c/d;p?q";,  "..",                                   
"http://a/b/"},
+               {"http://a/b/c/d;p?q";,  "../",                                  
"http://a/b/"},
+               {"http://a/b/c/d;p?q";,  "../g",                                 
"http://a/b/g"},
+               {"http://a/b/c/d;p?q";,  "../..",                                
"http://a/"},
+               {"http://a/b/c/d;p?q";,  "../../",                               
"http://a/"},
+               {"http://a/b/c/d;p?q";,  "../../g",                              
"http://a/g"},
+
+               // Parsers must be careful in handling cases where there are 
more
+               // relative path ".." segments than there are hierarchical 
levels in the
+               // base URI's path. Note that the ".." syntax cannot be used to 
change
+               // the authority component of a URI.
+               {"http://a/b/c/d;p?q";,  "../../../g",                   
"http://a/g"},
+               {"http://a/b/c/d;p?q";,  "../../../../g",                
"http://a/g"},
+
+               // Similarly, parsers must remove the dot-segments "." and ".." 
when
+               // they are complete components of a path, but not when they 
are only
+               // part of a segment.
+               {"http://a/b/c/d;p?q";,  "/./g",                                 
"http://a/g"},
+               {"http://a/b/c/d;p?q";,  "/../g",                                
"http://a/g"},
+               {"http://a/b/c/d;p?q";,  "g.",                                   
"http://a/b/c/g."},
+               {"http://a/b/c/d;p?q";,  ".g",                                   
"http://a/b/c/.g"},
+               {"http://a/b/c/d;p?q";,  "g..",                                  
"http://a/b/c/g.."},
+               {"http://a/b/c/d;p?q";,  "..g",                                  
"http://a/b/c/..g"},
+
+               // Less likely are cases where the relative URI reference uses
+               // unnecessary or nonsensical forms of the "." and ".." 
complete path
+               // segments.
+               {"http://a/b/c/d;p?q";,  "./../g",                               
"http://a/b/g"},
+               {"http://a/b/c/d;p?q";,  "./g/.",                                
"http://a/b/c/g/"},
+               {"http://a/b/c/d;p?q";,  "g/./h",                                
"http://a/b/c/g/h"},
+               {"http://a/b/c/d;p?q";,  "g/../h",                               
"http://a/b/c/h"},
+               {"http://a/b/c/d;p?q";,  "g;x=1/./y",                    
"http://a/b/c/g;x=1/y"},
+               {"http://a/b/c/d;p?q";,  "g;x=1/../y",                   
"http://a/b/c/y"},
+
+               // Some applications fail to separate the reference's query 
and/or
+               // fragment components from a relative path before merging it 
with the
+               // base path and removing dot-segments. This error is rarely 
noticed,
+               // since typical usage of a fragment never includes the 
hierarchy ("/")
+               // character, and the query component is not normally used 
within
+               // relative references.
+               {"http://a/b/c/d;p?q";,  "g?y/./x",                      
"http://a/b/c/g?y/./x"},
+               {"http://a/b/c/d;p?q";,  "g?y/../x",                     
"http://a/b/c/g?y/../x"},
+               {"http://a/b/c/d;p?q";,  "g#s/./x",                      
"http://a/b/c/g#s/./x"},
+               {"http://a/b/c/d;p?q";,  "g#s/../x",                     
"http://a/b/c/g#s/../x"},
+
+               // Some parsers allow the scheme name to be present in a 
relative URI
+               // reference if it is the same as the base URI scheme. This is
+               // considered to be a loophole in prior specifications of 
partial URI
+               // [RFC1630]. Its use should be avoided, but is allowed for 
backward
+               // compatibility.
+               {"http://a/b/c/d;p?q";,  "http:g",                       
"http:g"},
+               {"http://a/b/c/d;p?q";,  "http:",                        
"http:"},
+
+               {"http://a/b/c/d;p?q";,  "./g:h",                        
"http://a/b/c/g:h"},
+               {"http://a/b/c/d;p?q";,  "/a/b/c/./../../g",     "http://a/a/g"},
+
+               {"http://a/b/c/d;p?q=1/2";,      "g",                    
"http://a/b/c/g"},
+               {"http://a/b/c/d;p?q=1/2";,      "./g",                  
"http://a/b/c/g"},
+               {"http://a/b/c/d;p?q=1/2";,      "g/",                   
"http://a/b/c/g/"},
+               {"http://a/b/c/d;p?q=1/2";,      "/g",                   
"http://a/g"},
+               {"http://a/b/c/d;p?q=1/2";,      "//g",                  
"http://g"},
+               {"http://a/b/c/d;p?q=1/2";,      "?y",                   
"http://a/b/c/d;p?y"},
+               {"http://a/b/c/d;p?q=1/2";,      "g?y",                  
"http://a/b/c/g?y"},
+               {"http://a/b/c/d;p?q=1/2";,      "g?y/./x",              
"http://a/b/c/g?y/./x"},
+               {"http://a/b/c/d;p?q=1/2";,      "g?y/../x",             
"http://a/b/c/g?y/../x"},
+               {"http://a/b/c/d;p?q=1/2";,      "g#s",                  
"http://a/b/c/g#s"},
+               {"http://a/b/c/d;p?q=1/2";,      "g#s/./x",              
"http://a/b/c/g#s/./x"},
+               {"http://a/b/c/d;p?q=1/2";,      "g#s/../x",             
"http://a/b/c/g#s/../x"},
+               {"http://a/b/c/d;p?q=1/2";,      "./",                   
"http://a/b/c/"},
+               {"http://a/b/c/d;p?q=1/2";,      "../",                  
"http://a/b/"},
+               {"http://a/b/c/d;p?q=1/2";,      "../g",                 
"http://a/b/g"},
+               {"http://a/b/c/d;p?q=1/2";,      "../../",               
"http://a/"},
+               {"http://a/b/c/d;p?q=1/2";,      "../../g",              
"http://a/g"},
+
+               {"http://a/b/c/d;p=1/2?q";,      "g",                    
"http://a/b/c/d;p=1/g"},
+               {"http://a/b/c/d;p=1/2?q";,      "./g",                  
"http://a/b/c/d;p=1/g"},
+               {"http://a/b/c/d;p=1/2?q";,      "g/",                   
"http://a/b/c/d;p=1/g/"},
+               {"http://a/b/c/d;p=1/2?q";,      "g?y",                  
"http://a/b/c/d;p=1/g?y"},
+               {"http://a/b/c/d;p=1/2?q";,      ";x",                   
"http://a/b/c/d;p=1/;x"},
+               {"http://a/b/c/d;p=1/2?q";,      "g;x",                  
"http://a/b/c/d;p=1/g;x"},
+               {"http://a/b/c/d;p=1/2?q";, "g;x=1/./y", 
"http://a/b/c/d;p=1/g;x=1/y"},
+               {"http://a/b/c/d;p=1/2?q";,      "g;x=1/../y",   
"http://a/b/c/d;p=1/y"},
+               {"http://a/b/c/d;p=1/2?q";,      "./",                   
"http://a/b/c/d;p=1/"},
+               {"http://a/b/c/d;p=1/2?q";,      "../",                  
"http://a/b/c/"},
+               {"http://a/b/c/d;p=1/2?q";,      "../g",                 
"http://a/b/c/g"},
+               {"http://a/b/c/d;p=1/2?q";,      "../../",               
"http://a/b/"},
+               {"http://a/b/c/d;p=1/2?q";,      "../../g",              
"http://a/b/g"},
+
+               // Empty host and directory
+               {"fred:///s//a/b/c",    "g:h",                                  
"g:h"},
+               {"fred:///s//a/b/c",    "g",                                    
"fred:///s//a/b/g"},
+               {"fred:///s//a/b/c",    "./g",                                  
"fred:///s//a/b/g"},
+               {"fred:///s//a/b/c",    "g/",                                   
"fred:///s//a/b/g/"},
+               {"fred:///s//a/b/c",    "/g",                                   
"fred:///g"},
+               {"fred:///s//a/b/c",    "//g",                                  
"fred://g"},
+               {"fred:///s//a/b/c",    "//g/x",                                
"fred://g/x"},
+               {"fred:///s//a/b/c",    "///g",                                 
"fred:///g"},
+               {"fred:///s//a/b/c",    "./",                                   
"fred:///s//a/b/"},
+               {"fred:///s//a/b/c",    "../",                                  
"fred:///s//a/"},
+               {"fred:///s//a/b/c",    "../g",                                 
"fred:///s//a/g"},
+               {"fred:///s//a/b/c",    "../..",                                
"fred:///s//"},
+               {"fred:///s//a/b/c",    "../../g",                              
"fred:///s//g"},
+               {"fred:///s//a/b/c",    "../../../g",                   
"fred:///s/g"},
+               {"fred:///s//a/b/c",    "../../../g",                   
"fred:///s/g"},
+
+               {"http:///s//a/b/c";,    "g:h",                                  
"g:h"},
+               {"http:///s//a/b/c";,    "g",                                    
"http:///s//a/b/g"},
+               {"http:///s//a/b/c";,    "./g",                                  
"http:///s//a/b/g"},
+               {"http:///s//a/b/c";,    "g/",                                   
"http:///s//a/b/g/"},
+               {"http:///s//a/b/c";,    "/g",                                   
"http:///g"},
+               {"http:///s//a/b/c";,    "//g",                                  
"http://g"},
+               {"http:///s//a/b/c";,    "//g/x",                                
"http://g/x"},
+               {"http:///s//a/b/c";,    "///g",                                 
"http:///g"},
+               {"http:///s//a/b/c";,    "./",                                   
"http:///s//a/b/"},
+               {"http:///s//a/b/c";,    "../",                                  
"http:///s//a/"},
+               {"http:///s//a/b/c";,    "../g",                                 
"http:///s//a/g"},
+               {"http:///s//a/b/c";,    "../..",                                
"http:///s//"},
+               {"http:///s//a/b/c";,    "../../g",                              
"http:///s//g"},
+               {"http:///s//a/b/c";,    "../../../g",                   
"http:///s/g"},
+               {"http:///s//a/b/c";,    "../../../g",                   
"http:///s/g"},
+
+               {"foo:xyz",                             "bar:abc",              
                "bar:abc"},
+               {"http://example/x/y/z","../abc";,                               
"http://example/x/abc"},
+               
{"http://example2/x/y/z","http://example/x/abc","http://example/x/abc"},
+               {"http://ex/x/y/z";,             "../r",                         
        "http://ex/x/r"},
+               {"http://ex/x/y";,               "q/r",                          
        "http://ex/x/q/r"},
+               {"http://ex/x/y";,               "q/r#s",                        
        "http://ex/x/q/r#s"},
+               {"http://ex/x/y";,               "q/r#s/t",                      
        "http://ex/x/q/r#s/t"},
+               {"http://ex/x/y";,               "ftp://ex/x/q/r";,               
"ftp://ex/x/q/r"},
+               {"http://ex/x/y";,               "",                             
                "http://ex/x/y"},
+               {"http://ex/x/y/";,              "",                             
                "http://ex/x/y/"},
+               {"http://ex/x/y/pdq";,   "",                                     
        "http://ex/x/y/pdq"},
+               {"http://ex/x/y/";,              "z/",                           
        "http://ex/x/y/z/"},
+
+               {"file:/swap/test/animal.rdf", "#Animal",
+                       "file:/swap/test/animal.rdf#Animal"},
+               {"file:/e/x/y/z",               "../abc",                       
        "file:/e/x/abc"},
+               {"file:/example2/x/y/z","/example/x/abc",               
"file:/example/x/abc"},
+               {"file:/e/x/y/z",               "../r",                         
        "file:/e/x/r"},
+               {"file:/e/x/y/z",               "/r",                           
        "file:/r"},
+               {"file:/e/x/y",                 "q/r",                          
        "file:/e/x/q/r"},
+               {"file:/e/x/y",                 "q/r#s",                        
        "file:/e/x/q/r#s"},
+               {"file:/e/x/y",                 "q/r#",                         
        "file:/e/x/q/r#"},
+               {"file:/e/x/y",                 "q/r#s/t",                      
        "file:/e/x/q/r#s/t"},
+               {"file:/e/x/y",                 "ftp://ex/x/q/r";,               
"ftp://ex/x/q/r"},
+               {"file:/e/x/y",                 "",                             
                "file:/e/x/y"},
+               {"file:/e/x/y/",                "",                             
                "file:/e/x/y/"},
+               {"file:/e/x/y/pdq",             "",                             
                "file:/e/x/y/pdq"},
+               {"file:/e/x/y/",                "z/",                           
        "file:/e/x/y/z/"},
+               {"file:/devel/WWW/2000/10/swap/test/reluri-1.n3",
+                       "file://meetings.example.com/cal#m1",
+                       "file://meetings.example.com/cal#m1"},
+               {"file:/home/connolly/w3ccvs/WWW/2000/10/swap/test/reluri-1.n3",
+                       "file://meetings.example.com/cal#m1",
+                       "file://meetings.example.com/cal#m1"},
+               {"file:/some/dir/foo",          "./#blort",             
"file:/some/dir/#blort"},
+               {"file:/some/dir/foo",          "./#",                  
"file:/some/dir/#"},
+
+               {"http://example/x/abc.efg";, "./",                      
"http://example/x/"},
+               {"http://example2/x/y/z";, 
"//example/x/abc","http://example/x/abc"},
+               {"http://ex/x/y/z";,                     "/r",                   
"http://ex/r"},
+               {"http://ex/x/y";,                       "./q:r",                
"http://ex/x/q:r"},
+               {"http://ex/x/y";,                       "./p=q:r",              
"http://ex/x/p=q:r"},
+               {"http://ex/x/y?pp/qq";,         "?pp/rr",               
"http://ex/x/y?pp=rr"},
+               {"http://ex/x/y?pp/qq";,         "y/z",                  
"http://ex/x/y/z"},
+
+               {"mailto:local";, "local/qual@xxxxxxxxxx#frag",
+                       "mailto:local/qual@xxxxxxxxxx#frag"},
+               {"mailto:local/qual1@xxxxxxxxxxx";, 
"more/qual2@xxxxxxxxxxx#frag",
+                       "mailto:local/more/qual2@xxxxxxxxxxx#frag"},
+
+               {"http://ex/x/y?q";,             "y?q",                  
"http://ex/x/y?q"},
+               {"http://ex?p";,                 "x/y?q",                
"http://ex/x/y?q"},
+               {"foo:a/b",                             "c/d",                  
"foo:a/c/d"},
+               {"foo:a/b",                             "/c/d",                 
"foo:/c/d"},
+               {"foo:a/b?c#d",                 "",                             
"foo:a/b?c"},
+               {"foo:a",                               "b/c",                  
"foo:b/c"},
+               {"foo:/a/y/z",                  "../b/c",               
"foo:/a/b/c"},
+               {"foo:a",                               "./b/c",                
"foo:b/c"},
+               {"foo:a",                               "/./b/c",               
"foo:/b/c"},
+               {"foo://a//b/c",                "../../d",              
"foo://a/d"},
+               {"foo:a",                               ".",                    
"foo:"},
+               {"foo:a",                               "..",                   
"foo:"},
+
+               {"http://example/x/y%2Fz";, "abc",                       
"http://example/x/abc"},
+               {"http://example/a/x/y/z";, "../../x%2Fabc", 
"http://example/a/x%2Fabc"},
+               {"http://example/a/x/y%2Fz";, "../x%2Fabc", 
"http://example/a/x%2Fabc"},
+               {"http://example/x%2Fy/z";, "abc", "http://example/x%2Fy/abc"},
+               {"http://ex/x/y";, "q%3Ar", "http://ex/x/q%3Ar"},
+               {"http://example/x/y%2Fz";, "/x%2Fabc", 
"http://example/x%2Fabc"},
+               {"http://example/x/y/z";, "/x%2Fabc", "http://example/x%2Fabc"},
+
+               {"mailto:local1@domain1?query1";, "local2@domain2",
+                       "mailto:local2@domain2"},
+               {"mailto:local1@domain1";, "local2@domain2?query2",
+                       "mailto:local2@domain2?query2"},
+               {"mailto:local1@domain1?query1";, "local2@domain2?query2",
+                       "mailto:local2@domain2?query2"},
+               {"mailto:local@domain?query1";, "?query2",
+                       "mailto:local@domain?query2"},
+               {"mailto:?query1";, "local2@domain2?query2",
+                       "mailto:local2@domain2?query2"},
+               {"mailto:local1@domain1?query1";, "?query2",
+                       "mailto:local1@domain1?query2"},
+
+               {"foo:bar", "http://example/a/b?c/../d";, 
"http://example/a/b?c/../d"},
+               {"foo:bar", "http://example/a/b#c/../d";, 
"http://example/a/b#c/../d"},
+               {"http://example.org/base/uri";, "http:this", "http:this"},
+               {"http:base", "http:this", "http:this"},
+               {"f:/a", ".//g", "f://g"},
+               {"f://example.org/base/a", "b/c//d/e", 
"f://example.org/base/b/c//d/e"},
+               {"mid:m@xxxxxxxxxxx/c@xxxxxxxxxxx", 
"m2@xxxxxxxxxxx/c2@xxxxxxxxxxx",
+                       "mid:m@xxxxxxxxxxx/m2@xxxxxxxxxxx/c2@xxxxxxxxxxx"},
+               {"file:///C:/DEV/Haskell/lib/HXmlToolbox-3.01/examples/", 
"mini1.xml",
+                       
"file:///C:/DEV/Haskell/lib/HXmlToolbox-3.01/examples/mini1.xml"},
+               {"foo:a/y/z", "../b/c", "foo:a/b/c"},
+               {"foo:", "b", "foo:b"},
+               {"foo://a", "b", "foo://a/b"},
+               {"foo://a?q", "b", "foo://a/b"},
+               {"foo://a", "b?q", "foo://a/b?q"},
+               {"foo://a?r", "b?q", "foo://a/b?q"},
+       };
+
+       BString message(" Base: ");
+       for (unsigned int index = 0; index < sizeof(tests) / 
sizeof(RelativeUrl);
+               index++)
+       {
+               NextSubTest();
+
+               BUrl baseUrl(tests[index].base);
+
+               message.Truncate(7, true);
+               message << tests[index].base;
+               message << " Relative: ";
+               message << tests[index].relative;
+
+               CPPUNIT_ASSERT_EQUAL_MESSAGE(message.String(),
+                       BString(tests[index].absolute),
+                       BUrl(baseUrl, tests[index].relative).UrlString());
+       }
+}
+
+
+
+void
+UrlTest::IDNTest()
+{
+       // http://www.w3.org/2004/04/uri-rel-test.html
+       NextSubTest();
+       CPPUNIT_ASSERT_EQUAL(BUrl("http://www.w3.org";).UrlString(),
+               BUrl("http://www.w%33.org";).UrlString());
+       NextSubTest();
+       CPPUNIT_ASSERT_EQUAL(
+               BUrl("http://xn--rksmrgs-5wao1o.josefsson.org";).UrlString(),
+               
BUrl("http://r%C3%A4ksm%C3%B6rg%C3%A5s.josefsson.org";).UrlString());
+       NextSubTest();
+       CPPUNIT_ASSERT_EQUAL(
+               BUrl("http://xn--rksmrgs-5wao1o.josefsson.org";).UrlString(),
+               
BUrl("http://%E7%B4%8D%E8%B1%86.w3.mag.keio.ac.jp";).UrlString());
+       NextSubTest();
+       CPPUNIT_ASSERT_EQUAL(
+               
BUrl("http://www.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3fg11amb5gzdb4wi9b";
+                       "ya3kc6lra.w3.mag.keio.ac.jp/").UrlString(),
+               
BUrl("http://www.%E3%81%BB%E3%82%93%E3%81%A8%E3%81%86%E3%81%AB%E3%81%AA";
+                       
"%E3%81%8C%E3%81%84%E3%82%8F%E3%81%91%E3%81%AE%E3%82%8F%E3%81%8B%E3"
+                       
"%82%89%E3%81%AA%E3%81%84%E3%81%A9%E3%82%81%E3%81%84%E3%82%93%E3%82"
+                       
"%81%E3%81%84%E3%81%AE%E3%82%89%E3%81%B9%E3%82%8B%E3%81%BE%E3%81%A0"
+                       
"%E3%81%AA%E3%81%8C%E3%81%8F%E3%81%97%E3%81%AA%E3%81%84%E3%81%A8%E3"
+                       
"%81%9F%E3%82%8A%E3%81%AA%E3%81%84.w3.mag.keio.ac.jp/").UrlString());
+       NextSubTest();
+       CPPUNIT_ASSERT_EQUAL(
+               
BUrl("http://xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3fg11amb5gzdb4wi9bya3k";
+                       
"c6lra.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3fg11amb5gzdb4wi9bya3kc6"
+                       
"lra.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3fg11amb5gzdb4wi9bya3kc6lr"
+                       "a.w3.mag.keio.ac.jp/").UrlString(),
+               
BUrl("http://%E3%81%BB%E3%82%93%E3%81%A8%E3%81%86%E3%81%AB%E3%81%AA%E3";
+                       
"%81%8C%E3%81%84%E3%82%8F%E3%81%91%E3%81%AE%E3%82%8F%E3%81%8B%E3%82"
+                       
"%89%E3%81%AA%E3%81%84%E3%81%A9%E3%82%81%E3%81%84%E3%82%93%E3%82%81"
+                       
"%E3%81%84%E3%81%AE%E3%82%89%E3%81%B9%E3%82%8B%E3%81%BE%E3%81%A0%E3"
+                       
"%81%AA%E3%81%8C%E3%81%8F%E3%81%97%E3%81%AA%E3%81%84%E3%81%A8%E3%81"
+                       
"%9F%E3%82%8A%E3%81%AA%E3%81%84.%E3%81%BB%E3%82%93%E3%81%A8%E3%81"
+                       
"%86%E3%81%AB%E3%81%AA%E3%81%8C%E3%81%84%E3%82%8F%E3%81%91%E3%81%AE"
+                       
"%E3%82%8F%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84%E3%81%A9%E3%82%81%E3"
+                       
"%81%84%E3%82%93%E3%82%81%E3%81%84%E3%81%AE%E3%82%89%E3%81%B9%E3%82"
+                       
"%8B%E3%81%BE%E3%81%A0%E3%81%AA%E3%81%8C%E3%81%8F%E3%81%97%E3%81%AA"
+                       
"%E3%81%84%E3%81%A8%E3%81%9F%E3%82%8A%E3%81%AA%E3%81%84.%E3%81%BB"
+                       
"%E3%82%93%E3%81%A8%E3%81%86%E3%81%AB%E3%81%AA%E3%81%8C%E3%81%84%E3"
+                       
"%82%8F%E3%81%91%E3%81%AE%E3%82%8F%E3%81%8B%E3%82%89%E3%81%AA%E3%81"
+                       
"%84%E3%81%A9%E3%82%81%E3%81%84%E3%82%93%E3%82%81%E3%81%84%E3%81%AE"
+                       
"%E3%82%89%E3%81%B9%E3%82%8B%E3%81%BE%E3%81%A0%E3%81%AA%E3%81%8C%E3"
+                       
"%81%8F%E3%81%97%E3%81%AA%E3%81%84%E3%81%A8%E3%81%9F%E3%82%8A%E3%81"
+                       "%AA%E3%81%84.w3.mag.keio.ac.jp/").UrlString());
 }
 
 
@@ -133,12 +471,16 @@ UrlTest::AddTests(BTestSuite& parent)
 {
        CppUnit::TestSuite& suite = *new CppUnit::TestSuite("UrlTest");
 
-       suite.addTest(new CppUnit::TestCaller<UrlTest>(
-               "UrlTest::LengthTest", &UrlTest::LengthTest));
+       suite.addTest(new CppUnit::TestCaller<UrlTest>("UrlTest::ParseTest",
+               &UrlTest::ParseTest));
        suite.addTest(new CppUnit::TestCaller<UrlTest>(
                "UrlTest::ExplodeImplodeTest", &UrlTest::ExplodeImplodeTest));
        suite.addTest(new CppUnit::TestCaller<UrlTest>("UrlTest::PathOnly",
                &UrlTest::PathOnly));
+       suite.addTest(new 
CppUnit::TestCaller<UrlTest>("UrlTest::RelativeUriTest",
+               &UrlTest::RelativeUriTest));
+       suite.addTest(new CppUnit::TestCaller<UrlTest>("UrlTest::IDNTest",
+               &UrlTest::IDNTest));
 
        parent.addTest("UrlTest", &suite);
 }
diff --git a/src/tests/kits/net/url/UrlTest.h b/src/tests/kits/net/url/UrlTest.h
index 24c9722..4f49031 100644
--- a/src/tests/kits/net/url/UrlTest.h
+++ b/src/tests/kits/net/url/UrlTest.h
@@ -15,9 +15,11 @@ public:
                                        UrlTest();
        virtual                 ~UrlTest();
 
-                       void    LengthTest();
+                       void    ParseTest();
                        void    ExplodeImplodeTest();
                        void    PathOnly();
+                       void    RelativeUriTest();
+                       void    IDNTest();
 
        static  void    AddTests(BTestSuite& suite);
 };

############################################################################

Revision:    hrev47303
Commit:      b2468f37f68f4a8e5e548bba18830706048e86ab
URL:         http://cgit.haiku-os.org/haiku/commit/?id=b2468f3
Author:      Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
Date:        Tue Jun  3 16:10:36 2014 UTC

Add hybrid tiff packages.

Should fix the build.

----------------------------------------------------------------------------

diff --git a/build/jam/repositories/HaikuPorts/x86_gcc2 
b/build/jam/repositories/HaikuPorts/x86_gcc2
index d35fd2c..22aaacd 100644
--- a/build/jam/repositories/HaikuPorts/x86_gcc2
+++ b/build/jam/repositories/HaikuPorts/x86_gcc2
@@ -388,6 +388,8 @@ RemotePackageRepository HaikuPorts
        speex_x86_devel-1.2~rc1-2
        sqlite_x86-3.8.0.2-1
        sqlite_x86_devel-3.8.0.2-1
+       tiff_x86-4.0.2-4
+       tiff_x86_devel-4.0.2-4
        vcmi_x86-0.94-1
        xz_utils_x86-5.0.5-1
        zlib_x86-1.2.8-3


Other related posts: