]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.12] gh-106368: Increase coverage for Argument Clinic output directive (GH-106979...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Sat, 22 Jul 2023 10:48:35 +0000 (03:48 -0700)
committerGitHub <noreply@github.com>
Sat, 22 Jul 2023 10:48:35 +0000 (12:48 +0200)
(cherry picked from commit ee5c01b473eeadb007b9f330db3143e34e46038b)

Co-authored-by: Erlend E. Aasland <erlend@python.org>
Lib/test/test_clinic.py

index e40579b0041cf38a23ad89d10131c0cfebe2a4cf..c24b8cd3899f28ce14d4ecf2064cce4611e21fde 100644 (file)
@@ -249,6 +249,59 @@ class ClinicWholeFileTest(_ParserBase):
         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]