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