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