annotate tests/test-url.py @ 48670:6d2ddea0721a stable

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