mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
[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:
parent
727cdcba8e
commit
4b9ed4e642
1 changed files with 43 additions and 0 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue