1from __future__ import print_function 2from __future__ import absolute_import 3 4# System modules 5import os 6import sys 7 8# Third-party modules 9import six 10 11# LLDB Modules 12import lldb 13from .lldbtest import * 14from . import lldbutil 15 16if sys.platform.startswith('win32'): 17 class PExpectTest(TestBase): 18 pass 19else: 20 import pexpect 21 22 class PExpectTest(TestBase): 23 24 mydir = TestBase.compute_mydir(__file__) 25 26 def setUp(self): 27 TestBase.setUp(self) 28 29 def launchArgs(self): 30 pass 31 32 def launch(self, timeout=None): 33 if timeout is None: timeout = 30 34 logfile = sys.stdout if self.TraceOn() else None 35 self.child = pexpect.spawn('%s %s' % (lldbtest_config.lldbExec, self.launchArgs()), logfile=logfile) 36 self.child.timeout = timeout 37 self.timeout = timeout 38 39 def expect(self, patterns=None, timeout=None, exact=None): 40 if patterns is None: return None 41 if timeout is None: timeout = self.timeout 42 if exact is None: exact = False 43 if exact: 44 return self.child.expect_exact(patterns, timeout=timeout) 45 else: 46 return self.child.expect(patterns, timeout=timeout) 47 48 def expectall(self, patterns=None, timeout=None, exact=None): 49 if patterns is None: return None 50 if timeout is None: timeout = self.timeout 51 if exact is None: exact = False 52 for pattern in patterns: 53 self.expect(pattern, timeout=timeout, exact=exact) 54 55 def sendimpl(self, sender, command, patterns=None, timeout=None, exact=None): 56 sender(command) 57 return self.expect(patterns=patterns, timeout=timeout, exact=exact) 58 59 def send(self, command, patterns=None, timeout=None, exact=None): 60 return self.sendimpl(self.child.send, command, patterns, timeout, exact) 61 62 def sendline(self, command, patterns=None, timeout=None, exact=None): 63 return self.sendimpl(self.child.sendline, command, patterns, timeout, exact) 64 65 def quit(self, gracefully=None): 66 if gracefully is None: gracefully = True 67 self.child.sendeof() 68 self.child.close(force=not gracefully) 69 self.child = None 70