summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErlend E. Aasland <erlend@python.org>2023-07-04 22:35:57 (GMT)
committerGitHub <noreply@github.com>2023-07-04 22:35:57 (GMT)
commit2fb9480c8313ab524d333b18e4af09f05f5b8afa (patch)
tree56f756ac6b75bb5a19f86542e91412aa22b4d06a
parent22087516bca0b339a04742765febc9c20a9d6b21 (diff)
downloadcpython-2fb9480c8313ab524d333b18e4af09f05f5b8afa.zip
cpython-2fb9480c8313ab524d333b18e4af09f05f5b8afa.tar.gz
cpython-2fb9480c8313ab524d333b18e4af09f05f5b8afa.tar.bz2
gh-106368: Add tests for formatting helpers in Argument Clinic (#106415)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
-rw-r--r--Lib/test/test_clinic.py164
1 files changed, 164 insertions, 0 deletions
diff --git a/Lib/test/test_clinic.py b/Lib/test/test_clinic.py
index 544e732..c095d14 100644
--- a/Lib/test/test_clinic.py
+++ b/Lib/test/test_clinic.py
@@ -1692,5 +1692,169 @@ class PermutationTests(unittest.TestCase):
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()