@@ -4655,8 +4655,6 @@ def test_fail_with_bare_union(self):
4655
4655
List [Union ]
4656
4656
with self .assertRaises (TypeError ):
4657
4657
Tuple [Optional ]
4658
- with self .assertRaises (TypeError ):
4659
- ClassVar [ClassVar [int ]]
4660
4658
with self .assertRaises (TypeError ):
4661
4659
List [ClassVar [int ]]
4662
4660
@@ -6014,16 +6012,6 @@ class F:
6014
6012
for clazz in [C , D , E , F ]:
6015
6013
self .assertEqual (get_type_hints (clazz ), expected_result )
6016
6014
6017
- def test_nested_classvar_fails_forward_ref_check (self ):
6018
- class E :
6019
- foo : 'typing.ClassVar[typing.ClassVar[int]]' = 7
6020
- class F :
6021
- foo : ClassVar ['ClassVar[int]' ] = 7
6022
-
6023
- for clazz in [E , F ]:
6024
- with self .assertRaises (TypeError ):
6025
- get_type_hints (clazz )
6026
-
6027
6015
def test_meta_no_type_check (self ):
6028
6016
depr_msg = (
6029
6017
"'typing.no_type_check_decorator' is deprecated "
@@ -8716,6 +8704,34 @@ class C:
8716
8704
self .assertEqual (get_type_hints (C , globals ())['classvar' ], ClassVar [int ])
8717
8705
self .assertEqual (get_type_hints (C , globals ())['const' ], Final [int ])
8718
8706
8707
+ def test_special_forms_nesting (self ):
8708
+ # These are uncommon types and are to ensure runtime
8709
+ # is lax on validation. See gh-89547 for more context.
8710
+ class CF :
8711
+ x : ClassVar [Final [int ]]
8712
+
8713
+ class FC :
8714
+ x : Final [ClassVar [int ]]
8715
+
8716
+ class ACF :
8717
+ x : Annotated [ClassVar [Final [int ]], "a decoration" ]
8718
+
8719
+ class CAF :
8720
+ x : ClassVar [Annotated [Final [int ], "a decoration" ]]
8721
+
8722
+ class AFC :
8723
+ x : Annotated [Final [ClassVar [int ]], "a decoration" ]
8724
+
8725
+ class FAC :
8726
+ x : Final [Annotated [ClassVar [int ], "a decoration" ]]
8727
+
8728
+ self .assertEqual (get_type_hints (CF , globals ())['x' ], ClassVar [Final [int ]])
8729
+ self .assertEqual (get_type_hints (FC , globals ())['x' ], Final [ClassVar [int ]])
8730
+ self .assertEqual (get_type_hints (ACF , globals ())['x' ], ClassVar [Final [int ]])
8731
+ self .assertEqual (get_type_hints (CAF , globals ())['x' ], ClassVar [Final [int ]])
8732
+ self .assertEqual (get_type_hints (AFC , globals ())['x' ], Final [ClassVar [int ]])
8733
+ self .assertEqual (get_type_hints (FAC , globals ())['x' ], Final [ClassVar [int ]])
8734
+
8719
8735
def test_cannot_subclass (self ):
8720
8736
with self .assertRaisesRegex (TypeError , "Cannot subclass .*Annotated" ):
8721
8737
class C (Annotated ):
0 commit comments