File: lldbpexpect.py

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (104 lines) | stat: -rw-r--r-- 3,104 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
from __future__ import absolute_import

# System modules
import os
import sys

# LLDB Modules
import lldb
from .lldbtest import *
from . import lldbutil
from lldbsuite.test.decorators import *


@skipIfRemote
@skipIfWindows  # llvm.org/pr22274: need a pexpect replacement for windows
class PExpectTest(TestBase):
    NO_DEBUG_INFO_TESTCASE = True
    PROMPT = "(lldb) "

    def expect_prompt(self):
        self.child.expect_exact(self.PROMPT)

    def launch(
        self,
        executable=None,
        extra_args=None,
        timeout=60,
        dimensions=None,
        run_under=None,
        post_spawn=None,
        encoding=None,
        use_colors=False,
    ):
        logfile = getattr(sys.stdout, "buffer", sys.stdout) if self.TraceOn() else None

        args = []
        if run_under is not None:
            args += run_under
        args += [lldbtest_config.lldbExec, "--no-lldbinit"]
        if not use_colors:
            args.append("--no-use-colors")
        for cmd in self.setUpCommands():
            if "use-color false" in cmd and use_colors:
                continue
            args += ["-O", cmd]
        if executable is not None:
            args += ["--file", executable]
        if extra_args is not None:
            args.extend(extra_args)

        env = dict(os.environ)
        env["TERM"] = "vt100"
        env["HOME"] = self.getBuildDir()

        import pexpect

        self.child = pexpect.spawn(
            args[0],
            args=args[1:],
            logfile=logfile,
            timeout=timeout,
            dimensions=dimensions,
            env=env,
            encoding=encoding,
        )
        self.child.ptyproc.delayafterclose = timeout / 10
        self.child.ptyproc.delayafterterminate = timeout / 10

        if post_spawn is not None:
            post_spawn()
        self.expect_prompt()
        for cmd in self.setUpCommands():
            if "use-color false" in cmd and use_colors:
                continue
            self.child.expect_exact(cmd)
            self.expect_prompt()
        if executable is not None:
            self.child.expect_exact("target create")
            self.child.expect_exact("Current executable set to")
            self.expect_prompt()

    def expect(self, cmd, substrs=None):
        self.assertNotIn("\n", cmd)
        # If 'substrs' is a string then this code would just check that every
        # character of the string is in the output.
        assert not isinstance(substrs, str), "substrs must be a collection of strings"

        self.child.sendline(cmd)
        if substrs is not None:
            for s in substrs:
                self.child.expect_exact(s)
        self.expect_prompt()

    def quit(self, gracefully=True):
        self.child.sendeof()
        self.child.close(force=not gracefully)
        self.child = None

    def cursor_forward_escape_seq(self, chars_to_move):
        """
        Returns the escape sequence to move the cursor forward/right
        by a certain amount of characters.
        """
        return b"\x1b\[" + str(chars_to_move).encode("utf-8") + b"C"