From: Ethan Furman Date: Mon, 7 Oct 2013 00:19:54 +0000 (-0700) Subject: Close #19156: add tests and fix for Enum helper edge cases. Patch from CliffM. X-Git-Tag: v3.4.0a4~215 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=648f860c227187d01f00934e2e9453b32241bdaf;p=python Close #19156: add tests and fix for Enum helper edge cases. Patch from CliffM. --- diff --git a/Lib/enum.py b/Lib/enum.py index 921d00c3a3..7ca85035de 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -17,14 +17,16 @@ def _is_dunder(name): """Returns True if a __dunder__ name, False otherwise.""" return (name[:2] == name[-2:] == '__' and name[2:3] != '_' and - name[-3:-2] != '_') + name[-3:-2] != '_' and + len(name) > 4) def _is_sunder(name): """Returns True if a _sunder_ name, False otherwise.""" return (name[0] == name[-1] == '_' and name[1:2] != '_' and - name[-2:-1] != '_') + name[-2:-1] != '_' and + len(name) > 2) def _make_class_unpicklable(cls): diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index d59c5e3ea3..3d962f9688 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -58,6 +58,35 @@ try: except Exception: pass + +class TestHelpers(unittest.TestCase): + # _is_descriptor, _is_sunder, _is_dunder + + def test_is_descriptor(self): + class foo: + pass + for attr in ('__get__','__set__','__delete__'): + obj = foo() + self.assertFalse(enum._is_descriptor(obj)) + setattr(obj, attr, 1) + self.assertTrue(enum._is_descriptor(obj)) + + def test_is_sunder(self): + for s in ('_a_', '_aa_'): + self.assertTrue(enum._is_sunder(s)) + + for s in ('a', 'a_', '_a', '__a', 'a__', '__a__', '_a__', '__a_', '_', + '__', '___', '____', '_____',): + self.assertFalse(enum._is_sunder(s)) + + def test_is_dunder(self): + for s in ('__a__', '__aa__'): + self.assertTrue(enum._is_dunder(s)) + for s in ('a', 'a_', '_a', '__a', 'a__', '_a_', '_a__', '__a_', '_', + '__', '___', '____', '_____',): + self.assertFalse(enum._is_dunder(s)) + + class TestEnum(unittest.TestCase): def setUp(self): class Season(Enum):