blob: 55b958a55972dea7728d5d16b56fad7bfb9fd386 [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
Enrico Granata78b7d5f2015-02-02 22:12:39 +00009import pexpect
10
Zachary Turnerc1b7cd72015-11-05 19:22:28 +000011# LLDB Modules
12import lldb
13from .lldbtest import *
14from . import lldbutil
15
Enrico Granata78b7d5f2015-02-02 22:12:39 +000016class PExpectTest(TestBase):
17
18 mydir = TestBase.compute_mydir(__file__)
19
20 def setUp(self):
Enrico Granata78b7d5f2015-02-02 22:12:39 +000021 TestBase.setUp(self)
22
Enrico Granata78b7d5f2015-02-02 22:12:39 +000023 def launchArgs(self):
Enrico Granata18cf8e02015-02-02 23:03:37 +000024 pass
Enrico Granata78b7d5f2015-02-02 22:12:39 +000025
Enrico Granata9c3a0792015-02-03 01:06:35 +000026 def launch(self, timeout=None):
27 if timeout is None: timeout = 30
Enrico Granata3ea3b392015-02-03 02:46:36 +000028 logfile = sys.stdout if self.TraceOn() else None
Vince Harron790d95c2015-05-18 19:39:03 +000029 self.child = pexpect.spawn('%s %s' % (lldbtest_config.lldbExec, self.launchArgs()), logfile=logfile)
Enrico Granata9c3a0792015-02-03 01:06:35 +000030 self.child.timeout = timeout
31 self.timeout = timeout
Enrico Granata78b7d5f2015-02-02 22:12:39 +000032
Enrico Granata9c58e8a2015-02-03 01:00:44 +000033 def expect(self, patterns=None, timeout=None, exact=None):
Enrico Granata18cf8e02015-02-02 23:03:37 +000034 if patterns is None: return None
35 if timeout is None: timeout = self.timeout
Enrico Granata35dd52c2015-02-03 00:59:28 +000036 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)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000041
Enrico Granatadecf03b2015-02-03 03:11:59 +000042 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
Enrico Granata35dd52c2015-02-03 00:59:28 +000049 def sendimpl(self, sender, command, patterns=None, timeout=None, exact=None):
Enrico Granata78b7d5f2015-02-02 22:12:39 +000050 sender(command)
Enrico Granata35dd52c2015-02-03 00:59:28 +000051 return self.expect(patterns=patterns, timeout=timeout, exact=exact)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000052
Enrico Granata35dd52c2015-02-03 00:59:28 +000053 def send(self, command, patterns=None, timeout=None, exact=None):
54 return self.sendimpl(self.child.send, command, patterns, timeout, exact)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000055
Enrico Granata35dd52c2015-02-03 00:59:28 +000056 def sendline(self, command, patterns=None, timeout=None, exact=None):
57 return self.sendimpl(self.child.sendline, command, patterns, timeout, exact)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000058
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