From: Neil Schemenauer Date: Tue, 29 Apr 2025 03:33:13 +0000 (-0700) Subject: [3.13] gh-133122: Fix for test_type_lookup_mro_reference. (gh-133127) X-Git-Tag: v3.13.4~205 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=64dcbb0c31adb068570725003fd6d2ddd8ee1507;p=thirdparty%2FPython%2Fcpython.git [3.13] gh-133122: Fix for test_type_lookup_mro_reference. (gh-133127) Change the unit test case to use `getattr()` so that we avoid the bytecode specializer optimizing the access. The specializer will call the `__eq__` method before the unit test expects, causing it to fail. In the 3.14 branch (gh-128164) the test is changed in a different way to avoid the same issue. --- diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index f5f8931a046b..ebea459f1ac6 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -5177,10 +5177,15 @@ class MiscTests(unittest.TestCase): with self.assertWarnsRegex(RuntimeWarning, 'X'): X = type('X', (Base,), {MyKey(): 5}) + + # Note that the access below uses getattr() rather than normally + # accessing the attribute. That is done to avoid the bytecode + # specializer activating on repeated runs of the test. + # mykey is read from Base - self.assertEqual(X.mykey, 'from Base') + self.assertEqual(getattr(X, 'mykey'), 'from Base') # mykey2 is read from Base2 because MyKey.__eq__ has set __bases__ - self.assertEqual(X.mykey2, 'from Base2') + self.assertEqual(getattr(X, 'mykey2'), 'from Base2') class PicklingTests(unittest.TestCase):