1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import pygitweb.formatting as formatting
def test_to_utf8_returns_string_input_unchanged() -> None:
assert formatting.to_utf8("hello") == "hello"
def test_to_utf8_decodes_utf8_bytes_successfully() -> None:
assert formatting.to_utf8("cafe".encode("utf-8")) == "cafe" # noqa: UP012
def test_to_utf8_uses_fallback_encoding_when_utf8_fails() -> None:
assert formatting.to_utf8(b"\xf1") == "ñ"
def test_to_utf8_fallback_decode_uses_replace_for_invalid_bytes() -> None:
original: str = formatting.FALLBACK_ENCODING
formatting.FALLBACK_ENCODING = "ascii"
try:
assert formatting.to_utf8(b"\xffabc") == "\ufffdabc"
finally:
formatting.FALLBACK_ENCODING = original
def test_esc_param_encodes_space_and_slash() -> None:
assert formatting.esc_param("a b/c") == "a+b%2Fc"
def test_esc_path_info_escapes_question_mark() -> None:
assert formatting.esc_path_info("dir/file?.txt") == "dir/file%3F.txt"
def test_esc_url_keeps_url_safe_characters() -> None:
assert formatting.esc_url("https://example.com/a b") == "https://example.com/a%20b"
def test_quot_cec_formats_html_and_plain() -> None:
assert formatting.quot_cec("\n") == '<span class="cntrl">\\n</span>'
assert formatting.quot_cec("\n", nohtml=True) == "\\n"
def test_quot_upr_formats_html_and_plain() -> None:
assert formatting.quot_upr("\x01") == '<span class="cntrl">␁</span>'
assert formatting.quot_upr("\x01", nohtml=True) == "␁"
def test_esc_path_escapes_html_and_control_chars() -> None:
assert formatting.esc_path("a<\n") == 'a<<span class="cntrl">\\n</span>'
def test_esc_path_nbsp_replaces_spaces() -> None:
assert formatting.esc_path("a b", nbsp=True) == "a b"
def test_sanitize_preserves_whitespace_controls_and_escapes_others() -> None:
assert formatting.sanitize("x\t\n\r\x01") == "x\t\n\r\\01"
def test_unquote_unescapes_quoted_sequences() -> None:
assert formatting.unquote('"a\\tb\\040c"') == "a\tb c"
def test_unquote_returns_input_when_not_wrapped_in_quotes() -> None:
assert formatting.unquote("plain\\ntext") == "plain\\ntext"
def test_untabify_expands_tabs_to_next_tab_stop() -> None:
assert formatting.untabify("a\tb", tabwidth=4) == "a b"