blob: 6110b320dd57ca92e91ea46d7e4c46a09c2b5f1d [file] [log] [blame]
Zachary Turner35d017f2015-10-23 17:04:29 +00001from __future__ import print_function
2
Zachary Turner77db4a82015-10-22 20:06:20 +00003import lldb_shared
4
Enrico Granata78b7d5f2015-02-02 22:12:39 +00005import lldb
6from lldbtest import *
7import lldbutil
8import os
Enrico Granata78b7d5f2015-02-02 22:12:39 +00009import sys
10import pexpect
11
12class PExpectTest(TestBase):
13
14 mydir = TestBase.compute_mydir(__file__)
15
16 def setUp(self):
Enrico Granata78b7d5f2015-02-02 22:12:39 +000017 TestBase.setUp(self)
18
Enrico Granata78b7d5f2015-02-02 22:12:39 +000019 def launchArgs(self):
Enrico Granata18cf8e02015-02-02 23:03:37 +000020 pass
Enrico Granata78b7d5f2015-02-02 22:12:39 +000021
Enrico Granata9c3a0792015-02-03 01:06:35 +000022 def launch(self, timeout=None):
23 if timeout is None: timeout = 30
Enrico Granata3ea3b392015-02-03 02:46:36 +000024 logfile = sys.stdout if self.TraceOn() else None
Vince Harron790d95c2015-05-18 19:39:03 +000025 self.child = pexpect.spawn('%s %s' % (lldbtest_config.lldbExec, self.launchArgs()), logfile=logfile)
Enrico Granata9c3a0792015-02-03 01:06:35 +000026 self.child.timeout = timeout
27 self.timeout = timeout
Enrico Granata78b7d5f2015-02-02 22:12:39 +000028
Enrico Granata9c58e8a2015-02-03 01:00:44 +000029 def expect(self, patterns=None, timeout=None, exact=None):
Enrico Granata18cf8e02015-02-02 23:03:37 +000030 if patterns is None: return None
31 if timeout is None: timeout = self.timeout
Enrico Granata35dd52c2015-02-03 00:59:28 +000032 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)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000037
Enrico Granatadecf03b2015-02-03 03:11:59 +000038 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
Enrico Granata35dd52c2015-02-03 00:59:28 +000045 def sendimpl(self, sender, command, patterns=None, timeout=None, exact=None):
Enrico Granata78b7d5f2015-02-02 22:12:39 +000046 sender(command)
Enrico Granata35dd52c2015-02-03 00:59:28 +000047 return self.expect(patterns=patterns, timeout=timeout, exact=exact)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000048
Enrico Granata35dd52c2015-02-03 00:59:28 +000049 def send(self, command, patterns=None, timeout=None, exact=None):
50 return self.sendimpl(self.child.send, command, patterns, timeout, exact)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000051
Enrico Granata35dd52c2015-02-03 00:59:28 +000052 def sendline(self, command, patterns=None, timeout=None, exact=None):
53 return self.sendimpl(self.child.sendline, command, patterns, timeout, exact)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000054
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