Don't automtically try to import pexpect in lldbpexpect.

Since pexpect doesn't exist on Windows, tests which are xfail'ed
are not being run at all because they are failing when the file
is imported due to the `import pexpect`.  This puts the import
behind a conditional and makes an empty base class in the case
where pexpect is not present.

llvm-svn: 258965
This commit is contained in:
Zachary Turner 2016-01-27 18:49:25 +00:00
parent e399e5bd3d
commit 74b7965d38
1 changed files with 47 additions and 41 deletions

View File

@ -6,58 +6,64 @@ import os
import sys
# Third-party modules
import pexpect
import six
# LLDB Modules
import lldb
from .lldbtest import *
from . import lldbutil
class PExpectTest(TestBase):
mydir = TestBase.compute_mydir(__file__)
def setUp(self):
TestBase.setUp(self)
def launchArgs(self):
if sys.platform.startswith('win32'):
class PExpectTest(TestBase):
pass
else:
import pexpect
def launch(self, timeout=None):
if timeout is None: timeout = 30
logfile = sys.stdout if self.TraceOn() else None
self.child = pexpect.spawn('%s %s' % (lldbtest_config.lldbExec, self.launchArgs()), logfile=logfile)
self.child.timeout = timeout
self.timeout = timeout
class PExpectTest(TestBase):
mydir = TestBase.compute_mydir(__file__)
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 setUp(self):
TestBase.setUp(self)
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 launchArgs(self):
pass
def sendimpl(self, sender, command, patterns=None, timeout=None, exact=None):
sender(command)
return self.expect(patterns=patterns, timeout=timeout, exact=exact)
def launch(self, timeout=None):
if timeout is None: timeout = 30
logfile = sys.stdout if self.TraceOn() else None
self.child = pexpect.spawn('%s %s' % (lldbtest_config.lldbExec, self.launchArgs()), logfile=logfile)
self.child.timeout = timeout
self.timeout = timeout
def send(self, command, patterns=None, timeout=None, exact=None):
return self.sendimpl(self.child.send, command, patterns, timeout, exact)
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 sendline(self, command, patterns=None, timeout=None, exact=None):
return self.sendimpl(self.child.sendline, command, patterns, timeout, exact)
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 quit(self, gracefully=None):
if gracefully is None: gracefully = True
self.child.sendeof()
self.child.close(force=not gracefully)
self.child = None
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