
using the macOS version as a proxy. I can't reproduce any of these failures locally, but the tests all use pexpect and probably have bad timeout behavior under high load.
105 lines
3.5 KiB
Python
105 lines
3.5 KiB
Python
"""
|
|
Test that 'stty -a' displays the same output before and after running the lldb command.
|
|
"""
|
|
|
|
import lldb
|
|
import io
|
|
import sys
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
|
|
class TestSTTYBeforeAndAfter(TestBase):
|
|
@classmethod
|
|
def classCleanup(cls):
|
|
"""Cleanup the test byproducts."""
|
|
cls.RemoveTempFile("child_send1.txt")
|
|
cls.RemoveTempFile("child_read1.txt")
|
|
cls.RemoveTempFile("child_send2.txt")
|
|
cls.RemoveTempFile("child_read2.txt")
|
|
|
|
@skipIf(macos_version=["<", "14.0"], asan=True)
|
|
@add_test_categories(["pexpect"])
|
|
@no_debug_info_test
|
|
def test_stty_dash_a_before_and_afetr_invoking_lldb_command(self):
|
|
"""Test that 'stty -a' displays the same output before and after running the lldb command."""
|
|
import pexpect
|
|
|
|
if not which("expect"):
|
|
self.skipTest("The 'expect' program cannot be located, skip the test")
|
|
|
|
# The expect prompt.
|
|
expect_prompt = "expect[0-9.]+> "
|
|
# The default lldb prompt.
|
|
lldb_prompt = "(lldb) "
|
|
|
|
# So that the child gets torn down after the test.
|
|
self.child = pexpect.spawn("expect", encoding="utf-8")
|
|
child = self.child
|
|
|
|
child.expect(expect_prompt)
|
|
child.setecho(True)
|
|
if self.TraceOn():
|
|
child.logfile = sys.stdout
|
|
|
|
if self.platformIsDarwin():
|
|
child.sendline("set env(TERM) xterm")
|
|
else:
|
|
child.sendline("set env(TERM) vt100")
|
|
child.expect(expect_prompt)
|
|
child.sendline("puts $env(TERM)")
|
|
child.expect(expect_prompt)
|
|
|
|
# Turn on loggings for input/output to/from the child.
|
|
child.logfile_send = child_send1 = io.StringIO()
|
|
child.logfile_read = child_read1 = io.StringIO()
|
|
child.sendline("stty -a")
|
|
child.expect(expect_prompt)
|
|
|
|
# Now that the stage1 logging is done, restore logfile to None to
|
|
# stop further logging.
|
|
child.logfile_send = None
|
|
child.logfile_read = None
|
|
|
|
# Invoke the lldb command.
|
|
child.sendline(lldbtest_config.lldbExec)
|
|
child.expect_exact(lldb_prompt)
|
|
|
|
# Immediately quit.
|
|
child.sendline("quit")
|
|
child.expect(expect_prompt)
|
|
|
|
child.logfile_send = child_send2 = io.StringIO()
|
|
child.logfile_read = child_read2 = io.StringIO()
|
|
child.sendline("stty -a")
|
|
child.expect(expect_prompt)
|
|
|
|
child.sendline("exit")
|
|
|
|
# Now that the stage2 logging is done, restore logfile to None to
|
|
# stop further logging.
|
|
child.logfile_send = None
|
|
child.logfile_read = None
|
|
|
|
if self.TraceOn():
|
|
print("\n\nContents of child_send1:")
|
|
print(child_send1.getvalue())
|
|
print("\n\nContents of child_read1:")
|
|
print(child_read1.getvalue())
|
|
print("\n\nContents of child_send2:")
|
|
print(child_send2.getvalue())
|
|
print("\n\nContents of child_read2:")
|
|
print(child_read2.getvalue())
|
|
|
|
stty_output1_lines = child_read1.getvalue().splitlines()
|
|
stty_output2_lines = child_read2.getvalue().splitlines()
|
|
zipped = list(zip(stty_output1_lines, stty_output2_lines))
|
|
for tuple in zipped:
|
|
if self.TraceOn():
|
|
print("tuple->%s" % str(tuple))
|
|
# Every line should compare equal until the first blank line.
|
|
if len(tuple[0]) == 0:
|
|
break
|
|
self.assertEqual(tuple[0], tuple[1])
|