brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 3279e1f Raw
108 lines · python
1# System modules2import os3import sys4 5# LLDB Modules6import lldb7from .lldbtest import *8from . import lldbutil9from lldbsuite.test.decorators import *10 11 12@skipIfRemote13@add_test_categories(["pexpect"])14class PExpectTest(TestBase):15    NO_DEBUG_INFO_TESTCASE = True16    PROMPT = "(lldb) "17 18    def expect_prompt(self):19        self.child.expect_exact(self.PROMPT)20 21    def launch(22        self,23        executable=None,24        extra_args=None,25        timeout=60,26        dimensions=None,27        run_under=None,28        post_spawn=None,29        encoding=None,30        use_colors=False,31    ):32        # Using a log file is incompatible with using utf-8 as the encoding.33        logfile = (34            getattr(sys.stdout, "buffer", sys.stdout)35            if (self.TraceOn() and not encoding)36            else None37        )38 39        args = []40        if run_under is not None:41            args += run_under42        args += [lldbtest_config.lldbExec, "--no-lldbinit"]43        if not use_colors:44            args.append("--no-use-colors")45        for cmd in self.setUpCommands():46            if "use-color false" in cmd and use_colors:47                continue48            args += ["-O", cmd]49        if executable is not None:50            args += ["--file", executable]51        if extra_args is not None:52            args.extend(extra_args)53 54        env = dict(os.environ)55        env["TERM"] = "vt100"56        env["HOME"] = self.getBuildDir()57 58        import pexpect59 60        self.child = pexpect.spawn(61            args[0],62            args=args[1:],63            logfile=logfile,64            timeout=timeout,65            dimensions=dimensions,66            env=env,67            encoding=encoding,68        )69        self.child.ptyproc.delayafterclose = timeout / 1070        self.child.ptyproc.delayafterterminate = timeout / 1071 72        if post_spawn is not None:73            post_spawn()74        self.expect_prompt()75        for cmd in self.setUpCommands():76            if "use-color false" in cmd and use_colors:77                continue78            self.child.expect_exact(cmd)79            self.expect_prompt()80        if executable is not None:81            self.child.expect_exact("target create")82            self.child.expect_exact("Current executable set to")83            self.expect_prompt()84 85    def expect(self, cmd, substrs=None):86        self.assertNotIn("\n", cmd)87        # If 'substrs' is a string then this code would just check that every88        # character of the string is in the output.89        assert not isinstance(substrs, str), "substrs must be a collection of strings"90 91        self.child.sendline(cmd)92        if substrs is not None:93            for s in substrs:94                self.child.expect_exact(s)95        self.expect_prompt()96 97    def quit(self, gracefully=True):98        self.child.sendeof()99        self.child.close(force=not gracefully)100        self.child = None101 102    def cursor_forward_escape_seq(self, chars_to_move):103        """104        Returns the escape sequence to move the cursor forward/right105        by a certain amount of characters.106        """107        return b"\x1b\\[" + str(chars_to_move).encode("utf-8") + b"C"108