mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
gh-93464: [Enum] fix auto() failure during multiple assignment (GH-99148)
* fix auto() failure during multiple assignment i.e. `ONE = auto(), 'text'` will now have `ONE' with the value of `(1, 'text')`. Before it would have been `(<an auto instance>, 'text')`
This commit is contained in:
parent
586b07e1f9
commit
8feb7ab77c
4 changed files with 82 additions and 11 deletions
|
@ -4116,6 +4116,50 @@ class TestInternals(unittest.TestCase):
|
|||
third = auto()
|
||||
self.assertEqual([Dupes.first, Dupes.second, Dupes.third], list(Dupes))
|
||||
|
||||
def test_multiple_auto_on_line(self):
|
||||
class Huh(Enum):
|
||||
ONE = auto()
|
||||
TWO = auto(), auto()
|
||||
THREE = auto(), auto(), auto()
|
||||
self.assertEqual(Huh.ONE.value, 1)
|
||||
self.assertEqual(Huh.TWO.value, (2, 3))
|
||||
self.assertEqual(Huh.THREE.value, (4, 5, 6))
|
||||
#
|
||||
class Hah(Enum):
|
||||
def __new__(cls, value, abbr=None):
|
||||
member = object.__new__(cls)
|
||||
member._value_ = value
|
||||
member.abbr = abbr or value[:3].lower()
|
||||
return member
|
||||
def _generate_next_value_(name, start, count, last):
|
||||
return name
|
||||
#
|
||||
MONDAY = auto()
|
||||
TUESDAY = auto()
|
||||
WEDNESDAY = auto(), 'WED'
|
||||
THURSDAY = auto(), 'Thu'
|
||||
FRIDAY = auto()
|
||||
self.assertEqual(Hah.MONDAY.value, 'MONDAY')
|
||||
self.assertEqual(Hah.MONDAY.abbr, 'mon')
|
||||
self.assertEqual(Hah.TUESDAY.value, 'TUESDAY')
|
||||
self.assertEqual(Hah.TUESDAY.abbr, 'tue')
|
||||
self.assertEqual(Hah.WEDNESDAY.value, 'WEDNESDAY')
|
||||
self.assertEqual(Hah.WEDNESDAY.abbr, 'WED')
|
||||
self.assertEqual(Hah.THURSDAY.value, 'THURSDAY')
|
||||
self.assertEqual(Hah.THURSDAY.abbr, 'Thu')
|
||||
self.assertEqual(Hah.FRIDAY.value, 'FRIDAY')
|
||||
self.assertEqual(Hah.FRIDAY.abbr, 'fri')
|
||||
#
|
||||
class Huh(Enum):
|
||||
def _generate_next_value_(name, start, count, last):
|
||||
return count+1
|
||||
ONE = auto()
|
||||
TWO = auto(), auto()
|
||||
THREE = auto(), auto(), auto()
|
||||
self.assertEqual(Huh.ONE.value, 1)
|
||||
self.assertEqual(Huh.TWO.value, (2, 2))
|
||||
self.assertEqual(Huh.THREE.value, (3, 3, 3))
|
||||
|
||||
class TestEnumTypeSubclassing(unittest.TestCase):
|
||||
pass
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue