16
16
from test .support import threading_helper
17
17
from datetime import timedelta
18
18
19
+ python_version = sys .version_info [:2 ]
20
+
19
21
def load_tests (loader , tests , ignore ):
20
22
tests .addTests (doctest .DocTestSuite (enum ))
21
23
if os .path .exists ('Doc/library/enum.rst' ):
@@ -352,17 +354,38 @@ class IntLogic(int, Enum):
352
354
self .assertTrue (IntLogic .true )
353
355
self .assertFalse (IntLogic .false )
354
356
355
- def test_contains (self ):
357
+ @unittest .skipIf (
358
+ python_version >= (3 , 12 ),
359
+ '__contains__ now returns True/False for all inputs' ,
360
+ )
361
+ def test_contains_er (self ):
356
362
Season = self .Season
357
363
self .assertIn (Season .AUTUMN , Season )
358
364
with self .assertRaises (TypeError ):
359
- 3 in Season
365
+ with self .assertWarns (DeprecationWarning ):
366
+ 3 in Season
360
367
with self .assertRaises (TypeError ):
361
- 'AUTUMN' in Season
362
-
368
+ with self . assertWarns ( DeprecationWarning ):
369
+ 'AUTUMN' in Season
363
370
val = Season (3 )
364
371
self .assertIn (val , Season )
372
+ #
373
+ class OtherEnum (Enum ):
374
+ one = 1 ; two = 2
375
+ self .assertNotIn (OtherEnum .two , Season )
365
376
377
+ @unittest .skipIf (
378
+ python_version < (3 , 12 ),
379
+ '__contains__ only works with enum memmbers before 3.12' ,
380
+ )
381
+ def test_contains_tf (self ):
382
+ Season = self .Season
383
+ self .assertIn (Season .AUTUMN , Season )
384
+ self .assertTrue (3 in Season )
385
+ self .assertFalse ('AUTUMN' in Season )
386
+ val = Season (3 )
387
+ self .assertIn (val , Season )
388
+ #
366
389
class OtherEnum (Enum ):
367
390
one = 1 ; two = 2
368
391
self .assertNotIn (OtherEnum .two , Season )
@@ -528,16 +551,28 @@ def __format__(self, spec):
528
551
self .assertEqual (str (TestFloat .one ), 'one' )
529
552
self .assertEqual ('{}' .format (TestFloat .one ), 'TestFloat success!' )
530
553
531
- @unittest .skipUnless (
532
- sys .version_info [:2 ] < (3 , 12 ),
554
+ @unittest .skipIf (
555
+ python_version < (3 , 12 ),
556
+ 'mixin-format is still using member.value' ,
557
+ )
558
+ def test_mixin_format_warning (self ):
559
+ with self .assertWarns (DeprecationWarning ):
560
+ self .assertEqual (f'{ self .Grades .B } ' , 'Grades.B' )
561
+
562
+ @unittest .skipIf (
563
+ python_version >= (3 , 12 ),
533
564
'mixin-format now uses member instead of member.value' ,
534
565
)
535
566
def test_mixin_format_warning (self ):
536
567
with self .assertWarns (DeprecationWarning ):
537
568
self .assertEqual (f'{ self .Grades .B } ' , '4' )
538
569
539
570
def assertFormatIsValue (self , spec , member ):
540
- self .assertEqual (spec .format (member ), spec .format (member .value ))
571
+ if python_version < (3 , 12 ) and (not spec or spec in ('{}' ,'{:}' )):
572
+ with self .assertWarns (DeprecationWarning ):
573
+ self .assertEqual (spec .format (member ), spec .format (member .value ))
574
+ else :
575
+ self .assertEqual (spec .format (member ), spec .format (member .value ))
541
576
542
577
def test_format_enum_date (self ):
543
578
Holiday = self .Holiday
@@ -2202,7 +2237,7 @@ def __repr__(self):
2202
2237
description = 'Bn$' , 3
2203
2238
2204
2239
@unittest .skipUnless (
2205
- sys . version_info [: 2 ] == (3 , 9 ),
2240
+ python_version == (3 , 9 ),
2206
2241
'private variables are now normal attributes' ,
2207
2242
)
2208
2243
def test_warning_for_private_variables (self ):
@@ -2225,7 +2260,7 @@ class Private(Enum):
2225
2260
self .assertEqual (Private ._Private__major_ , 'Hoolihan' )
2226
2261
2227
2262
@unittest .skipUnless (
2228
- sys . version_info [: 2 ] < (3 , 12 ),
2263
+ python_version < (3 , 12 ),
2229
2264
'member-member access now raises an exception' ,
2230
2265
)
2231
2266
def test_warning_for_member_from_member_access (self ):
@@ -2237,7 +2272,7 @@ class Di(Enum):
2237
2272
self .assertIs (Di .NO , nope )
2238
2273
2239
2274
@unittest .skipUnless (
2240
- sys . version_info [: 2 ] >= (3 , 12 ),
2275
+ python_version >= (3 , 12 ),
2241
2276
'member-member access currently issues a warning' ,
2242
2277
)
2243
2278
def test_exception_for_member_from_member_access (self ):
@@ -2617,19 +2652,41 @@ def test_pickle(self):
2617
2652
test_pickle_dump_load (self .assertIs , FlagStooges .CURLY | FlagStooges .MOE )
2618
2653
test_pickle_dump_load (self .assertIs , FlagStooges )
2619
2654
2620
- def test_contains (self ):
2655
+ @unittest .skipIf (
2656
+ python_version >= (3 , 12 ),
2657
+ '__contains__ now returns True/False for all inputs' ,
2658
+ )
2659
+ def test_contains_er (self ):
2621
2660
Open = self .Open
2622
2661
Color = self .Color
2623
2662
self .assertFalse (Color .BLACK in Open )
2624
2663
self .assertFalse (Open .RO in Color )
2625
2664
with self .assertRaises (TypeError ):
2626
- 'BLACK' in Color
2665
+ with self .assertWarns (DeprecationWarning ):
2666
+ 'BLACK' in Color
2627
2667
with self .assertRaises (TypeError ):
2628
- 'RO' in Open
2668
+ with self .assertWarns (DeprecationWarning ):
2669
+ 'RO' in Open
2629
2670
with self .assertRaises (TypeError ):
2630
- 1 in Color
2671
+ with self .assertWarns (DeprecationWarning ):
2672
+ 1 in Color
2631
2673
with self .assertRaises (TypeError ):
2632
- 1 in Open
2674
+ with self .assertWarns (DeprecationWarning ):
2675
+ 1 in Open
2676
+
2677
+ @unittest .skipIf (
2678
+ python_version < (3 , 12 ),
2679
+ '__contains__ only works with enum memmbers before 3.12' ,
2680
+ )
2681
+ def test_contains_tf (self ):
2682
+ Open = self .Open
2683
+ Color = self .Color
2684
+ self .assertFalse (Color .BLACK in Open )
2685
+ self .assertFalse (Open .RO in Color )
2686
+ self .assertFalse ('BLACK' in Color )
2687
+ self .assertFalse ('RO' in Open )
2688
+ self .assertTrue (1 in Color )
2689
+ self .assertTrue (1 in Open )
2633
2690
2634
2691
def test_member_contains (self ):
2635
2692
Perm = self .Perm
@@ -2954,10 +3011,15 @@ def test_repr(self):
2954
3011
self .assertEqual (repr (~ (Open .WO | Open .CE )), 'Open.RW' )
2955
3012
self .assertEqual (repr (Open (~ 4 )), '-5' )
2956
3013
3014
+ @unittest .skipUnless (
3015
+ python_version < (3 , 12 ),
3016
+ 'mixin-format now uses member instead of member.value' ,
3017
+ )
2957
3018
def test_format (self ):
2958
- Perm = self .Perm
2959
- self .assertEqual (format (Perm .R , '' ), '4' )
2960
- self .assertEqual (format (Perm .R | Perm .X , '' ), '5' )
3019
+ with self .assertWarns (DeprecationWarning ):
3020
+ Perm = self .Perm
3021
+ self .assertEqual (format (Perm .R , '' ), '4' )
3022
+ self .assertEqual (format (Perm .R | Perm .X , '' ), '5' )
2961
3023
2962
3024
def test_or (self ):
2963
3025
Perm = self .Perm
@@ -3189,21 +3251,45 @@ def test_programatic_function_from_empty_tuple(self):
3189
3251
self .assertEqual (len (lst ), len (Thing ))
3190
3252
self .assertEqual (len (Thing ), 0 , Thing )
3191
3253
3192
- def test_contains (self ):
3254
+ @unittest .skipIf (
3255
+ python_version >= (3 , 12 ),
3256
+ '__contains__ now returns True/False for all inputs' ,
3257
+ )
3258
+ def test_contains_er (self ):
3193
3259
Open = self .Open
3194
3260
Color = self .Color
3195
3261
self .assertTrue (Color .GREEN in Color )
3196
3262
self .assertTrue (Open .RW in Open )
3197
3263
self .assertFalse (Color .GREEN in Open )
3198
3264
self .assertFalse (Open .RW in Color )
3199
3265
with self .assertRaises (TypeError ):
3200
- 'GREEN' in Color
3266
+ with self .assertWarns (DeprecationWarning ):
3267
+ 'GREEN' in Color
3201
3268
with self .assertRaises (TypeError ):
3202
- 'RW' in Open
3269
+ with self .assertWarns (DeprecationWarning ):
3270
+ 'RW' in Open
3203
3271
with self .assertRaises (TypeError ):
3204
- 2 in Color
3272
+ with self .assertWarns (DeprecationWarning ):
3273
+ 2 in Color
3205
3274
with self .assertRaises (TypeError ):
3206
- 2 in Open
3275
+ with self .assertWarns (DeprecationWarning ):
3276
+ 2 in Open
3277
+
3278
+ @unittest .skipIf (
3279
+ python_version < (3 , 12 ),
3280
+ '__contains__ only works with enum memmbers before 3.12' ,
3281
+ )
3282
+ def test_contains_tf (self ):
3283
+ Open = self .Open
3284
+ Color = self .Color
3285
+ self .assertTrue (Color .GREEN in Color )
3286
+ self .assertTrue (Open .RW in Open )
3287
+ self .assertTrue (Color .GREEN in Open )
3288
+ self .assertTrue (Open .RW in Color )
3289
+ self .assertFalse ('GREEN' in Color )
3290
+ self .assertFalse ('RW' in Open )
3291
+ self .assertTrue (2 in Color )
3292
+ self .assertTrue (2 in Open )
3207
3293
3208
3294
def test_member_contains (self ):
3209
3295
Perm = self .Perm
@@ -3685,7 +3771,7 @@ def test_convert(self):
3685
3771
if name [0 :2 ] not in ('CO' , '__' )],
3686
3772
[], msg = 'Names other than CONVERT_TEST_* found.' )
3687
3773
3688
- @unittest .skipUnless (sys . version_info [: 2 ] == (3 , 8 ),
3774
+ @unittest .skipUnless (python_version == (3 , 8 ),
3689
3775
'_convert was deprecated in 3.8' )
3690
3776
def test_convert_warn (self ):
3691
3777
with self .assertWarns (DeprecationWarning ):
@@ -3694,7 +3780,7 @@ def test_convert_warn(self):
3694
3780
('test.test_enum' , '__main__' )[__name__ == '__main__' ],
3695
3781
filter = lambda x : x .startswith ('CONVERT_TEST_' ))
3696
3782
3697
- @unittest .skipUnless (sys . version_info >= (3 , 9 ),
3783
+ @unittest .skipUnless (python_version >= (3 , 9 ),
3698
3784
'_convert was removed in 3.9' )
3699
3785
def test_convert_raise (self ):
3700
3786
with self .assertRaises (AttributeError ):
@@ -3703,6 +3789,10 @@ def test_convert_raise(self):
3703
3789
('test.test_enum' , '__main__' )[__name__ == '__main__' ],
3704
3790
filter = lambda x : x .startswith ('CONVERT_TEST_' ))
3705
3791
3792
+ @unittest .skipUnless (
3793
+ python_version < (3 , 12 ),
3794
+ 'mixin-format now uses member instead of member.value' ,
3795
+ )
3706
3796
def test_convert_repr_and_str (self ):
3707
3797
module = ('test.test_enum' , '__main__' )[__name__ == '__main__' ]
3708
3798
test_type = enum .IntEnum ._convert_ (
@@ -3711,7 +3801,8 @@ def test_convert_repr_and_str(self):
3711
3801
filter = lambda x : x .startswith ('CONVERT_STRING_TEST_' ))
3712
3802
self .assertEqual (repr (test_type .CONVERT_STRING_TEST_NAME_A ), '%s.CONVERT_STRING_TEST_NAME_A' % module )
3713
3803
self .assertEqual (str (test_type .CONVERT_STRING_TEST_NAME_A ), 'CONVERT_STRING_TEST_NAME_A' )
3714
- self .assertEqual (format (test_type .CONVERT_STRING_TEST_NAME_A ), '5' )
3804
+ with self .assertWarns (DeprecationWarning ):
3805
+ self .assertEqual (format (test_type .CONVERT_STRING_TEST_NAME_A ), '5' )
3715
3806
3716
3807
# global names for StrEnum._convert_ test
3717
3808
CONVERT_STR_TEST_2 = 'goodbye'
0 commit comments