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