xref: /llvm-project/lldb/packages/Python/lldbsuite/test/lldbpexpect.py (revision b9c1b51e45b845debb76d8658edabca70ca56079)
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:
34                timeout = 30
35            logfile = sys.stdout if self.TraceOn() else None
36            self.child = pexpect.spawn(
37                '%s --no-use-colors %s' %
38                (lldbtest_config.lldbExec, self.launchArgs()), logfile=logfile)
39            self.child.timeout = timeout
40            self.timeout = timeout
41
42        def expect(self, patterns=None, timeout=None, exact=None):
43            if patterns is None:
44                return None
45            if timeout is None:
46                timeout = self.timeout
47            if exact is None:
48                exact = False
49            if exact:
50                return self.child.expect_exact(patterns, timeout=timeout)
51            else:
52                return self.child.expect(patterns, timeout=timeout)
53
54        def expectall(self, patterns=None, timeout=None, exact=None):
55            if patterns is None:
56                return None
57            if timeout is None:
58                timeout = self.timeout
59            if exact is None:
60                exact = False
61            for pattern in patterns:
62                self.expect(pattern, timeout=timeout, exact=exact)
63
64        def sendimpl(
65                self,
66                sender,
67                command,
68                patterns=None,
69                timeout=None,
70                exact=None):
71            sender(command)
72            return self.expect(patterns=patterns, timeout=timeout, exact=exact)
73
74        def send(self, command, patterns=None, timeout=None, exact=None):
75            return self.sendimpl(
76                self.child.send,
77                command,
78                patterns,
79                timeout,
80                exact)
81
82        def sendline(self, command, patterns=None, timeout=None, exact=None):
83            return self.sendimpl(
84                self.child.sendline,
85                command,
86                patterns,
87                timeout,
88                exact)
89
90        def quit(self, gracefully=None):
91            if gracefully is None:
92                gracefully = True
93            self.child.sendeof()
94            self.child.close(force=not gracefully)
95            self.child = None
96