Pavel Labath c5cefa2caf Fix flakyness in TestCommandScriptImmediateOutput
I'm not sure why this surfaced at this particular point, but
TestCommandScriptImmediateOutput (a pexpect test) had a synchronization
issue, where the (lldb) promts it was expecting were getting out of
sync. This happened for two reasons:
- it did not expect the initial (lldb) prompt we print at startup
- launchArgs() returned None, which resulted in an extra "target create
  None" command being issued to lldb (and an extra unhandled prompt
  being printed).

Resolving these two issues seems to fix (or at least, improve) the test.

llvm-svn: 357459
2019-04-02 09:45:40 +00:00

96 lines
2.7 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):
return ""
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