@@ -883,14 +883,15 @@ class Part(Enum):
883883 with self .assertRaises (TypeError ):
884884 Season .SPRING < Part .CLIP
885885
886+ @unittest .skip ('to-do list' )
886887 def test_dir_with_custom_dunders (self ):
887888 class PlainEnum (Enum ):
888889 pass
889890 cls_dir = dir (PlainEnum )
890891 self .assertNotIn ('__repr__' , cls_dir )
891892 self .assertNotIn ('__str__' , cls_dir )
892- self .assertNotIn ('__repr__ ' , cls_dir )
893- self .assertNotIn ('__repr__ ' , cls_dir )
893+ self .assertNotIn ('__format__ ' , cls_dir )
894+ self .assertNotIn ('__init__ ' , cls_dir )
894895 #
895896 class MyEnum (Enum ):
896897 def __repr__ (self ):
@@ -904,8 +905,8 @@ def __init__(self):
904905 cls_dir = dir (MyEnum )
905906 self .assertIn ('__repr__' , cls_dir )
906907 self .assertIn ('__str__' , cls_dir )
907- self .assertIn ('__repr__ ' , cls_dir )
908- self .assertIn ('__repr__ ' , cls_dir )
908+ self .assertIn ('__format__ ' , cls_dir )
909+ self .assertIn ('__init__ ' , cls_dir )
909910
910911 def test_duplicate_name_error (self ):
911912 with self .assertRaises (TypeError ):
@@ -4322,13 +4323,18 @@ def test_convert_int(self):
43224323 int_dir = dir (int ) + [
43234324 'CONVERT_TEST_NAME_A' , 'CONVERT_TEST_NAME_B' , 'CONVERT_TEST_NAME_C' ,
43244325 'CONVERT_TEST_NAME_D' , 'CONVERT_TEST_NAME_E' , 'CONVERT_TEST_NAME_F' ,
4326+ 'CONVERT_TEST_SIGABRT' , 'CONVERT_TEST_SIGIOT' ,
4327+ 'CONVERT_TEST_EIO' , 'CONVERT_TEST_EBUS' ,
43254328 ]
4329+ extra = [name for name in dir (test_type ) if name not in enum_dir (test_type )]
4330+ missing = [name for name in enum_dir (test_type ) if name not in dir (test_type )]
43264331 self .assertEqual (
4327- [ name for name in dir ( test_type ) if name not in int_dir ] ,
4332+ extra + missing ,
43284333 [],
4329- msg = 'Names other than CONVERT_TEST_* found.' ,
4334+ msg = 'extra names: %r; missing names: %r' % ( extra , missing ) ,
43304335 )
43314336
4337+
43324338 def test_convert_uncomparable (self ):
43334339 uncomp = enum .Enum ._convert_ (
43344340 'Uncomparable' ,
@@ -4362,10 +4368,12 @@ def test_convert_str(self):
43624368 self .assertEqual (test_type .CONVERT_STR_TEST_2 , 'goodbye' )
43634369 # Ensure that test_type only picked up names matching the filter.
43644370 str_dir = dir (str ) + ['CONVERT_STR_TEST_1' , 'CONVERT_STR_TEST_2' ]
4371+ extra = [name for name in dir (test_type ) if name not in enum_dir (test_type )]
4372+ missing = [name for name in enum_dir (test_type ) if name not in dir (test_type )]
43654373 self .assertEqual (
4366- [ name for name in dir ( test_type ) if name not in str_dir ] ,
4374+ extra + missing ,
43674375 [],
4368- msg = 'Names other than CONVERT_STR_* found.' ,
4376+ msg = 'extra names: %r; missing names: %r' % ( extra , missing ) ,
43694377 )
43704378 self .assertEqual (repr (test_type .CONVERT_STR_TEST_1 ), '%s.CONVERT_STR_TEST_1' % SHORT_MODULE )
43714379 self .assertEqual (str (test_type .CONVERT_STR_TEST_2 ), 'goodbye' )
@@ -4392,25 +4400,22 @@ def test_convert_repr_and_str(self):
43924400# helpers
43934401
43944402def enum_dir (cls ):
4395- # TODO: check for custom __init__, __new__, __format__, __repr__, __str__, __init_subclass__
4403+ interesting = set ([
4404+ '__class__' , '__contains__' , '__doc__' , '__getitem__' ,
4405+ '__iter__' , '__len__' , '__members__' , '__module__' ,
4406+ '__name__' , '__qualname__' ,
4407+ ]
4408+ + cls ._member_names_
4409+ )
4410+ if cls ._new_member_ is not object .__new__ :
4411+ interesting .add ('__new__' )
4412+ if cls .__init_subclass__ is not object .__init_subclass__ :
4413+ interesting .add ('__init_subclass__' )
43964414 if cls ._member_type_ is object :
4397- interesting = set ()
4398- if cls .__init_subclass__ is not object .__init_subclass__ :
4399- interesting .add ('__init_subclass__' )
4400- return sorted (set ([
4401- '__class__' , '__contains__' , '__doc__' , '__getitem__' ,
4402- '__iter__' , '__len__' , '__members__' , '__module__' ,
4403- '__name__' , '__qualname__' ,
4404- ]
4405- + cls ._member_names_
4406- ) | interesting
4407- )
4415+ return sorted (interesting )
44084416 else :
44094417 # return whatever mixed-in data type has
4410- return sorted (set (
4411- dir (cls ._member_type_ )
4412- + cls ._member_names_
4413- ))
4418+ return sorted (set (dir (cls ._member_type_ )) | interesting )
44144419
44154420def member_dir (member ):
44164421 if member .__class__ ._member_type_ is object :
0 commit comments