summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_enum.py
diff options
context:
space:
mode:
authororlnub123 <orlnub123@gmail.com>2018-09-12 17:28:53 (GMT)
committerEthan Furman <ethan@stoneleaf.us>2018-09-12 17:28:53 (GMT)
commit0fb9fadd3b3e9e3698647e0b92d49b0b7aacd979 (patch)
tree0a53251ce3c6655e1a291d2c668e74bbb1318ea7 /Lib/test/test_enum.py
parentf52237400b9960d434c5d0676a3479b8c1e8c869 (diff)
downloadcpython-0fb9fadd3b3e9e3698647e0b92d49b0b7aacd979.zip
cpython-0fb9fadd3b3e9e3698647e0b92d49b0b7aacd979.tar.gz
cpython-0fb9fadd3b3e9e3698647e0b92d49b0b7aacd979.tar.bz2
bpo-34282: Fix Enum._convert shadowing members named _convert (GH-8568)
* Fix enum members getting shadowed by parent attributes * Move Enum._convert to EnumMeta._convert_ * Deprecate _convert
Diffstat (limited to 'Lib/test/test_enum.py')
-rw-r--r--Lib/test/test_enum.py40
1 files changed, 38 insertions, 2 deletions
diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py
index 68483e6..c04d03f 100644
--- a/Lib/test/test_enum.py
+++ b/Lib/test/test_enum.py
@@ -1,6 +1,7 @@
import enum
import inspect
import pydoc
+import sys
import unittest
import threading
from collections import OrderedDict
@@ -1511,6 +1512,23 @@ class TestEnum(unittest.TestCase):
yellow = 6
self.assertEqual(MoreColor.magenta.hex(), '5 hexlified!')
+ def test_subclass_duplicate_name(self):
+ class Base(Enum):
+ def test(self):
+ pass
+ class Test(Base):
+ test = 1
+ self.assertIs(type(Test.test), Test)
+
+ def test_subclass_duplicate_name_dynamic(self):
+ from types import DynamicClassAttribute
+ class Base(Enum):
+ @DynamicClassAttribute
+ def test(self):
+ return 'dynamic'
+ class Test(Base):
+ test = 1
+ self.assertEqual(Test.test.test, 'dynamic')
def test_no_duplicates(self):
class UniqueEnum(Enum):
@@ -2668,7 +2686,7 @@ CONVERT_TEST_NAME_F = 5
class TestIntEnumConvert(unittest.TestCase):
def test_convert_value_lookup_priority(self):
- test_type = enum.IntEnum._convert(
+ test_type = enum.IntEnum._convert_(
'UnittestConvert',
('test.test_enum', '__main__')[__name__=='__main__'],
filter=lambda x: x.startswith('CONVERT_TEST_'))
@@ -2678,7 +2696,7 @@ class TestIntEnumConvert(unittest.TestCase):
self.assertEqual(test_type(5).name, 'CONVERT_TEST_NAME_A')
def test_convert(self):
- test_type = enum.IntEnum._convert(
+ test_type = enum.IntEnum._convert_(
'UnittestConvert',
('test.test_enum', '__main__')[__name__=='__main__'],
filter=lambda x: x.startswith('CONVERT_TEST_'))
@@ -2694,6 +2712,24 @@ class TestIntEnumConvert(unittest.TestCase):
if name[0:2] not in ('CO', '__')],
[], msg='Names other than CONVERT_TEST_* found.')
+ @unittest.skipUnless(sys.version_info[:2] == (3, 8),
+ '_convert was deprecated in 3.8')
+ def test_convert_warn(self):
+ with self.assertWarns(DeprecationWarning):
+ enum.IntEnum._convert(
+ 'UnittestConvert',
+ ('test.test_enum', '__main__')[__name__=='__main__'],
+ filter=lambda x: x.startswith('CONVERT_TEST_'))
+
+ @unittest.skipUnless(sys.version_info >= (3, 9),
+ '_convert was removed in 3.9')
+ def test_convert_raise(self):
+ with self.assertRaises(AttributeError):
+ enum.IntEnum._convert(
+ 'UnittestConvert',
+ ('test.test_enum', '__main__')[__name__=='__main__'],
+ filter=lambda x: x.startswith('CONVERT_TEST_'))
+
if __name__ == '__main__':
unittest.main()