https://github.com/python/cpython/commit/1110e8f6a4a767f6d09b121017442528733b380b
commit: 1110e8f6a4a767f6d09b121017442528733b380b
branch: main
author: dr-carlos <[email protected]>
committer: JelleZijlstra <[email protected]>
date: 2025-11-10T06:54:50-08:00
summary:
gh-141174: Improve `annotationlib.call_annotate_function()` test coverage
(#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
files:
M Lib/test/test_annotationlib.py
diff --git a/Lib/test/test_annotationlib.py b/Lib/test/test_annotationlib.py
index d196801eedee57..0ae598b6839692 100644
--- a/Lib/test/test_annotationlib.py
+++ b/Lib/test/test_annotationlib.py
@@ -1339,6 +1339,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.
@@ -1480,6 +1506,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]