Close #19156: add tests and fix for Enum helper edge cases. Patch from CliffM.
This commit is contained in:
parent
ab5a58d827
commit
648f860c22
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue