mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
[3.11] gh-105332: [Enum] Fix unpickling flags in edge-cases (GH-105348) (GH-105519)
* revert enum pickling from by-name to by-value
(cherry picked from commit 4ff5690e59
)
Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
This commit is contained in:
parent
c3b8f9d0d2
commit
fed1b5a198
4 changed files with 47 additions and 23 deletions
|
@ -32,6 +32,11 @@ def load_tests(loader, tests, ignore):
|
|||
'../../Doc/library/enum.rst',
|
||||
optionflags=doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE,
|
||||
))
|
||||
if os.path.exists('Doc/howto/enum.rst'):
|
||||
tests.addTests(doctest.DocFileSuite(
|
||||
'../../Doc/howto/enum.rst',
|
||||
optionflags=doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE,
|
||||
))
|
||||
return tests
|
||||
|
||||
MODULE = __name__
|
||||
|
@ -67,6 +72,7 @@ try:
|
|||
LARRY = 1
|
||||
CURLY = 2
|
||||
MOE = 4
|
||||
BIG = 389
|
||||
except Exception as exc:
|
||||
FlagStooges = exc
|
||||
|
||||
|
@ -75,17 +81,20 @@ class FlagStoogesWithZero(Flag):
|
|||
LARRY = 1
|
||||
CURLY = 2
|
||||
MOE = 4
|
||||
BIG = 389
|
||||
|
||||
class IntFlagStooges(IntFlag):
|
||||
LARRY = 1
|
||||
CURLY = 2
|
||||
MOE = 4
|
||||
BIG = 389
|
||||
|
||||
class IntFlagStoogesWithZero(IntFlag):
|
||||
NOFLAG = 0
|
||||
LARRY = 1
|
||||
CURLY = 2
|
||||
MOE = 4
|
||||
BIG = 389
|
||||
|
||||
# for pickle test and subclass tests
|
||||
class Name(StrEnum):
|
||||
|
@ -1860,7 +1869,6 @@ class TestSpecial(unittest.TestCase):
|
|||
__qualname__ = 'NEI'
|
||||
x = ('the-x', 1)
|
||||
y = ('the-y', 2)
|
||||
|
||||
self.assertIs(NEI.__new__, Enum.__new__)
|
||||
self.assertEqual(repr(NEI.x + NEI.y), "NamedInt('(the-x + the-y)', 3)")
|
||||
globals()['NamedInt'] = NamedInt
|
||||
|
@ -1868,6 +1876,10 @@ class TestSpecial(unittest.TestCase):
|
|||
NI5 = NamedInt('test', 5)
|
||||
self.assertEqual(NI5, 5)
|
||||
self.assertEqual(NEI.y.value, 2)
|
||||
with self.assertRaisesRegex(TypeError, "name and value must be specified"):
|
||||
test_pickle_dump_load(self.assertIs, NEI.y)
|
||||
# fix pickle support and try again
|
||||
NEI.__reduce_ex__ = enum.pickle_by_enum_name
|
||||
test_pickle_dump_load(self.assertIs, NEI.y)
|
||||
test_pickle_dump_load(self.assertIs, NEI)
|
||||
|
||||
|
@ -3120,11 +3132,17 @@ class OldTestFlag(unittest.TestCase):
|
|||
test_pickle_dump_load(self.assertEqual,
|
||||
FlagStooges.CURLY&~FlagStooges.CURLY)
|
||||
test_pickle_dump_load(self.assertIs, FlagStooges)
|
||||
test_pickle_dump_load(self.assertEqual, FlagStooges.BIG)
|
||||
test_pickle_dump_load(self.assertEqual,
|
||||
FlagStooges.CURLY|FlagStooges.BIG)
|
||||
|
||||
test_pickle_dump_load(self.assertIs, FlagStoogesWithZero.CURLY)
|
||||
test_pickle_dump_load(self.assertEqual,
|
||||
FlagStoogesWithZero.CURLY|FlagStoogesWithZero.MOE)
|
||||
test_pickle_dump_load(self.assertIs, FlagStoogesWithZero.NOFLAG)
|
||||
test_pickle_dump_load(self.assertEqual, FlagStoogesWithZero.BIG)
|
||||
test_pickle_dump_load(self.assertEqual,
|
||||
FlagStoogesWithZero.CURLY|FlagStoogesWithZero.BIG)
|
||||
|
||||
test_pickle_dump_load(self.assertIs, IntFlagStooges.CURLY)
|
||||
test_pickle_dump_load(self.assertEqual,
|
||||
|
@ -3134,11 +3152,19 @@ class OldTestFlag(unittest.TestCase):
|
|||
test_pickle_dump_load(self.assertEqual, IntFlagStooges(0))
|
||||
test_pickle_dump_load(self.assertEqual, IntFlagStooges(0x30))
|
||||
test_pickle_dump_load(self.assertIs, IntFlagStooges)
|
||||
test_pickle_dump_load(self.assertEqual, IntFlagStooges.BIG)
|
||||
test_pickle_dump_load(self.assertEqual, IntFlagStooges.BIG|1)
|
||||
test_pickle_dump_load(self.assertEqual,
|
||||
IntFlagStooges.CURLY|IntFlagStooges.BIG)
|
||||
|
||||
test_pickle_dump_load(self.assertIs, IntFlagStoogesWithZero.CURLY)
|
||||
test_pickle_dump_load(self.assertEqual,
|
||||
IntFlagStoogesWithZero.CURLY|IntFlagStoogesWithZero.MOE)
|
||||
test_pickle_dump_load(self.assertIs, IntFlagStoogesWithZero.NOFLAG)
|
||||
test_pickle_dump_load(self.assertEqual, IntFlagStoogesWithZero.BIG)
|
||||
test_pickle_dump_load(self.assertEqual, IntFlagStoogesWithZero.BIG|1)
|
||||
test_pickle_dump_load(self.assertEqual,
|
||||
IntFlagStoogesWithZero.CURLY|IntFlagStoogesWithZero.BIG)
|
||||
|
||||
@unittest.skipIf(
|
||||
python_version >= (3, 12),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue