xref: /llvm-project/lldb/packages/Python/lldbsuite/test/lldbpexpect.py (revision 9eedbc4f266d1e49d335d48c4c0f717401d927d2)
1from __future__ import print_function
2from __future__ import absolute_import
3
4# System modules
5import sys
6
7# Third-party modules
8import six
9
10# LLDB Modules
11import lldb
12from .lldbtest import *
13from . import lldbutil
14
15if sys.platform.startswith('win32'):
16    class PExpectTest(TestBase):
17        pass
18else:
19    import pexpect
20
21    class PExpectTest(TestBase):
22
23        mydir = TestBase.compute_mydir(__file__)
24
25        def setUp(self):
26            TestBase.setUp(self)
27
28        def launchArgs(self):
29            return ""
30
31        def launch(self, timeout=None):
32            if timeout is None:
33                timeout = 30
34            logfile = sys.stdout if self.TraceOn() else None
35            self.child = pexpect.spawn(
36                '%s --no-use-colors %s' %
37                (lldbtest_config.lldbExec, self.launchArgs()), logfile=logfile)
38            self.child.timeout = timeout
39            self.timeout = timeout
40
41        def expect(self, patterns=None, timeout=None, exact=None):
42            if patterns is None:
43                return None
44            if timeout is None:
45                timeout = self.timeout
46            if exact is None:
47                exact = False
48            if exact:
49                return self.child.expect_exact(patterns, timeout=timeout)
50            else:
51                return self.child.expect(patterns, timeout=timeout)
52
53        def expectall(self, patterns=None, timeout=None, exact=None):
54            if patterns is None:
55                return None
56            if timeout is None:
57                timeout = self.timeout
58            if exact is None:
59                exact = False
60            for pattern in patterns:
61                self.expect(pattern, timeout=timeout, exact=exact)
62
63        def sendimpl(
64                self,
65                sender,
66                command,
67                patterns=None,
68                timeout=None,
69                exact=None):
70            sender(command)
71            return self.expect(patterns=patterns, timeout=timeout, exact=exact)
72
73        def send(self, command, patterns=None, timeout=None, exact=None):
74            return self.sendimpl(
75                self.child.send,
76                command,
77                patterns,
78                timeout,
79                exact)
80
81        def sendline(self, command, patterns=None, timeout=None, exact=None):
82            return self.sendimpl(
83                self.child.sendline,
84                command,
85                patterns,
86                timeout,
87                exact)
88
89        def quit(self, gracefully=None):
90            if gracefully is None:
91                gracefully = True
92            self.child.sendeof()
93            self.child.close(force=not gracefully)
94            self.child = None
95