From c25511ef46c047e970e45e363288e8c005284c31 Mon Sep 17 00:00:00 2001 From: aycabta Date: Fri, 10 Sep 2021 04:58:35 +0900 Subject: [ruby/reline] Add a test for dialog with scroll key https://github.com/ruby/reline/commit/99640abf75 --- test/reline/yamatanooroti/multiline_repl | 51 ++++++++++++++++++++++------- test/reline/yamatanooroti/test_rendering.rb | 17 +++++++++- 2 files changed, 56 insertions(+), 12 deletions(-) (limited to 'test') diff --git a/test/reline/yamatanooroti/multiline_repl b/test/reline/yamatanooroti/multiline_repl index f3a1097dd8..1346a83adb 100755 --- a/test/reline/yamatanooroti/multiline_repl +++ b/test/reline/yamatanooroti/multiline_repl @@ -30,18 +30,47 @@ opt.on('--dynamic-prompt-returns-empty') { opt.on('--auto-indent') { AutoIndent.new } -opt.on('--simple-dialog') { +opt.on('--dialog VAL') { |v| Reline.add_dialog_proc(:simple_dialog, lambda { - contents = <<~RUBY.split("\n") - Ruby is... - A dynamic, open source programming - language with a focus on simplicity - and productivity. It has an elegant - syntax that is natural to read and - easy to write. - RUBY - Reline::DialogRenderInfo.new(pos: cursor_pos, contents: contents) - }) + if v.include?('simple') + contents = <<~RUBY.split("\n") + Ruby is... + A dynamic, open source programming + language with a focus on simplicity + and productivity. It has an elegant + syntax that is natural to read and + easy to write. + RUBY + elsif v.include?('long') + contents = <<~RUBY.split("\n") + Ruby is... + A dynamic, open + source programming + language with a + focus on simplicity + and productivity. + It has an elegant + syntax that is + natural to read + and easy to write. + RUBY + end + if v.include?('scrollkey') + dialog.trap_key = nil + if key and key.match?(dialog.name) + if context.pointer.nil? + context.pointer = 0 + elsif context.first > dialog.contents.size + context.pointer = 0 + else + context.pointer += 1 + end + end + dialog.trap_key = [?j.ord] + height = 4 + end + Reline::DialogRenderInfo.new(pos: cursor_pos, contents: contents, height: height, pointer: context.pointer) + }, Struct.new(:pointer).new) } opt.on('--complete') { Reline.completion_proc = lambda { |target, preposing = nil, postposing = nil| diff --git a/test/reline/yamatanooroti/test_rendering.rb b/test/reline/yamatanooroti/test_rendering.rb index cd401e2f73..278850a7c5 100644 --- a/test/reline/yamatanooroti/test_rendering.rb +++ b/test/reline/yamatanooroti/test_rendering.rb @@ -836,7 +836,7 @@ begin end def test_simple_dialog - start_terminal(20, 50, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --simple-dialog}, startup_message: 'Multiline REPL.') + start_terminal(20, 50, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --dialog simple}, startup_message: 'Multiline REPL.') write('a') write('b') write('c') @@ -854,6 +854,21 @@ begin EOC end + def test_simple_dialog_with_scroll_key + start_terminal(20, 50, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --dialog long,scrollkey}, startup_message: 'Multiline REPL.') + write('a') + 5.times{ write('j') } + close + assert_screen(<<~'EOC') + Multiline REPL. + prompt> a + A dynamic, open + source programming + language with a + focus on simplicity + EOC + end + def test_autocomplete start_terminal(20, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.') write("Stri") -- cgit v1.2.3