mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-11-22 01:49:38 +08:00
Fix pexpect_helper.py prompt regex
The prompt regex for pexpect was: ``` return re.compile( r"""(?:\r\n?|^) # beginning of line (?:\x1b[\d[KB(m]*)* # optional colors (?:\x1b[\?2004h) # Bracketed paste (?:\x1b[>4;1m) # XTerm's modifyOtherKeys (?:\x1b[>5u) # CSI u with kitty progressive enhancement (?:\x1b=) # set application keypad mode, so the keypad keys send unique codes (?:\[.\]\ )? # optional vi mode prompt """ + (r"prompt\ %d>" % counter) # prompt with counter + r""" (?:\x1b[\d\[KB(m]*)* # optional colors """, re.VERBOSE, ) ``` This has a terrible bug: an accidentally unescaped bracket here: (?:\x1b[>4;1m) # XTerm's modifyOtherKeys ^ This bracket then extends throughout the entire regex, and is accidentally terminated here: (?:\x1b[\d\[KB(m]*)* # optional colors ^ Thus the whole regex is busted; in particular the prompt counters are not being tested correctly. A second issue is that these escape sequences are not emitted before the first prompt, so correcting the regex will cause every test to fail. Fix this by ignoring all of the escape sequences and merely look for the "prompt %d>" portion. THIS DELIBERATELY CAUSES TEST FAILURES. The tests were already broken and falsely reported as passing. These will be fixed in followup commits. Good news is that the tests should become way more reliable after this is fixed - hopefully no more introducing random sleep() calls.
This commit is contained in:
parent
28484e2498
commit
15c0313c33
|
@ -48,21 +48,7 @@ SANITIZE_FOR_PRINTING_RE = re.compile(
|
|||
|
||||
def get_prompt_re(counter):
|
||||
"""Return a regular expression for matching a with a given prompt counter."""
|
||||
return re.compile(
|
||||
r"""(?:\r\n?|^) # beginning of line
|
||||
(?:\x1b[\d[KB(m]*)* # optional colors
|
||||
(?:\x1b[\?2004h) # Bracketed paste
|
||||
(?:\x1b[>4;1m) # XTerm's modifyOtherKeys
|
||||
(?:\x1b[>5u) # CSI u with kitty progressive enhancement
|
||||
(?:\x1b=) # set application keypad mode, so the keypad keys send unique codes
|
||||
(?:\[.\]\ )? # optional vi mode prompt
|
||||
"""
|
||||
+ (r"prompt\ %d>" % counter) # prompt with counter
|
||||
+ r"""
|
||||
(?:\x1b[\d\[KB(m]*)* # optional colors
|
||||
""",
|
||||
re.VERBOSE,
|
||||
)
|
||||
return re.compile("prompt %d>" % counter)
|
||||
|
||||
|
||||
def get_callsite():
|
||||
|
|
Loading…
Reference in New Issue
Block a user