blob: 88bd3f8edf42264e03d43d5ad182748322fa54a4 [file] [log] [blame]
Enrico Granata78b7d5f2015-02-02 22:12:39 +00001import lldb
2from lldbtest import *
3import lldbutil
4import os
5import unittest2
6import sys
7import pexpect
8
9class PExpectTest(TestBase):
10
11 mydir = TestBase.compute_mydir(__file__)
12
13 def setUp(self):
Enrico Granata78b7d5f2015-02-02 22:12:39 +000014 TestBase.setUp(self)
15
Enrico Granata78b7d5f2015-02-02 22:12:39 +000016 def launchArgs(self):
Enrico Granata18cf8e02015-02-02 23:03:37 +000017 pass
Enrico Granata78b7d5f2015-02-02 22:12:39 +000018
Enrico Granata9c3a0792015-02-03 01:06:35 +000019 def launch(self, timeout=None):
20 if timeout is None: timeout = 30
Enrico Granata3ea3b392015-02-03 02:46:36 +000021 logfile = sys.stdout if self.TraceOn() else None
22 self.child = pexpect.spawn('%s %s' % (self.lldbHere, self.launchArgs()), logfile=logfile)
Enrico Granata9c3a0792015-02-03 01:06:35 +000023 self.child.timeout = timeout
24 self.timeout = timeout
Enrico Granata78b7d5f2015-02-02 22:12:39 +000025
Enrico Granata9c58e8a2015-02-03 01:00:44 +000026 def expect(self, patterns=None, timeout=None, exact=None):
Enrico Granata18cf8e02015-02-02 23:03:37 +000027 if patterns is None: return None
28 if timeout is None: timeout = self.timeout
Enrico Granata35dd52c2015-02-03 00:59:28 +000029 if exact is None: exact = False
30 if exact:
31 return self.child.expect_exact(patterns, timeout=timeout)
32 else:
33 return self.child.expect(patterns, timeout=timeout)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000034
Enrico Granata35dd52c2015-02-03 00:59:28 +000035 def sendimpl(self, sender, command, patterns=None, timeout=None, exact=None):
Enrico Granata78b7d5f2015-02-02 22:12:39 +000036 sender(command)
Enrico Granata35dd52c2015-02-03 00:59:28 +000037 return self.expect(patterns=patterns, timeout=timeout, exact=exact)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000038
Enrico Granata35dd52c2015-02-03 00:59:28 +000039 def send(self, command, patterns=None, timeout=None, exact=None):
40 return self.sendimpl(self.child.send, command, patterns, timeout, exact)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000041
Enrico Granata35dd52c2015-02-03 00:59:28 +000042 def sendline(self, command, patterns=None, timeout=None, exact=None):
43 return self.sendimpl(self.child.sendline, command, patterns, timeout, exact)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000044
45 def quit(self, gracefully=None):
46 if gracefully is None: gracefully = True
47 self.child.sendeof()
48 self.child.close(force=not gracefully)
49 self.child = None