mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-20 12:05:48 -04:00

Summary: expect() forwards its command to sendline(). This can be problematic if the command already contains a newline: sendline() unconditionally adds a newline to the command, which causes the command to run twice (hitting enter in lldb runs the previous command). The expect() helper looks for the prompt and finds the first one, but because the command has run a second time, the buffer will contain the contents of the second time the command ran, causing potential erroneous matching. Simplify the editline test, which was using different commands to workaround this misunderstanding. Reviewers: labath Reviewed By: labath Subscribers: merge_guards_bot, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D70324
47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
"""
|
|
Test that the lldb editline handling is configured correctly.
|
|
"""
|
|
|
|
from __future__ import print_function
|
|
|
|
|
|
import lldb
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
from lldbsuite.test.lldbpexpect import PExpectTest
|
|
|
|
|
|
class EditlineTest(PExpectTest):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
def test_left_right_arrow(self):
|
|
"""Test that ctrl+left/right arrow navigates words correctly.
|
|
|
|
Note: just sending escape characters to pexpect and checking the buffer
|
|
doesn't work well, so we run real commands. We want to type
|
|
"help command" while exercising word-navigation, so type it as below,
|
|
where [] indicates cursor position.
|
|
|
|
1. Send "el rint" -> "el rint[]"
|
|
2. Ctrl+left once -> "el []rint"
|
|
3. Send "p" -> "el p[]rint"
|
|
4. Ctrl+left twice -> "[]el print"
|
|
5. Send "h" -> "h[]el print"
|
|
6. Ctrl+right -> "hel[] print"
|
|
7. Send "p" -> "help print"
|
|
"""
|
|
self.launch()
|
|
|
|
escape_pairs = [
|
|
("\x1b[1;5D", "\x1b[1;5C"),
|
|
("\x1b[5D", "\x1b[5C"),
|
|
("\x1b\x1b[D", "\x1b\x1b[C"),
|
|
]
|
|
for (l_escape, r_escape) in escape_pairs:
|
|
self.expect("el rint{L}p{L}{L}h{R}p".format(
|
|
L=l_escape, R=r_escape), substrs=["Syntax: print"])
|
|
|
|
self.quit()
|