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: 34 timeout = 30 35 logfile = sys.stdout if self.TraceOn() else None 36 self.child = pexpect.spawn( 37 '%s --no-use-colors %s' % 38 (lldbtest_config.lldbExec, self.launchArgs()), logfile=logfile) 39 self.child.timeout = timeout 40 self.timeout = timeout 41 42 def expect(self, patterns=None, timeout=None, exact=None): 43 if patterns is None: 44 return None 45 if timeout is None: 46 timeout = self.timeout 47 if exact is None: 48 exact = False 49 if exact: 50 return self.child.expect_exact(patterns, timeout=timeout) 51 else: 52 return self.child.expect(patterns, timeout=timeout) 53 54 def expectall(self, patterns=None, timeout=None, exact=None): 55 if patterns is None: 56 return None 57 if timeout is None: 58 timeout = self.timeout 59 if exact is None: 60 exact = False 61 for pattern in patterns: 62 self.expect(pattern, timeout=timeout, exact=exact) 63 64 def sendimpl( 65 self, 66 sender, 67 command, 68 patterns=None, 69 timeout=None, 70 exact=None): 71 sender(command) 72 return self.expect(patterns=patterns, timeout=timeout, exact=exact) 73 74 def send(self, command, patterns=None, timeout=None, exact=None): 75 return self.sendimpl( 76 self.child.send, 77 command, 78 patterns, 79 timeout, 80 exact) 81 82 def sendline(self, command, patterns=None, timeout=None, exact=None): 83 return self.sendimpl( 84 self.child.sendline, 85 command, 86 patterns, 87 timeout, 88 exact) 89 90 def quit(self, gracefully=None): 91 if gracefully is None: 92 gracefully = True 93 self.child.sendeof() 94 self.child.close(force=not gracefully) 95 self.child = None 96