diff --git a/tests/test_tinycss2.py b/tests/test_tinycss2.py index 98fbf7c..bf4fbe5 100644 --- a/tests/test_tinycss2.py +++ b/tests/test_tinycss2.py @@ -691,6 +691,14 @@ def test_serialize_e_in_unit(source): assert serialize(rules) == source.replace('\\45', '\\65') +@pytest.mark.parametrize('source', ['url(\\1)', 'url(a\\b c)', 'url(\\7f)']) +def test_serialize_control_in_url(source): + url_token, = parse_component_value_list(source) + reparsed, = parse_component_value_list(serialize([url_token])) + assert reparsed.type == 'url' + assert reparsed.value == url_token.value + + def test_backslash_delim(): source = '\\\nfoo' tokens = parse_component_value_list(source) diff --git a/tinycss2/serializer.py b/tinycss2/serializer.py index 032b924..cec8371 100644 --- a/tinycss2/serializer.py +++ b/tinycss2/serializer.py @@ -96,6 +96,7 @@ def serialize_url(value): r'\C ' if c == '\f' else r'\(' if c == '(' else r'\)' if c == ')' else + '\\%X ' % ord(c) if c <= '\x1f' or c == '\x7f' else c for c in value )