summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test/terminal/TestEditline.py
diff options
context:
space:
mode:
authorJordan Rupprecht <rupprecht@google.com>2019-11-12 11:37:23 -0800
committerJordan Rupprecht <rupprecht@google.com>2019-11-14 11:41:11 -0800
commitf2e65447b3cb6340883957e033e77095a025ebdc (patch)
treeff624f85141d3970a74056e5300265a879f30e85 /lldb/packages/Python/lldbsuite/test/terminal/TestEditline.py
parentbaacd1891851b1ba0bd303e2a75f1d3af324fca6 (diff)
downloadbcm5719-llvm-f2e65447b3cb6340883957e033e77095a025ebdc.tar.gz
bcm5719-llvm-f2e65447b3cb6340883957e033e77095a025ebdc.zip
[lldb][Editline] Support ctrl+left/right arrow word navigation.
Summary: This adds several 5C/5D escape codes that allow moving forward/backward words similar to bash command line navigation. On my terminal, `ctrl+v ctrl+<left arrow>` prints `^[[1;5D`. However, it seems inputrc also maps other escape variants of this to forward/backward word, so I've included those too. Similar for 5C = ctrl+right arrow. Reviewers: JDevlieghere, labath Reviewed By: JDevlieghere, labath Subscribers: merge_guards_bot, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D70137
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/terminal/TestEditline.py')
-rw-r--r--lldb/packages/Python/lldbsuite/test/terminal/TestEditline.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/terminal/TestEditline.py b/lldb/packages/Python/lldbsuite/test/terminal/TestEditline.py
new file mode 100644
index 00000000000..49a46f2de53
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/terminal/TestEditline.py
@@ -0,0 +1,49 @@
+"""
+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 ommand" -> "el ommand[]"
+ 2. Ctrl+left once -> "el []ommand"
+ 3. Send "c" -> "el c[]ommand"
+ 4. Ctrl+left twice -> "[]el command"
+ 5. Send "h" -> "h[]el command"
+ 6. Ctrl+right -> "hel[] command"
+ 7. Send "p" -> "help command"
+ """
+ self.launch()
+
+ # Run help for different commands for escape variants to make sure each
+ # one matches uniquely (the buffer isn't cleared in between matches).
+ cases = [
+ ("print", "\x1b[1;5D", "\x1b[1;5C"),
+ ("step", "\x1b[5D", "\x1b[5C"),
+ ("exit", "\x1b\x1b[D", "\x1b\x1b[C"),
+ ]
+ for (cmd, l_escape, r_escape) in cases:
+ self.expect("el {cmd_tail}{L}{cmd_head}{L}{L}h{R}p".format(
+ cmd_head=cmd[0], cmd_tail=cmd[1:], L=l_escape, R=r_escape),
+ substrs=["Syntax: %s" % cmd])
+
+ self.quit()
OpenPOWER on IntegriCloud