forked from llvm/llvm-project
- Notifications
You must be signed in to change notification settings - Fork 339
/
Copy pathlldbpexpect.py
107 lines (93 loc) · 3.09 KB
/
lldbpexpect.py
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
105
106
107
# System modules
importos
importsys
# LLDB Modules
importlldb
from .lldbtestimport*
from . importlldbutil
fromlldbsuite.test.decoratorsimport*
@skipIfRemote
@add_test_categories(["pexpect"])
classPExpectTest(TestBase):
NO_DEBUG_INFO_TESTCASE=True
PROMPT="(lldb) "
defexpect_prompt(self):
self.child.expect_exact(self.PROMPT)
deflaunch(
self,
executable=None,
extra_args=None,
timeout=60,
dimensions=None,
run_under=None,
post_spawn=None,
encoding=None,
use_colors=False,
):
# Using a log file is incompatible with using utf-8 as the encoding.
logfile= (
getattr(sys.stdout, "buffer", sys.stdout)
if (self.TraceOn() andnotencoding)
elseNone
)
args= []
ifrun_underisnotNone:
args+=run_under
args+= [lldbtest_config.lldbExec, "--no-lldbinit"]
ifnotuse_colors:
args.append("--no-use-colors")
forcmdinself.setUpCommands():
if"use-color false"incmdanduse_colors:
continue
args+= ["-O", cmd]
ifexecutableisnotNone:
args+= ["--file", executable]
ifextra_argsisnotNone:
args.extend(extra_args)
env=dict(os.environ)
env["TERM"] ="vt100"
env["HOME"] =self.getBuildDir()
importpexpect
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
ifpost_spawnisnotNone:
post_spawn()
self.expect_prompt()
forcmdinself.setUpCommands():
if"use-color false"incmdanduse_colors:
continue
self.child.expect_exact(cmd)
self.expect_prompt()
ifexecutableisnotNone:
self.child.expect_exact("target create")
self.child.expect_exact("Current executable set to")
self.expect_prompt()
defexpect(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.
assertnotisinstance(substrs, str), "substrs must be a collection of strings"
self.child.sendline(cmd)
ifsubstrsisnotNone:
forsinsubstrs:
self.child.expect_exact(s)
self.expect_prompt()
defquit(self, gracefully=True):
self.child.sendeof()
self.child.close(force=notgracefully)
self.child=None
defcursor_forward_escape_seq(self, chars_to_move):
"""
Returns the escape sequence to move the cursor forward/right
by a certain amount of characters.
"""
returnb"\x1b\\["+str(chars_to_move).encode("utf-8") +b"C"