https://github.com/python/cpython/commit/4b9ed4e642ad475e46f0496c9d98a56bed85d2ec
commit: 4b9ed4e642ad475e46f0496c9d98a56bed85d2ec
branch: 3.14
author: Miss Islington (bot) <[email protected]>
committer: JelleZijlstra <[email protected]>
date: 2025-11-10T15:19:48Z
summary:

[3.14] gh-141174: Improve `annotationlib.call_annotate_function()` test 
coverage (GH-141176) (#141355)

gh-141174: Improve `annotationlib.call_annotate_function()` test coverage 
(GH-141176)

* Test passing unsupported Format values to call_annotate_function()

* Test call_evaluate_function with fake globals that raise errors

* Fix typo and comparison in test_fake_global_evaluation
(cherry picked from commit 1110e8f6a4a767f6d09b121017442528733b380b)

Co-authored-by: dr-carlos <[email protected]>

files:
M Lib/test/test_annotationlib.py

diff --git a/Lib/test/test_annotationlib.py b/Lib/test/test_annotationlib.py
index f1d32ab50cf82b..579b01349b30c5 100644
--- a/Lib/test/test_annotationlib.py
+++ b/Lib/test/test_annotationlib.py
@@ -1315,6 +1315,32 @@ def evaluate(format, exc=NotImplementedError):
             "undefined",
         )
 
+    def test_fake_global_evaluation(self):
+        # This will raise an AttributeError
+        def evaluate_union(format, exc=NotImplementedError):
+            if format == Format.VALUE_WITH_FAKE_GLOBALS:
+                # Return a ForwardRef
+                return builtins.undefined | list[int]
+            raise exc
+
+        self.assertEqual(
+            annotationlib.call_evaluate_function(evaluate_union, 
Format.FORWARDREF),
+            support.EqualToForwardRef("builtins.undefined | list[int]"),
+        )
+
+        # This will raise an AttributeError
+        def evaluate_intermediate(format, exc=NotImplementedError):
+            if format == Format.VALUE_WITH_FAKE_GLOBALS:
+                intermediate = builtins.undefined
+                # Return a literal
+                return intermediate is None
+            raise exc
+
+        self.assertIs(
+            annotationlib.call_evaluate_function(evaluate_intermediate, 
Format.FORWARDREF),
+            False,
+        )
+
 
 class TestCallAnnotateFunction(unittest.TestCase):
     # Tests for user defined annotate functions.
@@ -1456,6 +1482,23 @@ def annotate(format, /):
         with self.assertRaises(NotImplementedError):
             annotationlib.call_annotate_function(annotate, Format.STRING)
 
+    def test_unsupported_formats(self):
+        def annotate(format, /):
+            if format == Format.FORWARDREF:
+                return {"x": str}
+            else:
+                raise NotImplementedError(format)
+
+        with self.assertRaises(ValueError):
+            annotationlib.call_annotate_function(annotate, 
Format.VALUE_WITH_FAKE_GLOBALS)
+
+        with self.assertRaises(RuntimeError):
+            annotationlib.call_annotate_function(annotate, Format.VALUE)
+
+        with self.assertRaises(ValueError):
+            # Some non-Format value
+            annotationlib.call_annotate_function(annotate, 7)
+
     def test_error_from_value_raised(self):
         # Test that the error from format.VALUE is raised
         # if all formats fail

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to