summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorPetr Viktorin <encukou@gmail.com>2024-12-20 19:40:58 (GMT)
committerGitHub <noreply@github.com>2024-12-20 19:40:58 (GMT)
commit2a66dd33dfc0b845042da9bb54aaa4e890733f54 (patch)
treef1d64ee79cc6f670d53e8160128521d7007cebed /Lib/test
parent3879ca0100942ae15a09ac22889cbe3e46d424eb (diff)
downloadcpython-2a66dd33dfc0b845042da9bb54aaa4e890733f54.zip
cpython-2a66dd33dfc0b845042da9bb54aaa4e890733f54.tar.gz
cpython-2a66dd33dfc0b845042da9bb54aaa4e890733f54.tar.bz2
gh-112328: Make EnumDict usable on its own and document it (GH-123669)
Co-authored-by: Rafi <rafi.promit@gmail.com> Co-authored-by: Sviatoslav Sydorenko (Святослав Сидоренко) <wk.cvs.github@sydorenko.org.ua> Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_enum.py33
1 files changed, 32 insertions, 1 deletions
diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py
index b9e13fb..8884295 100644
--- a/Lib/test/test_enum.py
+++ b/Lib/test/test_enum.py
@@ -14,7 +14,7 @@ from datetime import date
from enum import Enum, EnumMeta, 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, ReprEnum
-from enum import member, nonmember, _iter_bits_lsb
+from enum import member, nonmember, _iter_bits_lsb, EnumDict
from io import StringIO
from pickle import dumps, loads, PicklingError, HIGHEST_PROTOCOL
from test import support
@@ -5440,6 +5440,37 @@ class TestConvert(unittest.TestCase):
self.assertEqual(format(test_type.CONVERT_STRING_TEST_NAME_A), '5')
+class TestEnumDict(unittest.TestCase):
+ def test_enum_dict_in_metaclass(self):
+ """Test that EnumDict is usable as a class namespace"""
+ class Meta(type):
+ @classmethod
+ def __prepare__(metacls, cls, bases, **kwds):
+ return EnumDict(cls)
+
+ class MyClass(metaclass=Meta):
+ a = 1
+
+ with self.assertRaises(TypeError):
+ a = 2 # duplicate
+
+ with self.assertRaises(ValueError):
+ _a_sunder_ = 3
+
+ def test_enum_dict_standalone(self):
+ """Test that EnumDict is usable on its own"""
+ enumdict = EnumDict()
+ enumdict['a'] = 1
+
+ with self.assertRaises(TypeError):
+ enumdict['a'] = 'other value'
+
+ # Only MutableMapping interface is overridden for now.
+ # If this stops passing, update the documentation.
+ enumdict |= {'a': 'other value'}
+ self.assertEqual(enumdict['a'], 'other value')
+
+
# helpers
def enum_dir(cls):