import textwrap
import typing
import weakref
+import warnings
import types
from test.support import captured_stderr, cpython_only, infinite_recursion, requires_docstrings, import_helper, run_code
self.assertEqual(get_args(Unpack[tuple[Unpack[Ts]]]), (tuple[Unpack[Ts]],))
+class EvaluateForwardRefTests(BaseTestCase):
+ def test_evaluate_forward_ref(self):
+ int_ref = ForwardRef('int')
+ missing = ForwardRef('missing')
+ self.assertIs(
+ typing.evaluate_forward_ref(int_ref, type_params=()),
+ int,
+ )
+ self.assertIs(
+ typing.evaluate_forward_ref(
+ int_ref, type_params=(), format=annotationlib.Format.FORWARDREF,
+ ),
+ int,
+ )
+ self.assertIs(
+ typing.evaluate_forward_ref(
+ missing, type_params=(), format=annotationlib.Format.FORWARDREF,
+ ),
+ missing,
+ )
+ self.assertEqual(
+ typing.evaluate_forward_ref(
+ int_ref, type_params=(), format=annotationlib.Format.STRING,
+ ),
+ 'int',
+ )
+
+ def test_evaluate_forward_ref_no_type_params(self):
+ ref = ForwardRef('int')
+ with self.assertWarnsRegex(
+ DeprecationWarning,
+ (
+ "Failing to pass a value to the 'type_params' parameter "
+ "of 'typing.evaluate_forward_ref' is deprecated, "
+ "as it leads to incorrect behaviour"
+ ),
+ ):
+ typing.evaluate_forward_ref(ref)
+
+ # No warnings when `type_params` is passed:
+ with warnings.catch_warnings(record=True) as w:
+ typing.evaluate_forward_ref(ref, type_params=())
+ self.assertEqual(w, [])
+
+
class CollectionsAbcTests(BaseTestCase):
def test_hashable(self):