mirror of
https://github.com/python/cpython.git
synced 2025-08-28 04:35:02 +00:00
signal, socket, and ssl module IntEnum constant name lookups now return a
consistent name for values having multiple names. Ex: signal.Signals(6) now refers to itself as signal.SIGALRM rather than flipping between that and signal.SIGIOT based on the interpreter's hash randomization seed. This helps finish issue27167.
This commit is contained in:
parent
16931c3559
commit
6f20bd6063
3 changed files with 49 additions and 2 deletions
|
@ -1768,5 +1768,41 @@ class MiscTestCase(unittest.TestCase):
|
|||
support.check__all__(self, enum)
|
||||
|
||||
|
||||
# These are unordered here on purpose to ensure that declaration order
|
||||
# makes no difference.
|
||||
CONVERT_TEST_NAME_D = 5
|
||||
CONVERT_TEST_NAME_C = 5
|
||||
CONVERT_TEST_NAME_B = 5
|
||||
CONVERT_TEST_NAME_A = 5 # This one should sort first.
|
||||
CONVERT_TEST_NAME_E = 5
|
||||
CONVERT_TEST_NAME_F = 5
|
||||
|
||||
class TestIntEnumConvert(unittest.TestCase):
|
||||
def test_convert_value_lookup_priority(self):
|
||||
test_type = enum.IntEnum._convert(
|
||||
'UnittestConvert', 'test.test_enum',
|
||||
filter=lambda x: x.startswith('CONVERT_TEST_'))
|
||||
# We don't want the reverse lookup value to vary when there are
|
||||
# multiple possible names for a given value. It should always
|
||||
# report the first lexigraphical name in that case.
|
||||
self.assertEqual(test_type(5).name, 'CONVERT_TEST_NAME_A')
|
||||
|
||||
def test_convert(self):
|
||||
test_type = enum.IntEnum._convert(
|
||||
'UnittestConvert', 'test.test_enum',
|
||||
filter=lambda x: x.startswith('CONVERT_TEST_'))
|
||||
# Ensure that test_type has all of the desired names and values.
|
||||
self.assertEqual(test_type.CONVERT_TEST_NAME_F,
|
||||
test_type.CONVERT_TEST_NAME_A)
|
||||
self.assertEqual(test_type.CONVERT_TEST_NAME_B, 5)
|
||||
self.assertEqual(test_type.CONVERT_TEST_NAME_C, 5)
|
||||
self.assertEqual(test_type.CONVERT_TEST_NAME_D, 5)
|
||||
self.assertEqual(test_type.CONVERT_TEST_NAME_E, 5)
|
||||
# Ensure that test_type only picked up names matching the filter.
|
||||
self.assertEqual([name for name in dir(test_type)
|
||||
if name[0:2] not in ('CO', '__')],
|
||||
[], msg='Names other than CONVERT_TEST_* found.')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue