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