[Python-checkins] bpo-38659: Properly re-intialize module variables in test_enum (GH-25516)

ethanfurman webhook-mailer at python.org
Wed Apr 21 23:23:28 EDT 2021


https://github.com/python/cpython/commit/37b173c5231b7b202859af97c17bc3d04b1e4c75
commit: 37b173c5231b7b202859af97c17bc3d04b1e4c75
branch: master
author: Ammar Askar <ammar at ammaraskar.com>
committer: ethanfurman <ethan at stoneleaf.us>
date: 2021-04-21T20:22:58-07:00
summary:

bpo-38659: Properly re-intialize module variables in test_enum (GH-25516)

Previously TestIntEnumConvert and TestStrEnumConvert would end up
converting the module level variables from their regular int form
to a `test.test_enum.X` instance after _convert would run. This
meant that after a single test ran, the next set of _convert
functions would be operating on the enum instances rather than
ints. This would cause some tests such as the one involving format
to fail when running under a mode that repeatedly runs test such
as the refleak finder.

files:
M Lib/test/test_enum.py

diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py
index d946dd520da95..4f28b80293d35 100644
--- a/Lib/test/test_enum.py
+++ b/Lib/test/test_enum.py
@@ -3642,6 +3642,14 @@ def test__all__(self):
 CONVERT_STRING_TEST_NAME_F = 5
 
 class TestIntEnumConvert(unittest.TestCase):
+    def setUp(self):
+        # Reset the module-level test variables to their original integer
+        # values, otherwise the already created enum values get converted
+        # instead.
+        for suffix in ['A', 'B', 'C', 'D', 'E', 'F']:
+            globals()[f'CONVERT_TEST_NAME_{suffix}'] = 5
+            globals()[f'CONVERT_STRING_TEST_NAME_{suffix}'] = 5
+
     def test_convert_value_lookup_priority(self):
         test_type = enum.IntEnum._convert_(
                 'UnittestConvert',
@@ -3688,8 +3696,6 @@ def test_convert_raise(self):
                 filter=lambda x: x.startswith('CONVERT_TEST_'))
 
     def test_convert_repr_and_str(self):
-        # reset global constants, as previous tests could have converted the
-        # integer values to enums
         module = ('test.test_enum', '__main__')[__name__=='__main__']
         test_type = enum.IntEnum._convert_(
                 'UnittestConvert',
@@ -3704,6 +3710,11 @@ def test_convert_repr_and_str(self):
 CONVERT_STR_TEST_1 = 'hello'
 
 class TestStrEnumConvert(unittest.TestCase):
+    def setUp(self):
+        global CONVERT_STR_TEST_1
+        global CONVERT_STR_TEST_2
+        CONVERT_STR_TEST_2 = 'goodbye'
+        CONVERT_STR_TEST_1 = 'hello'
 
     def test_convert(self):
         test_type = enum.StrEnum._convert_(



More information about the Python-checkins mailing list