annotate tests/test-url.py @ 52679:f19a3f1437f3

pyupgrade: drop `coding=UTF-8` comments PEP-3120[1] (Python 3.0 in 2007) says that UTF-8 is the default encoding. That should be long enough ago that no reasonable editor would trip over this, and certainly any supported version of Python won't. The comments were probably harmless, but as `pyupgrade` has no mechanism to disable this change, omitting this change makes it unusable as a code checking tool, and makes it a pain to use occasionally to upgrade the source (since these changes would need to be manually reverted). [1] https://peps.python.org/pep-3120/
author Matt Harbison <matt_harbison@yahoo.com>
date Tue, 07 Jan 2025 16:46:21 -0500
parents 9db77d46de79
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28914
63fe5ddb8715 tests: make test-url use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28677
diff changeset
1 import doctest
15398
474279be5add tests: fix readline escape characters in heredoctest.py/test-url.py
Brodie Rao <brodie@bitheap.org>
parents: 15018
diff changeset
2 import os
12592
f2937d6492c5 url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
3
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
4
12592
f2937d6492c5 url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
5 def check(a, b):
f2937d6492c5 url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
6 if a != b:
28677
2903558a6991 py3: make test-url use print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 26421
diff changeset
7 print((a, b))
12592
f2937d6492c5 url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
8
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
9
12606
5c8353692123 test-url: refactor with shorter lines
Martin Geisler <mg@aragost.com>
parents: 12592
diff changeset
10 def cert(cn):
20685
56b1f39dd0c1 test-url: move from dict() construction to {} literals
Augie Fackler <raf@durin42.com>
parents: 15611
diff changeset
11 return {'subject': ((('commonName', cn),),)}
12606
5c8353692123 test-url: refactor with shorter lines
Martin Geisler <mg@aragost.com>
parents: 12592
diff changeset
12
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
13
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
14 from mercurial import sslutil
12592
f2937d6492c5 url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
15
28914
63fe5ddb8715 tests: make test-url use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28677
diff changeset
16 _verifycert = sslutil._verifycert
12724
66e7ba85585b test-url: remove trailing whitespace
Augie Fackler <durin42@gmail.com>
parents: 12606
diff changeset
17 # Test non-wildcard certificates
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
18 check(_verifycert(cert('example.com'), 'example.com'), None)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
19 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
20 _verifycert(cert('example.com'), 'www.example.com'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
21 b'certificate is for example.com',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
22 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
23 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
24 _verifycert(cert('www.example.com'), 'example.com'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
25 b'certificate is for www.example.com',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
26 )
12592
f2937d6492c5 url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
27
f2937d6492c5 url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
28 # Test wildcard certificates
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
29 check(_verifycert(cert('*.example.com'), 'www.example.com'), None)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
30 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
31 _verifycert(cert('*.example.com'), 'example.com'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
32 b'certificate is for *.example.com',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
33 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
34 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
35 _verifycert(cert('*.example.com'), 'w.w.example.com'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
36 b'certificate is for *.example.com',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
37 )
12592
f2937d6492c5 url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
38
13249
75d0c38a0bca url: check subjectAltName when verifying ssl certificate
Yuya Nishihara <yuya@tcha.org>
parents: 13248
diff changeset
39 # Test subjectAltName
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
40 san_cert = {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
41 'subject': ((('commonName', 'example.com'),),),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
42 'subjectAltName': (('DNS', '*.example.net'), ('DNS', 'example.net')),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
43 }
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
44 check(_verifycert(san_cert, 'example.net'), None)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
45 check(_verifycert(san_cert, 'foo.example.net'), None)
14666
27b080aa880a sslutil: fall back to commonName when no dNSName in subjectAltName (issue2798)
Nicolas Bareil <nico@chdir.org>
parents: 14313
diff changeset
46 # no fallback to subject commonName when subjectAltName has DNS
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
47 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
48 _verifycert(san_cert, 'example.com'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
49 b'certificate is for *.example.net, example.net',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
50 )
14666
27b080aa880a sslutil: fall back to commonName when no dNSName in subjectAltName (issue2798)
Nicolas Bareil <nico@chdir.org>
parents: 14313
diff changeset
51 # fallback to subject commonName when no DNS in subjectAltName
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
52 san_cert = {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
53 'subject': ((('commonName', 'example.com'),),),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
54 'subjectAltName': (('IP Address', '8.8.8.8'),),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
55 }
14666
27b080aa880a sslutil: fall back to commonName when no dNSName in subjectAltName (issue2798)
Nicolas Bareil <nico@chdir.org>
parents: 14313
diff changeset
56 check(_verifycert(san_cert, 'example.com'), None)
13249
75d0c38a0bca url: check subjectAltName when verifying ssl certificate
Yuya Nishihara <yuya@tcha.org>
parents: 13248
diff changeset
57
12592
f2937d6492c5 url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
58 # Avoid some pitfalls
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
59 check(_verifycert(cert('*.foo'), 'foo'), b'certificate is for *.foo')
29452
26a5d605b868 sslutil: synchronize hostname matching logic with CPython
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29451
diff changeset
60 check(_verifycert(cert('*o'), 'foo'), None)
12592
f2937d6492c5 url: verify correctness of https server certificates (issue2407)
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
61
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
62 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
63 _verifycert({'subject': ()}, 'example.com'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
64 b'no commonName or subjectAltName found in certificate',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
65 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
66 check(_verifycert(None, 'example.com'), b'no certificate received')
13248
00411a4fa1bb url: fix UnicodeDecodeError on certificate verification error
Yuya Nishihara <yuya@tcha.org>
parents: 12865
diff changeset
67
14666
27b080aa880a sslutil: fall back to commonName when no dNSName in subjectAltName (issue2798)
Nicolas Bareil <nico@chdir.org>
parents: 14313
diff changeset
68 # Unicode (IDN) certname isn't supported
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
69 check(
52664
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
70 _verifycert(cert('\u4f8b.jp'), 'example.jp'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
71 b'IDN in certificate not supported',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
72 )
14666
27b080aa880a sslutil: fall back to commonName when no dNSName in subjectAltName (issue2798)
Nicolas Bareil <nico@chdir.org>
parents: 14313
diff changeset
73
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
74 # The following tests are from CPython's test_ssl.py.
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
75 check(_verifycert(cert('example.com'), 'example.com'), None)
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
76 check(_verifycert(cert('example.com'), 'ExAmple.cOm'), None)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
77 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
78 _verifycert(cert('example.com'), 'www.example.com'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
79 b'certificate is for example.com',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
80 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
81 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
82 _verifycert(cert('example.com'), '.example.com'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
83 b'certificate is for example.com',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
84 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
85 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
86 _verifycert(cert('example.com'), 'example.org'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
87 b'certificate is for example.com',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
88 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
89 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
90 _verifycert(cert('example.com'), 'exampleXcom'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
91 b'certificate is for example.com',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
92 )
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
93 check(_verifycert(cert('*.a.com'), 'foo.a.com'), None)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
94 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
95 _verifycert(cert('*.a.com'), 'bar.foo.a.com'), b'certificate is for *.a.com'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
96 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
97 check(_verifycert(cert('*.a.com'), 'a.com'), b'certificate is for *.a.com')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
98 check(_verifycert(cert('*.a.com'), 'Xa.com'), b'certificate is for *.a.com')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
99 check(_verifycert(cert('*.a.com'), '.a.com'), b'certificate is for *.a.com')
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
100
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
101 # only match one left-most wildcard
29452
26a5d605b868 sslutil: synchronize hostname matching logic with CPython
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29451
diff changeset
102 check(_verifycert(cert('f*.com'), 'foo.com'), None)
26a5d605b868 sslutil: synchronize hostname matching logic with CPython
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29451
diff changeset
103 check(_verifycert(cert('f*.com'), 'f.com'), None)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
104 check(_verifycert(cert('f*.com'), 'bar.com'), b'certificate is for f*.com')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
105 check(_verifycert(cert('f*.com'), 'foo.a.com'), b'certificate is for f*.com')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
106 check(_verifycert(cert('f*.com'), 'bar.foo.com'), b'certificate is for f*.com')
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
107
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
108 # NULL bytes are bad, CVE-2013-4073
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
109 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
110 _verifycert(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
111 cert('null.python.org\x00example.org'), 'null.python.org\x00example.org'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
112 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
113 None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
114 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
115 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
116 _verifycert(cert('null.python.org\x00example.org'), 'example.org'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
117 b'certificate is for null.python.org\x00example.org',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
118 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
119 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
120 _verifycert(cert('null.python.org\x00example.org'), 'null.python.org'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
121 b'certificate is for null.python.org\x00example.org',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
122 )
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
123
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
124 # error cases with wildcards
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
125 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
126 _verifycert(cert('*.*.a.com'), 'bar.foo.a.com'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
127 b'certificate is for *.*.a.com',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
128 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
129 check(_verifycert(cert('*.*.a.com'), 'a.com'), b'certificate is for *.*.a.com')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
130 check(_verifycert(cert('*.*.a.com'), 'Xa.com'), b'certificate is for *.*.a.com')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
131 check(_verifycert(cert('*.*.a.com'), '.a.com'), b'certificate is for *.*.a.com')
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
132
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
133 check(_verifycert(cert('a.*.com'), 'a.foo.com'), b'certificate is for a.*.com')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
134 check(_verifycert(cert('a.*.com'), 'a..com'), b'certificate is for a.*.com')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
135 check(_verifycert(cert('a.*.com'), 'a.com'), b'certificate is for a.*.com')
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
136
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
137 # wildcard doesn't match IDNA prefix 'xn--'
52664
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
138 idna = 'püthon.python.org'.encode('idna').decode('ascii')
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
139 check(_verifycert(cert(idna), idna), None)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
140 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
141 _verifycert(cert('x*.python.org'), idna),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
142 b'certificate is for x*.python.org',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
143 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
144 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
145 _verifycert(cert('xn--p*.python.org'), idna),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
146 b'certificate is for xn--p*.python.org',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
147 )
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
148
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
149 # wildcard in first fragment and IDNA A-labels in sequent fragments
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
150 # are supported.
52664
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
151 idna = 'www*.pythön.org'.encode('idna').decode('ascii')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
152 check(
52664
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
153 _verifycert(cert(idna), 'www.pythön.org'.encode('idna').decode('ascii')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
154 None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
155 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
156 check(
52664
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
157 _verifycert(cert(idna), 'www1.pythön.org'.encode('idna').decode('ascii')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
158 None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
159 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
160 check(
52664
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
161 _verifycert(cert(idna), 'ftp.pythön.org'.encode('idna').decode('ascii')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
162 b'certificate is for www*.xn--pythn-mua.org',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
163 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
164 check(
52664
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
165 _verifycert(cert(idna), 'pythön.org'.encode('idna').decode('ascii')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
166 b'certificate is for www*.xn--pythn-mua.org',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
167 )
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
168
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
169 c = {
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
170 'notAfter': 'Jun 26 21:41:46 2011 GMT',
52664
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
171 'subject': ((('commonName', 'linuxfrz.org'),),),
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
172 'subjectAltName': (
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
173 ('DNS', 'linuxfr.org'),
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
174 ('DNS', 'linuxfr.com'),
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
175 ('othername', '<unsupported>'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
176 ),
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
177 }
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
178 check(_verifycert(c, 'linuxfr.org'), None)
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
179 check(_verifycert(c, 'linuxfr.com'), None)
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
180 # Not a "DNS" entry
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
181 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
182 _verifycert(c, '<unsupported>'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
183 b'certificate is for linuxfr.org, linuxfr.com',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
184 )
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
185 # When there is a subjectAltName, commonName isn't used
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
186 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
187 _verifycert(c, 'linuxfrz.org'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
188 b'certificate is for linuxfr.org, linuxfr.com',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
189 )
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
190
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
191 # A pristine real-world example
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
192 c = {
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
193 'notAfter': 'Dec 18 23:59:59 2011 GMT',
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
194 'subject': (
52664
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
195 (('countryName', 'US'),),
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
196 (('stateOrProvinceName', 'California'),),
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
197 (('localityName', 'Mountain View'),),
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
198 (('organizationName', 'Google Inc'),),
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
199 (('commonName', 'mail.google.com'),),
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
200 ),
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
201 }
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
202 check(_verifycert(c, 'mail.google.com'), None)
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
203 check(_verifycert(c, 'gmail.com'), b'certificate is for mail.google.com')
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
204
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
205 # Only commonName is considered
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
206 check(_verifycert(c, 'California'), b'certificate is for mail.google.com')
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
207
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
208 # Neither commonName nor subjectAltName
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
209 c = {
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
210 'notAfter': 'Dec 18 23:59:59 2011 GMT',
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
211 'subject': (
52664
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
212 (('countryName', 'US'),),
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
213 (('stateOrProvinceName', 'California'),),
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
214 (('localityName', 'Mountain View'),),
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
215 (('organizationName', 'Google Inc'),),
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
216 ),
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
217 }
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
218 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
219 _verifycert(c, 'mail.google.com'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
220 b'no commonName or subjectAltName found in certificate',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
221 )
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
222
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
223 # No DNS entry in subjectAltName but a commonName
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
224 c = {
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
225 'notAfter': 'Dec 18 23:59:59 2099 GMT',
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
226 'subject': (
52664
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
227 (('countryName', 'US'),),
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
228 (('stateOrProvinceName', 'California'),),
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
229 (('localityName', 'Mountain View'),),
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
230 (('commonName', 'mail.google.com'),),
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
231 ),
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
232 'subjectAltName': (('othername', 'blabla'),),
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
233 }
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
234 check(_verifycert(c, 'mail.google.com'), None)
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
235
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
236 # No DNS entry subjectAltName and no commonName
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
237 c = {
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
238 'notAfter': 'Dec 18 23:59:59 2099 GMT',
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
239 'subject': (
52664
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
240 (('countryName', 'US'),),
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
241 (('stateOrProvinceName', 'California'),),
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
242 (('localityName', 'Mountain View'),),
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
243 (('organizationName', 'Google Inc'),),
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
244 ),
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
245 'subjectAltName': (('othername', 'blabla'),),
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
246 }
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
247 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
248 _verifycert(c, 'google.com'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
249 b'no commonName or subjectAltName found in certificate',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
250 )
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
251
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
252 # Empty cert / no cert
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
253 check(_verifycert(None, 'example.com'), b'no certificate received')
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
254 check(_verifycert({}, 'example.com'), b'no certificate received')
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
255
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
256 # avoid denials of service by refusing more than one
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
257 # wildcard per fragment.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
258 check(
52664
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
259 _verifycert({'subject': ((('commonName', 'a*b.com'),),)}, 'axxb.com'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
260 None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
261 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
262 check(
52664
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
263 _verifycert({'subject': ((('commonName', 'a*b.co*'),),)}, 'axxb.com'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
264 b'certificate is for a*b.co*',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
265 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
266 check(
52664
9db77d46de79 py3: drop redundant `u''` prefixes on string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 48966
diff changeset
267 _verifycert({'subject': ((('commonName', 'a*b*.com'),),)}, 'axxbxxc.com'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
268 b'too many wildcards in certificate DNS name: a*b*.com',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
269 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
270
29451
676f4d0e3a7b tests: import CPython's hostname matching tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28914
diff changeset
271
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
272 def test_url():
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
273 """
37918
0dcd03637d36 tests: fix error case in test-url.py's doctest
Augie Fackler <augie@google.com>
parents: 29452
diff changeset
274 >>> from mercurial import error, pycompat
46907
ffd3e823a7e5 urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45687
diff changeset
275 >>> from mercurial.utils.urlutil import url
37999
d088810c496e tests: fix deprecation warning in test-url.py
Augie Fackler <augie@google.com>
parents: 37919
diff changeset
276 >>> from mercurial.utils.stringutil import forcebytestr
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
277
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
278 This tests for edge cases in url.URL's parsing algorithm. Most of
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
279 these aren't useful for documentation purposes, so they aren't
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
280 part of the class's doc tests.
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
281
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
282 Query strings and fragments:
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
283
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
284 >>> url(b'http://host/a?b#c')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
285 <url scheme: 'http', host: 'host', path: 'a', query: 'b', fragment: 'c'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
286 >>> url(b'http://host/a?')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
287 <url scheme: 'http', host: 'host', path: 'a'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
288 >>> url(b'http://host/a#b#c')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
289 <url scheme: 'http', host: 'host', path: 'a', fragment: 'b#c'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
290 >>> url(b'http://host/a#b?c')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
291 <url scheme: 'http', host: 'host', path: 'a', fragment: 'b?c'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
292 >>> url(b'http://host/?a#b')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
293 <url scheme: 'http', host: 'host', path: '', query: 'a', fragment: 'b'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
294 >>> url(b'http://host/?a#b', parsequery=False)
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
295 <url scheme: 'http', host: 'host', path: '?a', fragment: 'b'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
296 >>> url(b'http://host/?a#b', parsefragment=False)
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
297 <url scheme: 'http', host: 'host', path: '', query: 'a#b'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
298 >>> url(b'http://host/?a#b', parsequery=False, parsefragment=False)
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
299 <url scheme: 'http', host: 'host', path: '?a#b'>
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
300
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
301 IPv6 addresses:
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
302
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
303 >>> url(b'ldap://[2001:db8::7]/c=GB?objectClass?one')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
304 <url scheme: 'ldap', host: '[2001:db8::7]', path: 'c=GB',
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
305 query: 'objectClass?one'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
306 >>> url(b'ldap://joe:xxx@[2001:db8::7]:80/c=GB?objectClass?one')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
307 <url scheme: 'ldap', user: 'joe', passwd: 'xxx', host: '[2001:db8::7]',
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
308 port: '80', path: 'c=GB', query: 'objectClass?one'>
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
309
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
310 Missing scheme, host, etc.:
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
311
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
312 >>> url(b'://192.0.2.16:80/')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
313 <url path: '://192.0.2.16:80/'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
314 >>> url(b'https://mercurial-scm.org')
26421
4b0fc75f9403 urls: bulk-change primary website URLs
Matt Mackall <mpm@selenic.com>
parents: 20685
diff changeset
315 <url scheme: 'https', host: 'mercurial-scm.org'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
316 >>> url(b'/foo')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
317 <url path: '/foo'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
318 >>> url(b'bundle:/foo')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
319 <url scheme: 'bundle', path: '/foo'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
320 >>> url(b'a?b#c')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
321 <url path: 'a?b', fragment: 'c'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
322 >>> url(b'http://x.com?arg=/foo')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
323 <url scheme: 'http', host: 'x.com', query: 'arg=/foo'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
324 >>> url(b'http://joe:xxx@/foo')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
325 <url scheme: 'http', user: 'joe', passwd: 'xxx', path: 'foo'>
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
326
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
327 Just a scheme and a path:
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
328
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
329 >>> url(b'mailto:John.Doe@example.com')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
330 <url scheme: 'mailto', path: 'John.Doe@example.com'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
331 >>> url(b'a:b:c:d')
13808
58b86b9149f1 url: fix tests
Matt Mackall <mpm@selenic.com>
parents: 13770
diff changeset
332 <url path: 'a:b:c:d'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
333 >>> url(b'aa:bb:cc:dd')
13808
58b86b9149f1 url: fix tests
Matt Mackall <mpm@selenic.com>
parents: 13770
diff changeset
334 <url scheme: 'aa', path: 'bb:cc:dd'>
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
335
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
336 SSH examples:
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
337
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
338 >>> url(b'ssh://joe@host//home/joe')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
339 <url scheme: 'ssh', user: 'joe', host: 'host', path: '/home/joe'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
340 >>> url(b'ssh://joe:xxx@host/src')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
341 <url scheme: 'ssh', user: 'joe', passwd: 'xxx', host: 'host', path: 'src'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
342 >>> url(b'ssh://joe:xxx@host')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
343 <url scheme: 'ssh', user: 'joe', passwd: 'xxx', host: 'host'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
344 >>> url(b'ssh://joe@host')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
345 <url scheme: 'ssh', user: 'joe', host: 'host'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
346 >>> url(b'ssh://host')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
347 <url scheme: 'ssh', host: 'host'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
348 >>> url(b'ssh://')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
349 <url scheme: 'ssh'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
350 >>> url(b'ssh:')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
351 <url scheme: 'ssh'>
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
352
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
353 Non-numeric port:
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
354
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
355 >>> url(b'http://example.com:dd')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
356 <url scheme: 'http', host: 'example.com', port: 'dd'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
357 >>> url(b'ssh://joe:xxx@host:ssh/foo')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
358 <url scheme: 'ssh', user: 'joe', passwd: 'xxx', host: 'host', port: 'ssh',
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
359 path: 'foo'>
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
360
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
361 Bad authentication credentials:
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
362
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
363 >>> url(b'http://joe@joeville:123@4:@host/a?b#c')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
364 <url scheme: 'http', user: 'joe@joeville', passwd: '123@4:',
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
365 host: 'host', path: 'a', query: 'b', fragment: 'c'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
366 >>> url(b'http://!*#?/@!*#?/:@host/a?b#c')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
367 <url scheme: 'http', host: '!*', fragment: '?/@!*#?/:@host/a?b#c'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
368 >>> url(b'http://!*#?@!*#?:@host/a?b#c')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
369 <url scheme: 'http', host: '!*', fragment: '?@!*#?:@host/a?b#c'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
370 >>> url(b'http://!*@:!*@@host/a?b#c')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
371 <url scheme: 'http', user: '!*@', passwd: '!*@', host: 'host',
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
372 path: 'a', query: 'b', fragment: 'c'>
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
373
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
374 File paths:
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
375
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
376 >>> url(b'a/b/c/d.g.f')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
377 <url path: 'a/b/c/d.g.f'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
378 >>> url(b'/x///z/y/')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
379 <url path: '/x///z/y/'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
380 >>> url(b'/foo:bar')
13848
b2798c1defff url: be stricter about detecting schemes
Brodie Rao <brodie@bitheap.org>
parents: 13827
diff changeset
381 <url path: '/foo:bar'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
382 >>> url(b'\\\\foo:bar')
13848
b2798c1defff url: be stricter about detecting schemes
Brodie Rao <brodie@bitheap.org>
parents: 13827
diff changeset
383 <url path: '\\\\foo:bar'>
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
384 >>> url(b'./foo:bar')
13848
b2798c1defff url: be stricter about detecting schemes
Brodie Rao <brodie@bitheap.org>
parents: 13827
diff changeset
385 <url path: './foo:bar'>
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
386
13817
7f18bab2c0b0 url: abort on file:// URLs with non-localhost hosts
Brodie Rao <brodie@bitheap.org>
parents: 13808
diff changeset
387 Non-localhost file URL:
7f18bab2c0b0 url: abort on file:// URLs with non-localhost hosts
Brodie Rao <brodie@bitheap.org>
parents: 13808
diff changeset
388
37918
0dcd03637d36 tests: fix error case in test-url.py's doctest
Augie Fackler <augie@google.com>
parents: 29452
diff changeset
389 >>> try:
0dcd03637d36 tests: fix error case in test-url.py's doctest
Augie Fackler <augie@google.com>
parents: 29452
diff changeset
390 ... u = url(b'file://mercurial-scm.org/foo')
0dcd03637d36 tests: fix error case in test-url.py's doctest
Augie Fackler <augie@google.com>
parents: 29452
diff changeset
391 ... except error.Abort as e:
45687
223296268c4e tests: fix test-url.py on py3, broken by D9179
Martin von Zweigbergk <martinvonz@google.com>
parents: 45682
diff changeset
392 ... pycompat.bytestr(e.message)
37918
0dcd03637d36 tests: fix error case in test-url.py's doctest
Augie Fackler <augie@google.com>
parents: 29452
diff changeset
393 'file:// URLs can only refer to localhost'
13817
7f18bab2c0b0 url: abort on file:// URLs with non-localhost hosts
Brodie Rao <brodie@bitheap.org>
parents: 13808
diff changeset
394
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
395 Empty URL:
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
396
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
397 >>> u = url(b'')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
398 >>> u
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
399 <url path: ''>
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
400 >>> str(u)
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
401 ''
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
402
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
403 Empty path with query string:
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
404
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
405 >>> str(url(b'http://foo/?bar'))
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
406 'http://foo/?bar'
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
407
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
408 Invalid path:
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
409
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
410 >>> u = url(b'http://foo/bar')
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
411 >>> u.path = b'bar'
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
412 >>> str(u)
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
413 'http://foo/bar'
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
414
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
415 >>> u = url(b'file:/foo/bar/baz')
14313
a389dd285282 util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14204
diff changeset
416 >>> u
a389dd285282 util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14204
diff changeset
417 <url scheme: 'file', path: '/foo/bar/baz'>
a389dd285282 util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14204
diff changeset
418 >>> str(u)
a389dd285282 util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14204
diff changeset
419 'file:///foo/bar/baz'
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
420 >>> pycompat.bytestr(u.localpath())
15018
e89f62dcd723 url: really handle urls of the form file:///c:/foo/bar/ correctly
Mads Kiilerich <mads@kiilerich.com>
parents: 14666
diff changeset
421 '/foo/bar/baz'
14313
a389dd285282 util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14204
diff changeset
422
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
423 >>> u = url(b'file:///foo/bar/baz')
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
424 >>> u
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
425 <url scheme: 'file', path: '/foo/bar/baz'>
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
426 >>> str(u)
14313
a389dd285282 util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14204
diff changeset
427 'file:///foo/bar/baz'
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
428 >>> pycompat.bytestr(u.localpath())
15018
e89f62dcd723 url: really handle urls of the form file:///c:/foo/bar/ correctly
Mads Kiilerich <mads@kiilerich.com>
parents: 14666
diff changeset
429 '/foo/bar/baz'
e89f62dcd723 url: really handle urls of the form file:///c:/foo/bar/ correctly
Mads Kiilerich <mads@kiilerich.com>
parents: 14666
diff changeset
430
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
431 >>> u = url(b'file:///f:oo/bar/baz')
15018
e89f62dcd723 url: really handle urls of the form file:///c:/foo/bar/ correctly
Mads Kiilerich <mads@kiilerich.com>
parents: 14666
diff changeset
432 >>> u
e89f62dcd723 url: really handle urls of the form file:///c:/foo/bar/ correctly
Mads Kiilerich <mads@kiilerich.com>
parents: 14666
diff changeset
433 <url scheme: 'file', path: 'f:oo/bar/baz'>
e89f62dcd723 url: really handle urls of the form file:///c:/foo/bar/ correctly
Mads Kiilerich <mads@kiilerich.com>
parents: 14666
diff changeset
434 >>> str(u)
15611
ec8a49c46d7e merge with stable
Matt Mackall <mpm@selenic.com>
parents: 15513 15609
diff changeset
435 'file:///f:oo/bar/baz'
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
436 >>> pycompat.bytestr(u.localpath())
15018
e89f62dcd723 url: really handle urls of the form file:///c:/foo/bar/ correctly
Mads Kiilerich <mads@kiilerich.com>
parents: 14666
diff changeset
437 'f:oo/bar/baz'
14313
a389dd285282 util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14204
diff changeset
438
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
439 >>> u = url(b'file://localhost/f:oo/bar/baz')
15496
396e83d635a6 url: handle file://localhost/c:/foo "correctly"
Mads Kiilerich <mads@kiilerich.com>
parents: 15398
diff changeset
440 >>> u
396e83d635a6 url: handle file://localhost/c:/foo "correctly"
Mads Kiilerich <mads@kiilerich.com>
parents: 15398
diff changeset
441 <url scheme: 'file', host: 'localhost', path: 'f:oo/bar/baz'>
396e83d635a6 url: handle file://localhost/c:/foo "correctly"
Mads Kiilerich <mads@kiilerich.com>
parents: 15398
diff changeset
442 >>> str(u)
15513
646759147717 merge with stable
Matt Mackall <mpm@selenic.com>
parents: 15452 15496
diff changeset
443 'file://localhost/f:oo/bar/baz'
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
444 >>> pycompat.bytestr(u.localpath())
15496
396e83d635a6 url: handle file://localhost/c:/foo "correctly"
Mads Kiilerich <mads@kiilerich.com>
parents: 15398
diff changeset
445 'f:oo/bar/baz'
396e83d635a6 url: handle file://localhost/c:/foo "correctly"
Mads Kiilerich <mads@kiilerich.com>
parents: 15398
diff changeset
446
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
447 >>> u = url(b'file:foo/bar/baz')
14313
a389dd285282 util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14204
diff changeset
448 >>> u
a389dd285282 util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14204
diff changeset
449 <url scheme: 'file', path: 'foo/bar/baz'>
a389dd285282 util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14204
diff changeset
450 >>> str(u)
a389dd285282 util: make str(url) return file:/// for abs paths again
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14204
diff changeset
451 'file:foo/bar/baz'
37919
078c3eec2d5c tests: port test-url.py to Python 3
Augie Fackler <augie@google.com>
parents: 37918
diff changeset
452 >>> pycompat.bytestr(u.localpath())
15018
e89f62dcd723 url: really handle urls of the form file:///c:/foo/bar/ correctly
Mads Kiilerich <mads@kiilerich.com>
parents: 14666
diff changeset
453 'foo/bar/baz'
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
454 """
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
455
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37999
diff changeset
456
15398
474279be5add tests: fix readline escape characters in heredoctest.py/test-url.py
Brodie Rao <brodie@bitheap.org>
parents: 15018
diff changeset
457 if 'TERM' in os.environ:
474279be5add tests: fix readline escape characters in heredoctest.py/test-url.py
Brodie Rao <brodie@bitheap.org>
parents: 15018
diff changeset
458 del os.environ['TERM']
474279be5add tests: fix readline escape characters in heredoctest.py/test-url.py
Brodie Rao <brodie@bitheap.org>
parents: 15018
diff changeset
459
13770
4e8f2310f310 url: provide url object
Brodie Rao <brodie@bitheap.org>
parents: 13249
diff changeset
460 doctest.testmod(optionflags=doctest.NORMALIZE_WHITESPACE)