2525 import _datetime
2626except ModuleNotFoundError :
2727 _datetime = None
28+ try :
29+ import _types
30+ except ModuleNotFoundError :
31+ _types = None
2832
2933c_types = import_fresh_module ('types' , fresh = ['_types' ])
3034py_types = import_fresh_module ('types' , blocked = ['_types' ])
@@ -43,15 +47,10 @@ def clear_typing_caches():
4347
4448class TypesTests (unittest .TestCase ):
4549
46- def test_names (self ):
50+ def check_types_names (self , module_types , * , c_extension = False ):
4751 c_only_names = {'CapsuleType' }
4852 ignored = {'new_class' , 'resolve_bases' , 'prepare_class' ,
4953 'get_original_bases' , 'DynamicClassAttribute' , 'coroutine' }
50-
51- for name in c_types .__all__ :
52- if name not in c_only_names | ignored :
53- self .assertIs (getattr (c_types , name ), getattr (py_types , name ))
54-
5554 all_names = ignored | {
5655 'AsyncGeneratorType' , 'BuiltinFunctionType' , 'BuiltinMethodType' ,
5756 'CapsuleType' , 'CellType' , 'ClassMethodDescriptorType' , 'CodeType' ,
@@ -63,8 +62,24 @@ def test_names(self):
6362 'ModuleType' , 'NoneType' , 'NotImplementedType' , 'SimpleNamespace' ,
6463 'TracebackType' , 'UnionType' , 'WrapperDescriptorType' ,
6564 }
66- self .assertEqual (all_names , set (c_types .__all__ ))
67- self .assertEqual (all_names - c_only_names , set (py_types .__all__ ))
65+ expected = all_names if c_extension else all_names - c_only_names
66+ self .assertEqual (expected , set (module_types .__all__ ))
67+
68+ @unittest .skipUnless (_types , "requires C _types module" )
69+ def test_c_types_names (self ):
70+ self .check_types_names (c_types , c_extension = True )
71+
72+ def test_py_types_names (self ):
73+ self .check_types_names (py_types , c_extension = False )
74+
75+ @unittest .skipUnless (_types , "requires C _types module" )
76+ def test_types_names_consistency (self ):
77+ c_only_names = {'CapsuleType' }
78+ ignored = {'new_class' , 'resolve_bases' , 'prepare_class' ,
79+ 'get_original_bases' , 'DynamicClassAttribute' , 'coroutine' }
80+ for name in c_types .__all__ :
81+ if name not in c_only_names | ignored :
82+ self .assertIs (getattr (c_types , name ), getattr (py_types , name ))
6883
6984 def test_truth_values (self ):
7085 if None : self .fail ('None is true instead of false' )
0 commit comments