@@ -1360,6 +1360,67 @@ class C: pass
13601360 D = types .new_class ('D' , (A (), C , B ()), {})
13611361 self .assertEqual (D .__bases__ , (A1 , A2 , A3 , C , B1 , B2 ))
13621362
1363+ def test_get_original_bases (self ):
1364+ T = typing .TypeVar ('T' )
1365+ class A : pass
1366+ class B (typing .Generic [T ]): pass
1367+ class C (B [int ]): pass
1368+ class D (B [str ], float ): pass
1369+ self .assertEqual (types .get_original_bases (A ), (object ,))
1370+ self .assertEqual (types .get_original_bases (B ), (typing .Generic [T ],))
1371+ self .assertEqual (types .get_original_bases (C ), (B [int ],))
1372+ self .assertEqual (types .get_original_bases (int ), (object ,))
1373+ self .assertEqual (types .get_original_bases (D ), (B [str ], float ))
1374+
1375+ class E (list [T ]): pass
1376+ class F (list [int ]): pass
1377+
1378+ self .assertEqual (types .get_original_bases (E ), (list [T ],))
1379+ self .assertEqual (types .get_original_bases (F ), (list [int ],))
1380+
1381+ class ClassBasedNamedTuple (typing .NamedTuple ):
1382+ x : int
1383+
1384+ class GenericNamedTuple (typing .NamedTuple , typing .Generic [T ]):
1385+ x : T
1386+
1387+ CallBasedNamedTuple = typing .NamedTuple ("CallBasedNamedTuple" , [("x" , int )])
1388+
1389+ self .assertIs (
1390+ types .get_original_bases (ClassBasedNamedTuple )[0 ], typing .NamedTuple
1391+ )
1392+ self .assertEqual (
1393+ types .get_original_bases (GenericNamedTuple ),
1394+ (typing .NamedTuple , typing .Generic [T ])
1395+ )
1396+ self .assertIs (
1397+ types .get_original_bases (CallBasedNamedTuple )[0 ], typing .NamedTuple
1398+ )
1399+
1400+ class ClassBasedTypedDict (typing .TypedDict ):
1401+ x : int
1402+
1403+ class GenericTypedDict (typing .TypedDict , typing .Generic [T ]):
1404+ x : T
1405+
1406+ CallBasedTypedDict = typing .TypedDict ("CallBasedTypedDict" , {"x" : int })
1407+
1408+ self .assertIs (
1409+ types .get_original_bases (ClassBasedTypedDict )[0 ],
1410+ typing .TypedDict
1411+ )
1412+ self .assertEqual (
1413+ types .get_original_bases (GenericTypedDict ),
1414+ (typing .TypedDict , typing .Generic [T ])
1415+ )
1416+ self .assertIs (
1417+ types .get_original_bases (CallBasedTypedDict )[0 ],
1418+ typing .TypedDict
1419+ )
1420+
1421+ with self .assertRaisesRegex (TypeError , "Expected an instance of type" ):
1422+ types .get_original_bases (object ())
1423+
13631424 # Many of the following tests are derived from test_descr.py
13641425 def test_prepare_class (self ):
13651426 # Basic test of metaclass derivation
0 commit comments