test_urlparse http://www.python.org = ('http', 'www.python.org', '', '', '', '') http://www.python.org#abc = ('http', 'www.python.org', '', '', '', 'abc') http://www.python.org/#abc = ('http', 'www.python.org', '/', '', '', 'abc') http://a/b/c/d;p?q#f = ('http', 'a', '/b/c/d', 'p', 'q', 'f') file:///tmp/junk.txt = ('file', '', '/tmp/junk.txt', '', '', '') urlparse.urljoin() tests g:h = 'g:h' g = 'http://a/b/c/g' ./g = 'http://a/b/c/g' g/ = 'http://a/b/c/g/' /g = 'http://a/g' //g = 'http://g' ?y = 'http://a/b/c/d;p?y' g?y = 'http://a/b/c/g?y' g?y/./x = 'http://a/b/c/g?y/./x' #s = 'http://a/b/c/d;p?q#s' g#s = 'http://a/b/c/g#s' g#s/./x = 'http://a/b/c/g#s/./x' g?y#s = 'http://a/b/c/g?y#s' ;x = 'http://a/b/c/d;x' g;x = 'http://a/b/c/g;x' g;x?y#s = 'http://a/b/c/g;x?y#s' . = 'http://a/b/c/' ./ = 'http://a/b/c/' .. = 'http://a/b/' ../ = 'http://a/b/' ../g = 'http://a/b/g' ../.. = 'http://a/' ../../ = 'http://a/' ../../g = 'http://a/g' = 'http://a/b/c/d;p?q#f' ../../../g = 'http://a/../g' ../../../../g = 'http://a/../../g' /./g = 'http://a/./g' /../g = 'http://a/../g' g. = 'http://a/b/c/g.' .g = 'http://a/b/c/.g' g.. = 'http://a/b/c/g..' ..g = 'http://a/b/c/..g' ./../g = 'http://a/b/g' ./g/. = 'http://a/b/c/g/' g/./h = 'http://a/b/c/g/h' g/../h = 'http://a/b/c/h' 0 errors