diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2015-09-29 19:34:16 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2015-09-29 19:34:16 (GMT) |
commit | 87b93fe36f3d66bb200c8c0227a4cc7d50ff32d9 (patch) | |
tree | d2ed754421a87d5dcf00d02854868e68d095845f /Lib | |
parent | 11c715f12e9c089f79224d78db59b4907c7d7236 (diff) | |
parent | 3066fc41d1a054e7734e8334af9758173ee0aa9d (diff) | |
download | cpython-87b93fe36f3d66bb200c8c0227a4cc7d50ff32d9.zip cpython-87b93fe36f3d66bb200c8c0227a4cc7d50ff32d9.tar.gz cpython-87b93fe36f3d66bb200c8c0227a4cc7d50ff32d9.tar.bz2 |
Issue #25111: Fixed comparison of traceback.FrameSummary.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_traceback.py | 16 | ||||
-rw-r--r-- | Lib/traceback.py | 12 |
2 files changed, 19 insertions, 9 deletions
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index 0362504..b7695d6 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -640,7 +640,7 @@ class MiscTracebackCases(unittest.TestCase): return traceback.extract_stack() result = extract() lineno = extract.__code__.co_firstlineno - self.assertEqual([tuple(x) for x in result[-2:]], [ + self.assertEqual(result[-2:], [ (__file__, lineno+2, 'test_extract_stack', 'result = extract()'), (__file__, lineno+1, 'extract', 'return traceback.extract_stack()'), ]) @@ -652,10 +652,16 @@ class TestFrame(unittest.TestCase): linecache.clearcache() linecache.lazycache("f", globals()) f = traceback.FrameSummary("f", 1, "dummy") - self.assertEqual( - ("f", 1, "dummy", '"""Test cases for traceback module"""'), - tuple(f)) - self.assertEqual(None, f.locals) + self.assertEqual(f, + ("f", 1, "dummy", '"""Test cases for traceback module"""')) + self.assertEqual(tuple(f), + ("f", 1, "dummy", '"""Test cases for traceback module"""')) + self.assertEqual(f, traceback.FrameSummary("f", 1, "dummy")) + self.assertEqual(f, tuple(f)) + # Since tuple.__eq__ doesn't support FrameSummary, the equality + # operator fallbacks to FrameSummary.__eq__. + self.assertEqual(tuple(f), f) + self.assertIsNone(f.locals) def test_lazy_lines(self): linecache.clearcache() diff --git a/Lib/traceback.py b/Lib/traceback.py index 682d8b1..1bac6eb 100644 --- a/Lib/traceback.py +++ b/Lib/traceback.py @@ -257,10 +257,14 @@ class FrameSummary: dict((k, repr(v)) for k, v in locals.items()) if locals else None def __eq__(self, other): - return (self.filename == other.filename and - self.lineno == other.lineno and - self.name == other.name and - self.locals == other.locals) + if isinstance(other, FrameSummary): + return (self.filename == other.filename and + self.lineno == other.lineno and + self.name == other.name and + self.locals == other.locals) + if isinstance(other, tuple): + return (self.filename, self.lineno, self.name, self.line) == other + return NotImplemented def __getitem__(self, pos): return (self.filename, self.lineno, self.name, self.line)[pos] |