summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSenthil Kumaran <senthil@uthcode.com>2014-04-14 20:32:20 (GMT)
committerSenthil Kumaran <senthil@uthcode.com>2014-04-14 20:32:20 (GMT)
commitd8e24f1f716d32237f780e31c45431c5c458ff26 (patch)
treeea4ff5051faee077db392b3b670e05f0baa72c0c /Lib
parent01bafdcccc4ab653f70379a58a3183fac36e7132 (diff)
downloadcpython-d8e24f1f716d32237f780e31c45431c5c458ff26.zip
cpython-d8e24f1f716d32237f780e31c45431c5c458ff26.tar.gz
cpython-d8e24f1f716d32237f780e31c45431c5c458ff26.tar.bz2
Convert urllib.request parse_proxy doctests to unittests.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_urllib2.py39
-rw-r--r--Lib/urllib/request.py45
2 files changed, 39 insertions, 45 deletions
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py
index 6272105..6b73723 100644
--- a/Lib/test/test_urllib2.py
+++ b/Lib/test/test_urllib2.py
@@ -10,7 +10,7 @@ import sys
import urllib.request
# The proxy bypass method imported below has logic specific to the OSX
# proxy config data structure but is testable on all platforms.
-from urllib.request import Request, OpenerDirector, _proxy_bypass_macosx_sysconf
+from urllib.request import Request, OpenerDirector, _parse_proxy, _proxy_bypass_macosx_sysconf
from urllib.parse import urlparse
import urllib.error
@@ -1467,6 +1467,43 @@ class MiscTests(unittest.TestCase):
expected_errmsg = 'HTTP Error %s: %s' % (err.code, err.msg)
self.assertEqual(str(err), expected_errmsg)
+ def test_parse_proxy(self):
+ parse_proxy_test_cases = [
+ ('proxy.example.com',
+ (None, None, None, 'proxy.example.com')),
+ ('proxy.example.com:3128',
+ (None, None, None, 'proxy.example.com:3128')),
+ ('proxy.example.com', (None, None, None, 'proxy.example.com')),
+ ('proxy.example.com:3128',
+ (None, None, None, 'proxy.example.com:3128')),
+ # The authority component may optionally include userinfo
+ # (assumed to be # username:password):
+ ('joe:password@proxy.example.com',
+ (None, 'joe', 'password', 'proxy.example.com')),
+ ('joe:password@proxy.example.com:3128',
+ (None, 'joe', 'password', 'proxy.example.com:3128')),
+ #Examples with URLS
+ ('http://proxy.example.com/',
+ ('http', None, None, 'proxy.example.com')),
+ ('http://proxy.example.com:3128/',
+ ('http', None, None, 'proxy.example.com:3128')),
+ ('http://joe:password@proxy.example.com/',
+ ('http', 'joe', 'password', 'proxy.example.com')),
+ ('http://joe:password@proxy.example.com:3128',
+ ('http', 'joe', 'password', 'proxy.example.com:3128')),
+ # Everything after the authority is ignored
+ ('ftp://joe:password@proxy.example.com/rubbish:3128',
+ ('ftp', 'joe', 'password', 'proxy.example.com')),
+ # Test for no trailing '/' case
+ ('http://joe:password@proxy.example.com',
+ ('http', 'joe', 'password', 'proxy.example.com'))
+ ]
+
+ for tc, expected in parse_proxy_test_cases:
+ self.assertEqual(_parse_proxy(tc), expected)
+
+ self.assertRaises(ValueError, _parse_proxy, 'file:/ftp.example.com'),
+
class RequestTests(unittest.TestCase):
class PutRequest(Request):
method='PUT'
diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py
index 8a7d048..43d6caa 100644
--- a/Lib/urllib/request.py
+++ b/Lib/urllib/request.py
@@ -687,50 +687,7 @@ def _parse_proxy(proxy):
If a URL is supplied, it must have an authority (host:port) component.
According to RFC 3986, having an authority component means the URL must
- have two slashes after the scheme:
-
- >>> _parse_proxy('file:/ftp.example.com/')
- Traceback (most recent call last):
- ValueError: proxy URL with no authority: 'file:/ftp.example.com/'
-
- The first three items of the returned tuple may be None.
-
- Examples of authority parsing:
-
- >>> _parse_proxy('proxy.example.com')
- (None, None, None, 'proxy.example.com')
- >>> _parse_proxy('proxy.example.com:3128')
- (None, None, None, 'proxy.example.com:3128')
-
- The authority component may optionally include userinfo (assumed to be
- username:password):
-
- >>> _parse_proxy('joe:password@proxy.example.com')
- (None, 'joe', 'password', 'proxy.example.com')
- >>> _parse_proxy('joe:password@proxy.example.com:3128')
- (None, 'joe', 'password', 'proxy.example.com:3128')
-
- Same examples, but with URLs instead:
-
- >>> _parse_proxy('http://proxy.example.com/')
- ('http', None, None, 'proxy.example.com')
- >>> _parse_proxy('http://proxy.example.com:3128/')
- ('http', None, None, 'proxy.example.com:3128')
- >>> _parse_proxy('http://joe:password@proxy.example.com/')
- ('http', 'joe', 'password', 'proxy.example.com')
- >>> _parse_proxy('http://joe:password@proxy.example.com:3128')
- ('http', 'joe', 'password', 'proxy.example.com:3128')
-
- Everything after the authority is ignored:
-
- >>> _parse_proxy('ftp://joe:password@proxy.example.com/rubbish:3128')
- ('ftp', 'joe', 'password', 'proxy.example.com')
-
- Test for no trailing '/' case:
-
- >>> _parse_proxy('http://joe:password@proxy.example.com')
- ('http', 'joe', 'password', 'proxy.example.com')
-
+ have two slashes after the scheme.
"""
scheme, r_scheme = splittype(proxy)
if not r_scheme.startswith("/"):