diff options
| author | tomoya ishida <tomoyapenguin@gmail.com> | 2023-07-08 17:41:26 +0900 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2023-07-08 08:41:30 +0000 |
| commit | 02f9b685e82ebde33a74e59e3e884db709a11d10 (patch) | |
| tree | 8372ffa6a92f0e2d783cbf6bc5d055eb32872170 /test | |
| parent | 8b2a0ec8df6a09361fd835b792a5d200bc0e66af (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.rb | 26 | ||||
| -rw-r--r-- | test/reline/yamatanooroti/test_rendering.rb | 14 |
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.') |
