mirror of https://github.com/python/cpython
bpo-44632: Fix support of TypeVar in the union type (GH-27139)
int | TypeVar('T') returns now an instance of types.Union instead of typing.Union.
This commit is contained in:
parent
b81cac0560
commit
a158b20019
|
@ -769,6 +769,7 @@ class TypesTests(unittest.TestCase):
|
|||
assert repr(int | None) == "int | None"
|
||||
assert repr(int | type(None)) == "int | None"
|
||||
assert repr(int | typing.GenericAlias(list, int)) == "int | list[int]"
|
||||
assert repr(int | typing.TypeVar('T')) == "int | ~T"
|
||||
|
||||
def test_or_type_operator_with_genericalias(self):
|
||||
a = list[int]
|
||||
|
@ -805,13 +806,18 @@ class TypesTests(unittest.TestCase):
|
|||
issubclass(int, type_)
|
||||
|
||||
def test_or_type_operator_with_bad_module(self):
|
||||
class TypeVar:
|
||||
class BadMeta(type):
|
||||
__qualname__ = 'TypeVar'
|
||||
@property
|
||||
def __module__(self):
|
||||
1 / 0
|
||||
TypeVar = BadMeta('TypeVar', (), {})
|
||||
_SpecialForm = BadMeta('_SpecialForm', (), {})
|
||||
# Crashes in Issue44483
|
||||
with self.assertRaises(ZeroDivisionError):
|
||||
str | TypeVar()
|
||||
with self.assertRaises(ZeroDivisionError):
|
||||
str | _SpecialForm()
|
||||
|
||||
@cpython_only
|
||||
def test_or_type_operator_reference_cycle(self):
|
||||
|
|
|
@ -127,7 +127,7 @@ is_typing_name(PyObject *obj, char *name)
|
|||
if (strcmp(type->tp_name, name) != 0) {
|
||||
return 0;
|
||||
}
|
||||
return is_typing_module(obj);
|
||||
return is_typing_module((PyObject *)type);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
|
|
Loading…
Reference in New Issue