mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-09 16:16:07 +00:00

1 - If you plan on looking for the "(lldb) " prompt as a regular expression, look for "\(lldb\) " so you don't just find "lldb". 2 - Make sure to not use colors (specify --no-use-colors as an option to lldb when launching it) as our editline will print: "(lldb) <color junk>(lldb) " where "<color junk>" is a work around that is used to allow us to colorize our prompts. The bad thing is this will make pexepct code like this not execute as you would expect: prompt = "\(lldb\) " self.child.sendline("breakpoint set ...", prompt) self.child.sendline("breakpoint clear ...", prompt) The problem is the first "sendline" will create two lldb prompts and will match both the first and second prompts and you output will get off. So be sure to disable colors if you need to. Fixed a case where "TestCommandScriptImmediateOutput.py" would fail if you have spaces in your directory names. I modified custom_command.py to use shlex to parse arguments and I quoted the file path we sent down to the custom_command.write_file function. llvm-svn: 264810
70 lines
2.3 KiB
Python
70 lines
2.3 KiB
Python
from __future__ import print_function
|
|
from __future__ import absolute_import
|
|
|
|
# System modules
|
|
import os
|
|
import sys
|
|
|
|
# Third-party modules
|
|
import six
|
|
|
|
# LLDB Modules
|
|
import lldb
|
|
from .lldbtest import *
|
|
from . import lldbutil
|
|
|
|
if sys.platform.startswith('win32'):
|
|
class PExpectTest(TestBase):
|
|
pass
|
|
else:
|
|
import pexpect
|
|
|
|
class PExpectTest(TestBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
def setUp(self):
|
|
TestBase.setUp(self)
|
|
|
|
def launchArgs(self):
|
|
pass
|
|
|
|
def launch(self, timeout=None):
|
|
if timeout is None: timeout = 30
|
|
logfile = sys.stdout if self.TraceOn() else None
|
|
self.child = pexpect.spawn('%s --no-use-colors %s' % (lldbtest_config.lldbExec, self.launchArgs()), logfile=logfile)
|
|
self.child.timeout = timeout
|
|
self.timeout = timeout
|
|
|
|
def expect(self, patterns=None, timeout=None, exact=None):
|
|
if patterns is None: return None
|
|
if timeout is None: timeout = self.timeout
|
|
if exact is None: exact = False
|
|
if exact:
|
|
return self.child.expect_exact(patterns, timeout=timeout)
|
|
else:
|
|
return self.child.expect(patterns, timeout=timeout)
|
|
|
|
def expectall(self, patterns=None, timeout=None, exact=None):
|
|
if patterns is None: return None
|
|
if timeout is None: timeout = self.timeout
|
|
if exact is None: exact = False
|
|
for pattern in patterns:
|
|
self.expect(pattern, timeout=timeout, exact=exact)
|
|
|
|
def sendimpl(self, sender, command, patterns=None, timeout=None, exact=None):
|
|
sender(command)
|
|
return self.expect(patterns=patterns, timeout=timeout, exact=exact)
|
|
|
|
def send(self, command, patterns=None, timeout=None, exact=None):
|
|
return self.sendimpl(self.child.send, command, patterns, timeout, exact)
|
|
|
|
def sendline(self, command, patterns=None, timeout=None, exact=None):
|
|
return self.sendimpl(self.child.sendline, command, patterns, timeout, exact)
|
|
|
|
def quit(self, gracefully=None):
|
|
if gracefully is None: gracefully = True
|
|
self.child.sendeof()
|
|
self.child.close(force=not gracefully)
|
|
self.child = None
|