diff -r 7c74ece3bb16 Lib/test/test_urllib.py --- a/Lib/test/test_urllib.py Mon Jul 06 20:04:21 2015 +0300 +++ b/Lib/test/test_urllib.py Tue Jul 07 10:29:25 2015 +1000 @@ -850,6 +850,116 @@ "using quote_plus(): %r != %r" % (expect, result)) +class URLParseTests(unittest.TestCase): + """ Tests for urlparse + """ + + def _test_urlparse(self, given, expect): + result = urllib.parse.urlparse(given) + self.assertEqual(expect, result, + "Uring urlparse: %r != %r" % (expect, result)) + + def test_urlparse(self): + given = "http://example.com/foo?key=value#frag" + expect = urllib.parse.ParseResult(given[0:4], given[7:18], given[18:22], "", given[23:32], given[-4:]) + self._test_urlparse(given, expect) + + def test_urlparse_params(self): + given = "http://example.com/foo;params?key=value#frag" + expect = urllib.parse.ParseResult(given[0:4], given[7:18], given[18:22], given[23:29], given[30:39], given[-4:]) + self._test_urlparse(given, expect) + + def test_urlparse_params_with_slash(self): + given = "http://example.com/foo/bar;params?key=value#frag" + expect = urllib.parse.ParseResult(given[0:4], given[7:18], given[18:26], given[27:33], given[34:43], given[-4:]) + self._test_urlparse(given, expect) + + +class URLJoinTests(unittest.TestCase): + """ Tests for urljoin + """ + + def _test_urljoin(self, given_base, given_url, expect): + result = urllib.parse.urljoin(given_base, given_url) + self.assertEqual(expect, result, + " Using urljoin: %r != %r" % (expect, result)) + + def test_urljoin(self): + given_base = "http://example.com" + given_url = "/foo;params?key=value#frag" + expect = "http://example.com/foo;params?key=value#frag" + self._test_urljoin(given_base, given_url, expect) + + def test_urljoin_no_url(self): + given_base = "http://example.com" + given_url = None + expect = given_base + self._test_urljoin(given_base, given_url, expect) + + def test_urljoin_no_url(self): + given_base = None + given_url = "/foo/bar?key=value" + expect = given_url + self._test_urljoin(given_base, given_url, expect) + + def test_urljoin_no_path_url(self): + given_base = "http://example.com/foo/bar" + given_url = "?key=value#frag" + expect = "http://example.com/foo/bar?key=value#frag" + self._test_urljoin(given_base, given_url, expect) + + def test_urljoin_back(self): + given_base = "http://example.com/foo/bar/" + given_url = "../boo?key=value#frag" + expect = "http://example.com/foo/boo?key=value#frag" + self._test_urljoin(given_base, given_url, expect) + + +class DefragTests(unittest.TestCase): + """Tests for urldefrag + """ + + def _test_url_defrag(self, given, expect): + result = urllib.parse.urldefrag(given) + self.assertEqual(expect, result, + "using urldefrag(): %r != %r" % (expect, result)) + + def test_urldefrag_no_fragment(self): + given = "spam://example/foo" + expect = urllib.parse.DefragResult(given, "") + self._test_url_defrag(given, expect) + + def test_urldefrag_fragment(self): + given = "spam://example/foo#fragment" + expect = urllib.parse.DefragResult(given[0:18], given[19:]) + self._test_url_defrag(given, expect) + + def _test_defrag_result(self, given, expect): + result = given.geturl() + self.assertEqual(expect, result, + "using DefrageResult.geturl: %r != %r)" % (expect, result)) + + def test_defragresult_no_fragment(self): + expect = "spam://example/foo" + given = urllib.parse.DefragResult(expect, "") + self._test_defrag_result(given, expect) + + def test_defragresult_fragment(self): + expect = "spam://example/foo#fragment" + given = urllib.parse.DefragResult(expect[0:18], expect[19:]) + self._test_defrag_result(given, expect) + + def test_defragresult_no_fragment_bytes(self): + expect = b"spam://example/foo" + given = urllib.parse.DefragResultBytes(expect, "") + self._test_defrag_result(given, expect) + + def test_defragresult_fragment_bytes(self): + expect = b"spam://example/foo#fragment" + given = urllib.parse.DefragResultBytes(expect[0:18], expect[19:]) + self._test_defrag_result(given, expect) + + class UnquotingTests(unittest.TestCase): """Tests for unquote() and unquote_plus()