From aa69d4d00fa2eeb0fd5bafec284cac34f4ba869b Mon Sep 17 00:00:00 2001 From: Senthil Kumaran Date: Wed, 14 Jul 2010 10:21:22 +0000 Subject: [PATCH] Fix Issue5842 - Moving the tests out of urllib.parse module --- Lib/test/test_urlparse.py | 32 ++++++++++++++++++++ Lib/urllib/parse.py | 64 --------------------------------------- 2 files changed, 32 insertions(+), 64 deletions(-) diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py index 400decd7c54..69d65c147e9 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -7,6 +7,7 @@ import urllib.parse RFC1808_BASE = "http://a/b/c/d;p?q#f" RFC2396_BASE = "http://a/b/c/d;p?q" RFC3986_BASE = 'http://a/b/c/d;p?q' +SIMPLE_BASE = 'http://a/b/c/d' # A list of test cases. Each test case is a a two-tuple that contains # a string with the query and a dictionary with the expected result. @@ -295,6 +296,37 @@ class UrlParseTestCase(unittest.TestCase): #self.checkJoin(RFC3986_BASE, 'http:g','http:g') # strict parser self.checkJoin(RFC3986_BASE, 'http:g','http://a/b/c/g') #relaxed parser + def test_urljoins(self): + self.checkJoin(SIMPLE_BASE, 'g:h','g:h') + self.checkJoin(SIMPLE_BASE, 'http:g','http://a/b/c/g') + self.checkJoin(SIMPLE_BASE, 'http:','http://a/b/c/d') + self.checkJoin(SIMPLE_BASE, 'g','http://a/b/c/g') + self.checkJoin(SIMPLE_BASE, './g','http://a/b/c/g') + self.checkJoin(SIMPLE_BASE, 'g/','http://a/b/c/g/') + self.checkJoin(SIMPLE_BASE, '/g','http://a/g') + self.checkJoin(SIMPLE_BASE, '//g','http://g') + self.checkJoin(SIMPLE_BASE, '?y','http://a/b/c/d?y') + self.checkJoin(SIMPLE_BASE, 'g?y','http://a/b/c/g?y') + self.checkJoin(SIMPLE_BASE, 'g?y/./x','http://a/b/c/g?y/./x') + self.checkJoin(SIMPLE_BASE, '.','http://a/b/c/') + self.checkJoin(SIMPLE_BASE, './','http://a/b/c/') + self.checkJoin(SIMPLE_BASE, '..','http://a/b/') + self.checkJoin(SIMPLE_BASE, '../','http://a/b/') + self.checkJoin(SIMPLE_BASE, '../g','http://a/b/g') + self.checkJoin(SIMPLE_BASE, '../..','http://a/') + self.checkJoin(SIMPLE_BASE, '../../g','http://a/g') + self.checkJoin(SIMPLE_BASE, '../../../g','http://a/../g') + self.checkJoin(SIMPLE_BASE, './../g','http://a/b/g') + self.checkJoin(SIMPLE_BASE, './g/.','http://a/b/c/g/') + self.checkJoin(SIMPLE_BASE, '/./g','http://a/./g') + self.checkJoin(SIMPLE_BASE, 'g/./h','http://a/b/c/g/h') + self.checkJoin(SIMPLE_BASE, 'g/../h','http://a/b/c/h') + self.checkJoin(SIMPLE_BASE, 'http:g','http://a/b/c/g') + self.checkJoin(SIMPLE_BASE, 'http:','http://a/b/c/d') + self.checkJoin(SIMPLE_BASE, 'http:?y','http://a/b/c/d?y') + self.checkJoin(SIMPLE_BASE, 'http:g?y','http://a/b/c/g?y') + self.checkJoin(SIMPLE_BASE, 'http:g?y/./x','http://a/b/c/g?y/./x') + def test_RFC2732(self): for url, hostname, port in [ ('http://Test.python.org:5432/foo/', 'test.python.org', 5432), diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index c6ebcc9f2fe..82edea18f44 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -799,67 +799,3 @@ def splitvalue(attr): match = _valueprog.match(attr) if match: return match.group(1, 2) return attr, None - -test_input = """ - http://a/b/c/d - - g:h = - http:g = - http: = - g = - ./g = - g/ = - /g = - //g = - ?y = - g?y = - g?y/./x = - . = - ./ = - .. = - ../ = - ../g = - ../.. = - ../../g = - ../../../g = - ./../g = - ./g/. = - /./g = - g/./h = - g/../h = - http:g = - http: = - http:?y = - http:g?y = - http:g?y/./x = -""" - -def test(): - base = '' - if sys.argv[1:]: - fn = sys.argv[1] - if fn == '-': - fp = sys.stdin - else: - fp = open(fn) - else: - from io import StringIO - fp = StringIO(test_input) - for line in fp: - words = line.split() - if not words: - continue - url = words[0] - parts = urlparse(url) - print('%-10s : %s' % (url, parts)) - abs = urljoin(base, url) - if not base: - base = abs - wrapped = '' % abs - print('%-10s = %s' % (url, wrapped)) - if len(words) == 3 and words[1] == '=': - if wrapped != words[2]: - print('EXPECTED', words[2], '!!!!!!!!!!') - -if __name__ == '__main__': - test()