blob: a19e6efa9f0a4806e20d3f8d6e4a737d7f273338 [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):
Kate Stoneb9c1b512016-09-06 20:57:50 +000023
Zachary Turner74b79652016-01-27 18:49:25 +000024 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):
Kate Stoneb9c1b512016-09-06 20:57:50 +000033 if timeout is None:
34 timeout = 30
Zachary Turner74b79652016-01-27 18:49:25 +000035 logfile = sys.stdout if self.TraceOn() else None
Kate Stoneb9c1b512016-09-06 20:57:50 +000036 self.child = pexpect.spawn(
37 '%s --no-use-colors %s' %
38 (lldbtest_config.lldbExec, self.launchArgs()), logfile=logfile)
Zachary Turner74b79652016-01-27 18:49:25 +000039 self.child.timeout = timeout
40 self.timeout = timeout
Enrico Granata78b7d5f2015-02-02 22:12:39 +000041
Zachary Turner74b79652016-01-27 18:49:25 +000042 def expect(self, patterns=None, timeout=None, exact=None):
Kate Stoneb9c1b512016-09-06 20:57:50 +000043 if patterns is None:
44 return None
45 if timeout is None:
46 timeout = self.timeout
47 if exact is None:
48 exact = False
Zachary Turner74b79652016-01-27 18:49:25 +000049 if exact:
50 return self.child.expect_exact(patterns, timeout=timeout)
51 else:
52 return self.child.expect(patterns, timeout=timeout)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000053
Zachary Turner74b79652016-01-27 18:49:25 +000054 def expectall(self, patterns=None, timeout=None, exact=None):
Kate Stoneb9c1b512016-09-06 20:57:50 +000055 if patterns is None:
56 return None
57 if timeout is None:
58 timeout = self.timeout
59 if exact is None:
60 exact = False
Zachary Turner74b79652016-01-27 18:49:25 +000061 for pattern in patterns:
62 self.expect(pattern, timeout=timeout, exact=exact)
Enrico Granata78b7d5f2015-02-02 22:12:39 +000063
Kate Stoneb9c1b512016-09-06 20:57:50 +000064 def sendimpl(
65 self,
66 sender,
67 command,
68 patterns=None,
69 timeout=None,
70 exact=None):
Zachary Turner74b79652016-01-27 18:49:25 +000071 sender(command)
72 return self.expect(patterns=patterns, timeout=timeout, exact=exact)
73
74 def send(self, command, patterns=None, timeout=None, exact=None):
Kate Stoneb9c1b512016-09-06 20:57:50 +000075 return self.sendimpl(
76 self.child.send,
77 command,
78 patterns,
79 timeout,
80 exact)
Zachary Turner74b79652016-01-27 18:49:25 +000081
82 def sendline(self, command, patterns=None, timeout=None, exact=None):
Kate Stoneb9c1b512016-09-06 20:57:50 +000083 return self.sendimpl(
84 self.child.sendline,
85 command,
86 patterns,
87 timeout,
88 exact)
Zachary Turner74b79652016-01-27 18:49:25 +000089
90 def quit(self, gracefully=None):
Kate Stoneb9c1b512016-09-06 20:57:50 +000091 if gracefully is None:
92 gracefully = True
Zachary Turner74b79652016-01-27 18:49:25 +000093 self.child.sendeof()
94 self.child.close(force=not gracefully)
95 self.child = None