diff options
author | Ethan Furman <ethan@stoneleaf.us> | 2020-12-08 19:14:10 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-08 19:14:10 (GMT) |
commit | 37440eef7f9a0c27e13fc9ce0850574bb00688b0 (patch) | |
tree | b96c61bc2d39bef6d78dc3c9506ad69304051a9f /Lib | |
parent | c168b5078f88874b9acd993ac886f82269c780dd (diff) | |
download | cpython-37440eef7f9a0c27e13fc9ce0850574bb00688b0.zip cpython-37440eef7f9a0c27e13fc9ce0850574bb00688b0.tar.gz cpython-37440eef7f9a0c27e13fc9ce0850574bb00688b0.tar.bz2 |
bpo-41907: [Enum] fix format() behavior for IntFlag (GH-22497)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/enum.py | 2 | ||||
-rw-r--r-- | Lib/test/test_enum.py | 14 |
2 files changed, 15 insertions, 1 deletions
diff --git a/Lib/enum.py b/Lib/enum.py index d670ad7..484db2c 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -658,7 +658,7 @@ class Enum(metaclass=EnumMeta): # the value # pure Enum branch, or branch with __str__ explicitly overridden - str_overridden = type(self).__str__ != Enum.__str__ + str_overridden = type(self).__str__ not in (Enum.__str__, Flag.__str__) if self._member_type_ is object or str_overridden: cls = str val = str(self) diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index d1dd2e7..f2171b5 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -585,12 +585,15 @@ class TestEnum(unittest.TestCase): class Test1Enum(MyMethodEnum, int, MyStrEnum): One = 1 Two = 2 + self.assertTrue(Test1Enum._member_type_ is int) self.assertEqual(str(Test1Enum.One), 'MyStr') + self.assertEqual(format(Test1Enum.One, ''), 'MyStr') # class Test2Enum(MyStrEnum, MyMethodEnum): One = 1 Two = 2 self.assertEqual(str(Test2Enum.One), 'MyStr') + self.assertEqual(format(Test1Enum.One, ''), 'MyStr') def test_inherited_data_type(self): class HexInt(int): @@ -2251,6 +2254,11 @@ class TestFlag(unittest.TestCase): self.assertEqual(repr(~(Open.RO | Open.CE)), '<Open.AC: 3>') self.assertEqual(repr(~(Open.WO | Open.CE)), '<Open.RW: 2>') + def test_format(self): + Perm = self.Perm + self.assertEqual(format(Perm.R, ''), 'Perm.R') + self.assertEqual(format(Perm.R | Perm.X, ''), 'Perm.R|X') + def test_or(self): Perm = self.Perm for i in Perm: @@ -2590,6 +2598,7 @@ class TestIntFlag(unittest.TestCase): def test_type(self): Perm = self.Perm + self.assertTrue(Perm._member_type_ is int) Open = self.Open for f in Perm: self.assertTrue(isinstance(f, Perm)) @@ -2669,6 +2678,11 @@ class TestIntFlag(unittest.TestCase): self.assertEqual(repr(~(Open.WO | Open.CE)), '<Open.RW: -524290>') self.assertEqual(repr(Open(~4)), '<Open.CE|AC|RW|WO: -5>') + def test_format(self): + Perm = self.Perm + self.assertEqual(format(Perm.R, ''), '4') + self.assertEqual(format(Perm.R | Perm.X, ''), '5') + def test_or(self): Perm = self.Perm for i in Perm: |