1 | # coding: utf-8
|
---|
2 |
|
---|
3 | import pytest
|
---|
4 | import rfc3986
|
---|
5 | import sys
|
---|
6 | from rfc3986.exceptions import InvalidAuthority
|
---|
7 |
|
---|
8 | try:
|
---|
9 | import idna
|
---|
10 | except ImportError:
|
---|
11 | idna = None
|
---|
12 |
|
---|
13 |
|
---|
14 | requires_idna = pytest.mark.skipif(
|
---|
15 | idna is None, reason="This test requires the 'idna' module"
|
---|
16 | )
|
---|
17 | iri_to_uri = pytest.mark.parametrize(
|
---|
18 | ["iri", "uri"],
|
---|
19 | [
|
---|
20 | (u"http://Bücher.de", u"http://xn--bcher-kva.de"),
|
---|
21 | (u"http://faß.de", u"http://xn--fa-hia.de"),
|
---|
22 | (
|
---|
23 | u"http://βόλος.com/β/ό?λ#ος",
|
---|
24 | u"http://xn--nxasmm1c.com/%CE%B2/%CF%8C?%CE%BB#%CE%BF%CF%82",
|
---|
25 | ),
|
---|
26 | (u"http://ශ්\u200dරී.com", u"http://xn--10cl1a0b660p.com"),
|
---|
27 | (u"http://نامه\u200cای.com", u"http://xn--mgba3gch31f060k.com"),
|
---|
28 | (u"http://Bü:ẞ@gOoGle.com", u"http://B%C3%BC:%E1%BA%9E@gOoGle.com"),
|
---|
29 | (u"http://ẞ.com:443", u"http://xn--zca.com:443"),
|
---|
30 | (u"http://ẞ.foo.com", u"http://xn--zca.foo.com"),
|
---|
31 | (u"http://Bẞ.com", u"http://xn--b-qfa.com"),
|
---|
32 | (
|
---|
33 | u"http+unix://%2Ftmp%2FTEST.sock/get",
|
---|
34 | "http+unix://%2Ftmp%2FTEST.sock/get",
|
---|
35 | ),
|
---|
36 | ],
|
---|
37 | )
|
---|
38 |
|
---|
39 |
|
---|
40 | @requires_idna
|
---|
41 | @iri_to_uri
|
---|
42 | def test_encode_iri(iri, uri):
|
---|
43 | assert rfc3986.iri_reference(iri).encode().unsplit() == uri
|
---|
44 |
|
---|
45 |
|
---|
46 | @iri_to_uri
|
---|
47 | def test_iri_equality(iri, uri):
|
---|
48 | assert rfc3986.iri_reference(iri) == iri
|
---|
49 |
|
---|
50 |
|
---|
51 | def test_iri_equality_special_cases():
|
---|
52 | assert rfc3986.iri_reference(u"http://Bü:ẞ@βόλος.com/β/ό?λ#ος") == (
|
---|
53 | u"http",
|
---|
54 | u"Bü:ẞ@βόλος.com",
|
---|
55 | u"/%CE%B2/%CF%8C",
|
---|
56 | u"%CE%BB",
|
---|
57 | u"%CE%BF%CF%82",
|
---|
58 | )
|
---|
59 |
|
---|
60 | with pytest.raises(TypeError):
|
---|
61 | rfc3986.iri_reference(u"http://ẞ.com") == 1
|
---|
62 |
|
---|
63 |
|
---|
64 | @requires_idna
|
---|
65 | @pytest.mark.parametrize(
|
---|
66 | "iri",
|
---|
67 | [
|
---|
68 | u"http://♥.net",
|
---|
69 | u"http://\u0378.net",
|
---|
70 | pytest.param(
|
---|
71 | u"http://㛼.com",
|
---|
72 | marks=pytest.mark.skipif(
|
---|
73 | sys.version_info < (3, 3) and sys.maxunicode <= 0xFFFF,
|
---|
74 | reason="Python configured without UCS-4 support",
|
---|
75 | ),
|
---|
76 | ),
|
---|
77 | ],
|
---|
78 | )
|
---|
79 | def test_encode_invalid_iri(iri):
|
---|
80 | iri_ref = rfc3986.iri_reference(iri)
|
---|
81 | with pytest.raises(InvalidAuthority):
|
---|
82 | iri_ref.encode()
|
---|