[Python-checkins] [3.12] gh-106368: Increase coverage for Argument Clinic output directive (GH-106979) (#106994)

erlend-aasland webhook-mailer at python.org
Sat Jul 22 06:48:38 EDT 2023


https://github.com/python/cpython/commit/76fd98a675d0c1a4f61735f9038e1f8282b60177
commit: 76fd98a675d0c1a4f61735f9038e1f8282b60177
branch: 3.12
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: erlend-aasland <erlend.aasland at protonmail.com>
date: 2023-07-22T12:48:35+02:00
summary:

[3.12] gh-106368: Increase coverage for Argument Clinic output directive (GH-106979) (#106994)

(cherry picked from commit ee5c01b473eeadb007b9f330db3143e34e46038b)

Co-authored-by: Erlend E. Aasland <erlend at python.org>

files:
M Lib/test/test_clinic.py

diff --git a/Lib/test/test_clinic.py b/Lib/test/test_clinic.py
index e40579b0041cf..c24b8cd3899f2 100644
--- a/Lib/test/test_clinic.py
+++ b/Lib/test/test_clinic.py
@@ -249,6 +249,59 @@ def test_cpp_monitor_fail_no_matching_if(self):
         out = self.expect_failure(raw)
         self.assertEqual(out, msg)
 
+    def test_directive_output_unknown_preset(self):
+        out = self.expect_failure("""
+            /*[clinic input]
+            output preset nosuchpreset
+            [clinic start generated code]*/
+        """)
+        msg = "Unknown preset 'nosuchpreset'"
+        self.assertIn(msg, out)
+
+    def test_directive_output_cant_pop(self):
+        out = self.expect_failure("""
+            /*[clinic input]
+            output pop
+            [clinic start generated code]*/
+        """)
+        msg = "Can't 'output pop', stack is empty"
+        self.assertIn(msg, out)
+
+    def test_directive_output_print(self):
+        raw = dedent("""
+            /*[clinic input]
+            output print 'I told you once.'
+            [clinic start generated code]*/
+        """)
+        out = self.clinic.parse(raw)
+        # The generated output will differ for every run, but we can check that
+        # it starts with the clinic block, we check that it contains all the
+        # expected fields, and we check that it contains the checksum line.
+        self.assertTrue(out.startswith(dedent("""
+            /*[clinic input]
+            output print 'I told you once.'
+            [clinic start generated code]*/
+        """)))
+        fields = {
+            "cpp_endif",
+            "cpp_if",
+            "docstring_definition",
+            "docstring_prototype",
+            "impl_definition",
+            "impl_prototype",
+            "methoddef_define",
+            "methoddef_ifndef",
+            "parser_definition",
+            "parser_prototype",
+        }
+        for field in fields:
+            with self.subTest(field=field):
+                self.assertIn(field, out)
+        last_line = out.rstrip().split("\n")[-1]
+        self.assertTrue(
+            last_line.startswith("/*[clinic end generated code: output=")
+        )
+
     def test_unknown_destination_command(self):
         out = self.expect_failure("""
             /*[clinic input]



More information about the Python-checkins mailing list