[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 1110e8f6a4)

Co-authored-by: dr-carlos <77367421+dr-carlos@users.noreply.github.com>
This commit is contained in:
Miss Islington (bot) 2025-11-10 16:19:48 +01:00 committed by GitHub
parent 727cdcba8e
commit 4b9ed4e642
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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