forked from Rust-related/RustPython
This was chaned because stdout is being written to by rust code, which currently can't be redirected by reassigning sys.stdout. This caused the tests to fail because they couldn't see the output of what was being tested.
61 lines
1.6 KiB
Python
Vendored
61 lines
1.6 KiB
Python
Vendored
import subprocess
|
|
import sys
|
|
import unittest
|
|
|
|
# This only tests that it prints something in order
|
|
# to avoid changing this test if the bytecode changes
|
|
|
|
# These tests start a new process instead of redirecting stdout because
|
|
# stdout is being written to by rust code, which currently can't be
|
|
# redirected by reassigning sys.stdout
|
|
|
|
|
|
class TestDis(unittest.TestCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
cls.setup = """
|
|
import dis
|
|
def tested_func(): pass
|
|
"""
|
|
cls.command = (sys.executable, "-c")
|
|
|
|
def test_dis(self):
|
|
test_code = f"""
|
|
{self.setup}
|
|
dis.dis(tested_func)
|
|
dis.dis("x = 2; print(x)")
|
|
"""
|
|
|
|
result = subprocess.run(
|
|
self.command + (test_code,), capture_output=True
|
|
)
|
|
self.assertNotEqual("", result.stdout.decode())
|
|
self.assertEqual("", result.stderr.decode())
|
|
|
|
def test_disassemble(self):
|
|
test_code = f"""
|
|
{self.setup}
|
|
dis.disassemble(tested_func)
|
|
"""
|
|
result = subprocess.run(
|
|
self.command + (test_code,), capture_output=True
|
|
)
|
|
# In CPython this would raise an AttributeError, not a
|
|
# TypeError because dis is implemented in python in CPython and
|
|
# as such the type mismatch wouldn't be caught immeadiately
|
|
self.assertIn("TypeError", result.stderr.decode())
|
|
|
|
test_code = f"""
|
|
{self.setup}
|
|
dis.disassemble(tested_func.__code__)
|
|
"""
|
|
result = subprocess.run(
|
|
self.command + (test_code,), capture_output=True
|
|
)
|
|
self.assertNotEqual("", result.stdout.decode())
|
|
self.assertEqual("", result.stderr.decode())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|