blob: d37d6fa4f8cbfb3218962c5c790f1bfd3d8ca546 [file] [log] [blame]
Zachary Turner35d017f2015-10-23 17:04:29 +00001from __future__ import print_function
Zachary Turnerc1b7cd72015-11-05 19:22:28 +00002from __future__ import absolute_import
Zachary Turner35d017f2015-10-23 17:04:29 +00003
Zachary Turnerc1b7cd72015-11-05 19:22:28 +00004# System modules
Enrico Granata78b7d5f2015-02-02 22:12:39 +00005import os
Enrico Granata78b7d5f2015-02-02 22:12:39 +00006import sys
Zachary Turnerc1b7cd72015-11-05 19:22:28 +00007
8# Third-party modules
Zachary Turner74b79652016-01-27 18:49:25 +00009import six
Enrico Granata78b7d5f2015-02-02 22:12:39 +000010
Zachary Turnerc1b7cd72015-11-05 19:22:28 +000011# LLDB Modules
12import lldb
13from .lldbtest import *
14from . import lldbutil
15
Zachary Turner74b79652016-01-27 18:49:25 +000016if sys.platform.startswith('win32'):
17 class PExpectTest(TestBase):
Enrico Granata18cf8e02015-02-02 23:03:37 +000018 pass
Zachary Turner74b79652016-01-27 18:49:25 +000019else:
20 import pexpect
Enrico Granata78b7d5f2015-02-02 22:12:39 +000021
Zachary Turner74b79652016-01-27 18:49:25 +000022 class PExpectTest(TestBase):
23
24 mydir = TestBase.compute_mydir(__file__)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000025
Zachary Turner74b79652016-01-27 18:49:25 +000026 def setUp(self):
27 TestBase.setUp(self)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000028
Zachary Turner74b79652016-01-27 18:49:25 +000029 def launchArgs(self):
30 pass
Enrico Granatadecf03b2015-02-03 03:11:59 +000031
Zachary Turner74b79652016-01-27 18:49:25 +000032 def launch(self, timeout=None):
33 if timeout is None: timeout = 30
34 logfile = sys.stdout if self.TraceOn() else None
Greg Clayton3de2a902016-03-30 00:02:13 +000035 self.child = pexpect.spawn('%s --no-use-colors %s' % (lldbtest_config.lldbExec, self.launchArgs()), logfile=logfile)
Zachary Turner74b79652016-01-27 18:49:25 +000036 self.child.timeout = timeout
37 self.timeout = timeout
Enrico Granata78b7d5f2015-02-02 22:12:39 +000038
Zachary Turner74b79652016-01-27 18:49:25 +000039 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)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000047
Zachary Turner74b79652016-01-27 18:49:25 +000048 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)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000054
Zachary Turner74b79652016-01-27 18:49:25 +000055 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