Skip to content

Commit

Permalink
pythongh-106368: Add tests for formatting helpers in Argument Clinic (p…
Browse files Browse the repository at this point in the history
…ythonGH-106415)

(cherry picked from commit 2fb9480)

Co-authored-by: Erlend E. Aasland <erlend@python.org>
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
  • Loading branch information
2 people authored and miss-islington committed Jul 4, 2023
1 parent 9f8aa7a commit fd1ec9a
Showing 1 changed file with 164 additions and 0 deletions.
164 changes: 164 additions & 0 deletions Lib/test/test_clinic.py
Original file line number Diff line number Diff line change
Expand Up @@ -1624,5 +1624,169 @@ def test_permute_optional_groups(self):
self.assertEqual(actual, expected)


class FormatHelperTests(unittest.TestCase):

def test_strip_leading_and_trailing_blank_lines(self):
dataset = (
# Input lines, expected output.
("a\nb", "a\nb"),
("a\nb\n", "a\nb"),
("a\nb ", "a\nb"),
("\na\nb\n\n", "a\nb"),
("\n\na\nb\n\n", "a\nb"),
("\n\na\n\nb\n\n", "a\n\nb"),
# Note, leading whitespace is preserved:
(" a\nb", " a\nb"),
(" a\nb ", " a\nb"),
(" \n \n a\nb \n \n ", " a\nb"),
)
for lines, expected in dataset:
with self.subTest(lines=lines, expected=expected):
out = clinic.strip_leading_and_trailing_blank_lines(lines)
self.assertEqual(out, expected)

def test_normalize_snippet(self):
snippet = """
one
two
three
"""

# Expected outputs:
zero_indent = (
"one\n"
"two\n"
"three"
)
four_indent = (
" one\n"
" two\n"
" three"
)
eight_indent = (
" one\n"
" two\n"
" three"
)
expected_outputs = {0: zero_indent, 4: four_indent, 8: eight_indent}
for indent, expected in expected_outputs.items():
with self.subTest(indent=indent):
actual = clinic.normalize_snippet(snippet, indent=indent)
self.assertEqual(actual, expected)

def test_accumulator(self):
acc = clinic.text_accumulator()
self.assertEqual(acc.output(), "")
acc.append("a")
self.assertEqual(acc.output(), "a")
self.assertEqual(acc.output(), "")
acc.append("b")
self.assertEqual(acc.output(), "b")
self.assertEqual(acc.output(), "")
acc.append("c")
acc.append("d")
self.assertEqual(acc.output(), "cd")
self.assertEqual(acc.output(), "")

def test_quoted_for_c_string(self):
dataset = (
# input, expected
(r"abc", r"abc"),
(r"\abc", r"\\abc"),
(r"\a\bc", r"\\a\\bc"),
(r"\a\\bc", r"\\a\\\\bc"),
(r'"abc"', r'\"abc\"'),
(r"'a'", r"\'a\'"),
)
for line, expected in dataset:
with self.subTest(line=line, expected=expected):
out = clinic.quoted_for_c_string(line)
self.assertEqual(out, expected)

def test_rstrip_lines(self):
lines = (
"a \n"
"b\n"
" c\n"
" d \n"
)
expected = (
"a\n"
"b\n"
" c\n"
" d\n"
)
out = clinic.rstrip_lines(lines)
self.assertEqual(out, expected)

def test_format_escape(self):
line = "{}, {a}"
expected = "{{}}, {{a}}"
out = clinic.format_escape(line)
self.assertEqual(out, expected)

def test_indent_all_lines(self):
# Blank lines are expected to be unchanged.
self.assertEqual(clinic.indent_all_lines("", prefix="bar"), "")

lines = (
"one\n"
"two" # The missing newline is deliberate.
)
expected = (
"barone\n"
"bartwo"
)
out = clinic.indent_all_lines(lines, prefix="bar")
self.assertEqual(out, expected)

# If last line is empty, expect it to be unchanged.
lines = (
"\n"
"one\n"
"two\n"
""
)
expected = (
"bar\n"
"barone\n"
"bartwo\n"
""
)
out = clinic.indent_all_lines(lines, prefix="bar")
self.assertEqual(out, expected)

def test_suffix_all_lines(self):
# Blank lines are expected to be unchanged.
self.assertEqual(clinic.suffix_all_lines("", suffix="foo"), "")

lines = (
"one\n"
"two" # The missing newline is deliberate.
)
expected = (
"onefoo\n"
"twofoo"
)
out = clinic.suffix_all_lines(lines, suffix="foo")
self.assertEqual(out, expected)

# If last line is empty, expect it to be unchanged.
lines = (
"\n"
"one\n"
"two\n"
""
)
expected = (
"foo\n"
"onefoo\n"
"twofoo\n"
""
)
out = clinic.suffix_all_lines(lines, suffix="foo")
self.assertEqual(out, expected)


if __name__ == "__main__":
unittest.main()

0 comments on commit fd1ec9a

Please sign in to comment.