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