summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authortomoya ishida <tomoyapenguin@gmail.com>2023-07-08 17:41:26 +0900
committergit <svn-admin@ruby-lang.org>2023-07-08 08:41:30 +0000
commit02f9b685e82ebde33a74e59e3e884db709a11d10 (patch)
tree8372ffa6a92f0e2d783cbf6bc5d055eb32872170 /test
parent8b2a0ec8df6a09361fd835b792a5d200bc0e66af (diff)
[ruby/reline] Ignore unhandled escape sequences
(https://github.com/ruby/reline/pull/522) * Add unassigned escape sequence matcher to KeyStroke * Do not insert ESC and unassigned ESC+key to input buffer
Diffstat (limited to 'test')
-rw-r--r--test/reline/test_key_stroke.rb26
-rw-r--r--test/reline/yamatanooroti/test_rendering.rb14
2 files changed, 40 insertions, 0 deletions
diff --git a/test/reline/test_key_stroke.rb b/test/reline/test_key_stroke.rb
index d377a1e972..cd205c7d9e 100644
--- a/test/reline/test_key_stroke.rb
+++ b/test/reline/test_key_stroke.rb
@@ -36,6 +36,27 @@ class Reline::KeyStroke::Test < Reline::TestCase
assert_equal(:matched, stroke.match_status("abzwabk".bytes))
end
+ def test_match_unknown
+ config = Reline::Config.new
+ config.add_default_key_binding("\e[9abc".bytes, 'x')
+ stroke = Reline::KeyStroke.new(config)
+ sequences = [
+ "\e[9abc",
+ "\e[9d",
+ "\e[A", # Up
+ "\e[1;1R", # Cursor position report
+ "\e[15~", # F5
+ "\eOP", # F1
+ "\e\e[A" # Option+Up
+ ]
+ sequences.each do |seq|
+ assert_equal(:matched, stroke.match_status(seq.bytes))
+ (1...seq.size).each do |i|
+ assert_equal(:matching, stroke.match_status(seq.bytes.take(i)))
+ end
+ end
+ end
+
def test_expand
config = Reline::Config.new
{
@@ -45,6 +66,11 @@ class Reline::KeyStroke::Test < Reline::TestCase
end
stroke = Reline::KeyStroke.new(config)
assert_equal('123'.bytes, stroke.expand('abc'.bytes))
+ # CSI sequence
+ assert_equal([:ed_unassigned] + 'bc'.bytes, stroke.expand("\e[1;2;3;4;5abc".bytes))
+ assert_equal([:ed_unassigned] + 'BC'.bytes, stroke.expand("\e\e[ABC".bytes))
+ # SS3 sequence
+ assert_equal([:ed_unassigned] + 'QR'.bytes, stroke.expand("\eOPQR".bytes))
end
def test_oneshot_key_bindings
diff --git a/test/reline/yamatanooroti/test_rendering.rb b/test/reline/yamatanooroti/test_rendering.rb
index def14edbe4..c0af918844 100644
--- a/test/reline/yamatanooroti/test_rendering.rb
+++ b/test/reline/yamatanooroti/test_rendering.rb
@@ -237,6 +237,20 @@ begin
EOC
end
+ def test_esc_input
+ omit if Reline::IOGate.win?
+ start_terminal(5, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.')
+ write("def\C-aabc")
+ write("\e") # single ESC
+ sleep 1
+ write("A")
+ write("B\eAC") # ESC + A (M-A, specified ed_unassigned in Reline::KeyActor::Emacs)
+ assert_screen(<<~EOC)
+ Multiline REPL.
+ prompt> abcABCdef
+ EOC
+ end
+
def test_prompt_with_escape_sequence
ENV['RELINE_TEST_PROMPT'] = "\1\e[30m\2prompt> \1\e[m\2"
start_terminal(5, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.')