mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-23 22:00:10 +00:00
019c8396c9
PExpect 4.6, when using 'utf-8' throws a TypeError when trying to write to the log file: File "llvm-project/lldb/third_party/Python/module/pexpect-4.6/pexpect/spawnbase.py", line 126, in _log self.logfile.write(s) TypeError: a bytes-like object is required, not 'str' This looks like a bug in PExpect to me. Since the log file is only used for tracing, work around the issue by disabling the log file when specifying an encoding. This should fix the Debian bot [1] which runs the test with tracing enabled (-t). [1] https://lab.llvm.org/buildbot/#/builders/68/builds/59955
108 lines
3.1 KiB
Python
108 lines
3.1 KiB
Python
# System modules
|
|
import os
|
|
import sys
|
|
|
|
# LLDB Modules
|
|
import lldb
|
|
from .lldbtest import *
|
|
from . import lldbutil
|
|
from lldbsuite.test.decorators import *
|
|
|
|
|
|
@skipIfRemote
|
|
@skipIfWindows # llvm.org/pr22274: need a pexpect replacement for windows
|
|
class PExpectTest(TestBase):
|
|
NO_DEBUG_INFO_TESTCASE = True
|
|
PROMPT = "(lldb) "
|
|
|
|
def expect_prompt(self):
|
|
self.child.expect_exact(self.PROMPT)
|
|
|
|
def launch(
|
|
self,
|
|
executable=None,
|
|
extra_args=None,
|
|
timeout=60,
|
|
dimensions=None,
|
|
run_under=None,
|
|
post_spawn=None,
|
|
encoding=None,
|
|
use_colors=False,
|
|
):
|
|
# Using a log file is incompatible with using utf-8 as the encoding.
|
|
logfile = (
|
|
getattr(sys.stdout, "buffer", sys.stdout)
|
|
if (self.TraceOn() and not encoding)
|
|
else None
|
|
)
|
|
|
|
args = []
|
|
if run_under is not None:
|
|
args += run_under
|
|
args += [lldbtest_config.lldbExec, "--no-lldbinit"]
|
|
if not use_colors:
|
|
args.append("--no-use-colors")
|
|
for cmd in self.setUpCommands():
|
|
if "use-color false" in cmd and use_colors:
|
|
continue
|
|
args += ["-O", cmd]
|
|
if executable is not None:
|
|
args += ["--file", executable]
|
|
if extra_args is not None:
|
|
args.extend(extra_args)
|
|
|
|
env = dict(os.environ)
|
|
env["TERM"] = "vt100"
|
|
env["HOME"] = self.getBuildDir()
|
|
|
|
import pexpect
|
|
|
|
self.child = pexpect.spawn(
|
|
args[0],
|
|
args=args[1:],
|
|
logfile=logfile,
|
|
timeout=timeout,
|
|
dimensions=dimensions,
|
|
env=env,
|
|
encoding=encoding,
|
|
)
|
|
self.child.ptyproc.delayafterclose = timeout / 10
|
|
self.child.ptyproc.delayafterterminate = timeout / 10
|
|
|
|
if post_spawn is not None:
|
|
post_spawn()
|
|
self.expect_prompt()
|
|
for cmd in self.setUpCommands():
|
|
if "use-color false" in cmd and use_colors:
|
|
continue
|
|
self.child.expect_exact(cmd)
|
|
self.expect_prompt()
|
|
if executable is not None:
|
|
self.child.expect_exact("target create")
|
|
self.child.expect_exact("Current executable set to")
|
|
self.expect_prompt()
|
|
|
|
def expect(self, cmd, substrs=None):
|
|
self.assertNotIn("\n", cmd)
|
|
# If 'substrs' is a string then this code would just check that every
|
|
# character of the string is in the output.
|
|
assert not isinstance(substrs, str), "substrs must be a collection of strings"
|
|
|
|
self.child.sendline(cmd)
|
|
if substrs is not None:
|
|
for s in substrs:
|
|
self.child.expect_exact(s)
|
|
self.expect_prompt()
|
|
|
|
def quit(self, gracefully=True):
|
|
self.child.sendeof()
|
|
self.child.close(force=not gracefully)
|
|
self.child = None
|
|
|
|
def cursor_forward_escape_seq(self, chars_to_move):
|
|
"""
|
|
Returns the escape sequence to move the cursor forward/right
|
|
by a certain amount of characters.
|
|
"""
|
|
return b"\x1b\[" + str(chars_to_move).encode("utf-8") + b"C"
|