88import threading
99from collections import OrderedDict
1010from enum import Enum , IntEnum , StrEnum , EnumType , Flag , IntFlag , unique , auto
11- from enum import STRICT , CONFORM , EJECT , KEEP
11+ from enum import STRICT , CONFORM , EJECT , KEEP , _simple_enum , _test_simple_enum
1212from io import StringIO
1313from pickle import dumps , loads , PicklingError , HIGHEST_PROTOCOL
1414from test import support
@@ -2511,10 +2511,13 @@ class Bizarre(Flag, boundary=KEEP):
25112511 d = 6
25122512 #
25132513 self .assertRaisesRegex (ValueError , 'invalid value: 7' , Iron , 7 )
2514+ #
25142515 self .assertIs (Water (7 ), Water .ONE | Water .TWO )
25152516 self .assertIs (Water (~ 9 ), Water .TWO )
2517+ #
25162518 self .assertEqual (Space (7 ), 7 )
25172519 self .assertTrue (type (Space (7 )) is int )
2520+ #
25182521 self .assertEqual (list (Bizarre ), [Bizarre .c ])
25192522 self .assertIs (Bizarre (3 ), Bizarre .b )
25202523 self .assertIs (Bizarre (6 ), Bizarre .d )
@@ -3053,16 +3056,20 @@ class Space(IntFlag, boundary=EJECT):
30533056 EIGHT = 8
30543057 self .assertIs (Space ._boundary_ , EJECT )
30553058 #
3059+ #
30563060 class Bizarre (IntFlag , boundary = KEEP ):
30573061 b = 3
30583062 c = 4
30593063 d = 6
30603064 #
30613065 self .assertRaisesRegex (ValueError , 'invalid value: 5' , Iron , 5 )
3066+ #
30623067 self .assertIs (Water (7 ), Water .ONE | Water .TWO )
30633068 self .assertIs (Water (~ 9 ), Water .TWO )
3069+ #
30643070 self .assertEqual (Space (7 ), 7 )
30653071 self .assertTrue (type (Space (7 )) is int )
3072+ #
30663073 self .assertEqual (list (Bizarre ), [Bizarre .c ])
30673074 self .assertIs (Bizarre (3 ), Bizarre .b )
30683075 self .assertIs (Bizarre (6 ), Bizarre .d )
@@ -3577,6 +3584,41 @@ def test_inspect_classify_class_attrs(self):
35773584 if failed :
35783585 self .fail ("result does not equal expected, see print above" )
35793586
3587+ def test_test_simple_enum (self ):
3588+ @_simple_enum (Enum )
3589+ class SimpleColor :
3590+ RED = 1
3591+ GREEN = 2
3592+ BLUE = 3
3593+ class CheckedColor (Enum ):
3594+ RED = 1
3595+ GREEN = 2
3596+ BLUE = 3
3597+ self .assertTrue (_test_simple_enum (CheckedColor , SimpleColor ) is None )
3598+ SimpleColor .GREEN ._value_ = 9
3599+ self .assertRaisesRegex (
3600+ TypeError , "enum mismatch" ,
3601+ _test_simple_enum , CheckedColor , SimpleColor ,
3602+ )
3603+ class CheckedMissing (IntFlag , boundary = KEEP ):
3604+ SIXTY_FOUR = 64
3605+ ONE_TWENTY_EIGHT = 128
3606+ TWENTY_FORTY_EIGHT = 2048
3607+ ALL = 2048 + 128 + 64 + 12
3608+ CM = CheckedMissing
3609+ self .assertEqual (list (CheckedMissing ), [CM .SIXTY_FOUR , CM .ONE_TWENTY_EIGHT , CM .TWENTY_FORTY_EIGHT ])
3610+ #
3611+ @_simple_enum (IntFlag , boundary = KEEP )
3612+ class Missing :
3613+ SIXTY_FOUR = 64
3614+ ONE_TWENTY_EIGHT = 128
3615+ TWENTY_FORTY_EIGHT = 2048
3616+ ALL = 2048 + 128 + 64 + 12
3617+ M = Missing
3618+ self .assertEqual (list (CheckedMissing ), [M .SIXTY_FOUR , M .ONE_TWENTY_EIGHT , M .TWENTY_FORTY_EIGHT ])
3619+ #
3620+ _test_simple_enum (CheckedMissing , Missing )
3621+
35803622
35813623class MiscTestCase (unittest .TestCase ):
35823624 def test__all__ (self ):
@@ -3592,6 +3634,13 @@ def test__all__(self):
35923634CONVERT_TEST_NAME_E = 5
35933635CONVERT_TEST_NAME_F = 5
35943636
3637+ CONVERT_STRING_TEST_NAME_D = 5
3638+ CONVERT_STRING_TEST_NAME_C = 5
3639+ CONVERT_STRING_TEST_NAME_B = 5
3640+ CONVERT_STRING_TEST_NAME_A = 5 # This one should sort first.
3641+ CONVERT_STRING_TEST_NAME_E = 5
3642+ CONVERT_STRING_TEST_NAME_F = 5
3643+
35953644class TestIntEnumConvert (unittest .TestCase ):
35963645 def test_convert_value_lookup_priority (self ):
35973646 test_type = enum .IntEnum ._convert_ (
@@ -3639,14 +3688,16 @@ def test_convert_raise(self):
36393688 filter = lambda x : x .startswith ('CONVERT_TEST_' ))
36403689
36413690 def test_convert_repr_and_str (self ):
3691+ # reset global constants, as previous tests could have converted the
3692+ # integer values to enums
36423693 module = ('test.test_enum' , '__main__' )[__name__ == '__main__' ]
36433694 test_type = enum .IntEnum ._convert_ (
36443695 'UnittestConvert' ,
36453696 module ,
3646- filter = lambda x : x .startswith ('CONVERT_TEST_ ' ))
3647- self .assertEqual (repr (test_type .CONVERT_TEST_NAME_A ), '%s.CONVERT_TEST_NAME_A ' % module )
3648- self .assertEqual (str (test_type .CONVERT_TEST_NAME_A ), 'CONVERT_TEST_NAME_A ' )
3649- self .assertEqual (format (test_type .CONVERT_TEST_NAME_A ), '5' )
3697+ filter = lambda x : x .startswith ('CONVERT_STRING_TEST_ ' ))
3698+ self .assertEqual (repr (test_type .CONVERT_STRING_TEST_NAME_A ), '%s.CONVERT_STRING_TEST_NAME_A ' % module )
3699+ self .assertEqual (str (test_type .CONVERT_STRING_TEST_NAME_A ), 'CONVERT_STRING_TEST_NAME_A ' )
3700+ self .assertEqual (format (test_type .CONVERT_STRING_TEST_NAME_A ), '5' )
36503701
36513702# global names for StrEnum._convert_ test
36523703CONVERT_STR_TEST_2 = 'goodbye'
0 commit comments