[3.9] bpo-45578: add tests for dis.distb (GH-29332) (#29386)

(cherry picked from commit e346f19681)

Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
This commit is contained in:
Łukasz Langa 2021-11-03 17:47:04 +01:00 committed by GitHub
parent 3a93c669f5
commit 8198617bcc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 0 deletions

View file

@ -1202,5 +1202,46 @@ class BytecodeTests(unittest.TestCase):
b = dis.Bytecode.from_traceback(tb)
self.assertEqual(b.dis(), dis_traceback)
class TestDisTraceback(unittest.TestCase):
def setUp(self) -> None:
try: # We need to clean up existing tracebacks
del sys.last_traceback
except AttributeError:
pass
return super().setUp()
def get_disassembly(self, tb):
output = io.StringIO()
with contextlib.redirect_stdout(output):
dis.distb(tb)
return output.getvalue()
def test_distb_empty(self):
with self.assertRaises(RuntimeError):
dis.distb()
def test_distb_last_traceback(self):
# We need to have an existing last traceback in `sys`:
tb = get_tb()
sys.last_traceback = tb
self.assertEqual(self.get_disassembly(None), dis_traceback)
def test_distb_explicit_arg(self):
tb = get_tb()
self.assertEqual(self.get_disassembly(tb), dis_traceback)
class TestDisTracebackWithFile(TestDisTraceback):
# Run the `distb` tests again, using the file arg instead of print
def get_disassembly(self, tb):
output = io.StringIO()
with contextlib.redirect_stdout(output):
dis.distb(tb, file=output)
return output.getvalue()
if __name__ == "__main__":
unittest.main()

View file

@ -0,0 +1 @@
Add tests for :func:`dis.distb`