diff -r 8796fb6af67e -r 4e8f2310f310 tests/test-url.py --- a/tests/test-url.py Wed Feb 23 23:30:48 2011 +0100 +++ b/tests/test-url.py Fri Mar 25 22:58:56 2011 -0700 @@ -49,6 +49,142 @@ check(_verifycert(None, 'example.com'), 'no certificate received') +import doctest + +def test_url(): + """ + >>> from mercurial.url import url + + This tests for edge cases in url.URL's parsing algorithm. Most of + these aren't useful for documentation purposes, so they aren't + part of the class's doc tests. + + Query strings and fragments: + + >>> url('http://host/a?b#c') + + >>> url('http://host/a?') + + >>> url('http://host/a#b#c') + + >>> url('http://host/a#b?c') + + >>> url('http://host/?a#b') + + >>> url('http://host/?a#b', parse_query=False) + + >>> url('http://host/?a#b', parse_fragment=False) + + >>> url('http://host/?a#b', parse_query=False, parse_fragment=False) + + + IPv6 addresses: + + >>> url('ldap://[2001:db8::7]/c=GB?objectClass?one') + + >>> url('ldap://joe:xxx@[2001:db8::7]:80/c=GB?objectClass?one') + + + Missing scheme, host, etc.: + + >>> url('://192.0.2.16:80/') + + >>> url('http://mercurial.selenic.com') + + >>> url('/foo') + + >>> url('bundle:/foo') + + >>> url('a?b#c') + + >>> url('http://x.com?arg=/foo') + + >>> url('http://joe:xxx@/foo') + + + Just a scheme and a path: + + >>> url('mailto:John.Doe@example.com') + + >>> url('a:b:c:d') + + + SSH examples: + + >>> url('ssh://joe@host//home/joe') + + >>> url('ssh://joe:xxx@host/src') + + >>> url('ssh://joe:xxx@host') + + >>> url('ssh://joe@host') + + >>> url('ssh://host') + + >>> url('ssh://') + + >>> url('ssh:') + + + Non-numeric port: + + >>> url('http://example.com:dd') + + >>> url('ssh://joe:xxx@host:ssh/foo') + + + Bad authentication credentials: + + >>> url('http://joe@joeville:123@4:@host/a?b#c') + + >>> url('http://!*#?/@!*#?/:@host/a?b#c') + + >>> url('http://!*#?@!*#?:@host/a?b#c') + + >>> url('http://!*@:!*@@host/a?b#c') + + + File paths: + + >>> url('a/b/c/d.g.f') + + >>> url('/x///z/y/') + + + Empty URL: + + >>> u = url('') + >>> u + + >>> str(u) + '' + + Empty path with query string: + + >>> str(url('http://foo/?bar')) + 'http://foo/?bar' + + Invalid path: + + >>> u = url('http://foo/bar') + >>> u.path = 'bar' + >>> str(u) + 'http://foo/bar' + + >>> u = url('file:///foo/bar/baz') + >>> u + + >>> str(u) + 'file:/foo/bar/baz' + """ + +doctest.testmod(optionflags=doctest.NORMALIZE_WHITESPACE) + # Unicode (IDN) certname isn't supported check(_verifycert(cert(u'\u4f8b.jp'), 'example.jp'), 'IDN in certificate not supported')