Skip to content

Commit d15a940

Browse files
authored
Merge branch 'master' into fix_some_type_issues
2 parents 39589f0 + 77433f9 commit d15a940

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

src/hyperlink/_url.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ def _make_quote_map(safe_chars):
230230
_QUERY_KEY_QUOTE_MAP = _make_quote_map(_QUERY_KEY_SAFE)
231231
_QUERY_KEY_DECODE_MAP = _make_decode_map(_QUERY_KEY_DELIMS)
232232
_QUERY_VALUE_QUOTE_MAP = _make_quote_map(_QUERY_VALUE_SAFE)
233-
_QUERY_VALUE_DECODE_MAP = _make_decode_map(_QUERY_VALUE_DELIMS)
233+
_QUERY_VALUE_DECODE_MAP = _make_decode_map(_QUERY_VALUE_DELIMS | set("+"))
234234
_FRAGMENT_QUOTE_MAP = _make_quote_map(_FRAGMENT_SAFE)
235235
_FRAGMENT_DECODE_MAP = _make_decode_map(_FRAGMENT_DELIMS)
236236
_UNRESERVED_QUOTE_MAP = _make_quote_map(_UNRESERVED_CHARS)

src/hyperlink/test/test_decoded_url.py

+28
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,34 @@ def test_durl_basic(self):
3636
assert durl.user == "user"
3737
assert durl.userinfo == ("user", "\0\0\0\0")
3838

39+
def test_roundtrip_iri_parameter_values(self):
40+
# type: () -> None
41+
"""
42+
.to_iri() should never modify the application-level data of a query
43+
parameter.
44+
"""
45+
for value in ["hello", "goodbye", "+", "/", ":", "?"]:
46+
self.assertEqual(
47+
DecodedURL(DecodedURL().set("test", value).to_iri()).get(
48+
"test"
49+
),
50+
[value],
51+
)
52+
53+
def test_roundtrip_uri_parameter_values(self):
54+
# type: () -> None
55+
"""
56+
.to_uri() should never modify the application-level data of a query
57+
parameter.
58+
"""
59+
for value in ["hello", "goodbye", "+", "/", ":", "?"]:
60+
self.assertEqual(
61+
DecodedURL(DecodedURL().set("test", value).to_uri()).get(
62+
"test"
63+
),
64+
[value],
65+
)
66+
3967
def test_passthroughs(self):
4068
# type: () -> None
4169

0 commit comments

Comments
 (0)