summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_enum.py
diff options
context:
space:
mode:
authorEthan Furman <ethan@stoneleaf.us>2021-06-09 16:03:55 (GMT)
committerGitHub <noreply@github.com>2021-06-09 16:03:55 (GMT)
commiteea8148b7dff5ffc7b84433859ac819b1d92a74d (patch)
tree922a243d0745124bda7fc0645ef6002e6a37981d /Lib/test/test_enum.py
parent6f84656dc188191225c8d5cdfd2a00de663988d0 (diff)
downloadcpython-eea8148b7dff5ffc7b84433859ac819b1d92a74d.zip
cpython-eea8148b7dff5ffc7b84433859ac819b1d92a74d.tar.gz
cpython-eea8148b7dff5ffc7b84433859ac819b1d92a74d.tar.bz2
bpo-44242: [Enum] remove missing bits test from Flag creation (GH-26586)
Move the check for missing named flags in flag aliases from Flag creation to a new *verify* decorator.
Diffstat (limited to 'Lib/test/test_enum.py')
-rw-r--r--Lib/test/test_enum.py144
1 files changed, 129 insertions, 15 deletions
diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py
index e918b03..34b190b 100644
--- a/Lib/test/test_enum.py
+++ b/Lib/test/test_enum.py
@@ -9,6 +9,7 @@ import threading
from collections import OrderedDict
from enum import Enum, IntEnum, StrEnum, EnumType, Flag, IntFlag, unique, auto
from enum import STRICT, CONFORM, EJECT, KEEP, _simple_enum, _test_simple_enum
+from enum import verify, UNIQUE, CONTINUOUS, NAMED_FLAGS
from io import StringIO
from pickle import dumps, loads, PicklingError, HIGHEST_PROTOCOL
from test import support
@@ -2774,13 +2775,6 @@ class TestFlag(unittest.TestCase):
third = auto()
self.assertEqual([Dupes.first, Dupes.second, Dupes.third], list(Dupes))
- def test_bizarre(self):
- with self.assertRaisesRegex(TypeError, "invalid Flag 'Bizarre' -- missing values: 1, 2"):
- class Bizarre(Flag):
- b = 3
- c = 4
- d = 6
-
def test_multiple_mixin(self):
class AllMixin:
@classproperty
@@ -3345,12 +3339,6 @@ class TestIntFlag(unittest.TestCase):
for f in Open:
self.assertEqual(bool(f.value), bool(f))
- def test_bizarre(self):
- with self.assertRaisesRegex(TypeError, "invalid Flag 'Bizarre' -- missing values: 1, 2"):
- class Bizarre(IntFlag):
- b = 3
- c = 4
- d = 6
def test_multiple_mixin(self):
class AllMixin:
@@ -3459,6 +3447,7 @@ class TestUnique(unittest.TestCase):
one = 1
two = 'dos'
tres = 4.0
+ #
@unique
class Cleaner(IntEnum):
single = 1
@@ -3484,12 +3473,137 @@ class TestUnique(unittest.TestCase):
turkey = 3
def test_unique_with_name(self):
- @unique
+ @verify(UNIQUE)
class Silly(Enum):
one = 1
two = 'dos'
name = 3
- @unique
+ #
+ @verify(UNIQUE)
+ class Sillier(IntEnum):
+ single = 1
+ name = 2
+ triple = 3
+ value = 4
+
+class TestVerify(unittest.TestCase):
+
+ def test_continuous(self):
+ @verify(CONTINUOUS)
+ class Auto(Enum):
+ FIRST = auto()
+ SECOND = auto()
+ THIRD = auto()
+ FORTH = auto()
+ #
+ @verify(CONTINUOUS)
+ class Manual(Enum):
+ FIRST = 3
+ SECOND = 4
+ THIRD = 5
+ FORTH = 6
+ #
+ with self.assertRaisesRegex(ValueError, 'invalid enum .Missing.: missing values 5, 6, 7, 8, 9, 10, 12'):
+ @verify(CONTINUOUS)
+ class Missing(Enum):
+ FIRST = 3
+ SECOND = 4
+ THIRD = 11
+ FORTH = 13
+ #
+ with self.assertRaisesRegex(ValueError, 'invalid flag .Incomplete.: missing values 32'):
+ @verify(CONTINUOUS)
+ class Incomplete(Flag):
+ FIRST = 4
+ SECOND = 8
+ THIRD = 16
+ FORTH = 64
+ #
+ with self.assertRaisesRegex(ValueError, 'invalid flag .StillIncomplete.: missing values 16'):
+ @verify(CONTINUOUS)
+ class StillIncomplete(Flag):
+ FIRST = 4
+ SECOND = 8
+ THIRD = 11
+ FORTH = 32
+
+
+ def test_composite(self):
+ class Bizarre(Flag):
+ b = 3
+ c = 4
+ d = 6
+ self.assertEqual(list(Bizarre), [Bizarre.c])
+ self.assertEqual(Bizarre.b.value, 3)
+ self.assertEqual(Bizarre.c.value, 4)
+ self.assertEqual(Bizarre.d.value, 6)
+ with self.assertRaisesRegex(
+ ValueError,
+ "invalid Flag 'Bizarre': 'b' is missing named flags for values 1, 2; 'd' is missing a named flag for value 2",
+ ):
+ @verify(NAMED_FLAGS)
+ class Bizarre(Flag):
+ b = 3
+ c = 4
+ d = 6
+ #
+ class Bizarre(IntFlag):
+ b = 3
+ c = 4
+ d = 6
+ self.assertEqual(list(Bizarre), [Bizarre.c])
+ self.assertEqual(Bizarre.b.value, 3)
+ self.assertEqual(Bizarre.c.value, 4)
+ self.assertEqual(Bizarre.d.value, 6)
+ with self.assertRaisesRegex(
+ ValueError,
+ "invalid Flag 'Bizarre': 'b' is missing named flags for values 1, 2; 'd' is missing a named flag for value 2",
+ ):
+ @verify(NAMED_FLAGS)
+ class Bizarre(IntFlag):
+ b = 3
+ c = 4
+ d = 6
+
+ def test_unique_clean(self):
+ @verify(UNIQUE)
+ class Clean(Enum):
+ one = 1
+ two = 'dos'
+ tres = 4.0
+ #
+ @verify(UNIQUE)
+ class Cleaner(IntEnum):
+ single = 1
+ double = 2
+ triple = 3
+
+ def test_unique_dirty(self):
+ with self.assertRaisesRegex(ValueError, 'tres.*one'):
+ @verify(UNIQUE)
+ class Dirty(Enum):
+ one = 1
+ two = 'dos'
+ tres = 1
+ with self.assertRaisesRegex(
+ ValueError,
+ 'double.*single.*turkey.*triple',
+ ):
+ @verify(UNIQUE)
+ class Dirtier(IntEnum):
+ single = 1
+ double = 1
+ triple = 3
+ turkey = 3
+
+ def test_unique_with_name(self):
+ @verify(UNIQUE)
+ class Silly(Enum):
+ one = 1
+ two = 'dos'
+ name = 3
+ #
+ @verify(UNIQUE)
class Sillier(IntEnum):
single = 1
name = 2