]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-106368: Increase coverage for Argument Clinic output directive (#106979)
authorErlend E. Aasland <erlend@python.org>
Sat, 22 Jul 2023 09:32:10 +0000 (11:32 +0200)
committerGitHub <noreply@github.com>
Sat, 22 Jul 2023 09:32:10 +0000 (09:32 +0000)
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]