diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-10-03 08:20:07 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-10-03 08:20:07 +0000 |
commit | 402f04268948df201b4f2cf0d0b4c66d6308cdf1 (patch) | |
tree | 256752f169d8a2534a678db746436aeac410ac14 /test/readline/test_readline.rb | |
parent | d3c6292401df8fc77de670fbbfb61612510c8e99 (diff) | |
download | ruby-402f04268948df201b4f2cf0d0b4c66d6308cdf1.tar.gz |
rl_char_is_quoted_p
* ext/readline/readline.c (readline_s_set_quoting_detection_proc):
support rl_char_is_quoted_p. [Feature #12659]
* ext/readline/readline.c (readline_s_get_quoting_detection_proc):
ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56326 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/readline/test_readline.rb')
-rw-r--r-- | test/readline/test_readline.rb | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/test/readline/test_readline.rb b/test/readline/test_readline.rb index eae9518fb3..8b98b62414 100644 --- a/test/readline/test_readline.rb +++ b/test/readline/test_readline.rb @@ -464,6 +464,92 @@ class TestReadline < Test::Unit::TestCase end end if Readline.respond_to?(:refresh_line) + def test_setting_quoting_detection_proc + return unless Readline.respond_to?(:quoting_detection_proc=) + + expected = proc { |text, index| false } + Readline.quoting_detection_proc = expected + assert_equal(expected, Readline.quoting_detection_proc) + + assert_raise(ArgumentError) do + Readline.quoting_detection_proc = "This does not have call method." + end + end + + def test_using_quoting_detection_proc + saved_completer_quote_characters = Readline.completer_quote_characters + saved_completer_word_break_characters = Readline.completer_word_break_characters + return unless Readline.respond_to?(:quoting_detection_proc=) + + passed_text = nil + line = nil + + with_temp_stdio do |stdin, stdout| + replace_stdio(stdin.path, stdout.path) do + Readline.completion_proc = -> (text) do + passed_text = text + ['completion'] + end + Readline.completer_quote_characters = '\'"' + Readline.completer_word_break_characters = ' ' + Readline.quoting_detection_proc = -> (text, index) do + index > 0 && text[index-1] == '\\' + end + + stdin.write("first second\\ third\t") + stdin.flush + line = Readline.readline('> ', false) + end + end + + assert_equal('second\\ third', passed_text) + assert_equal('first completion', line) + ensure + Readline.completer_quote_characters = saved_completer_quote_characters + Readline.completer_word_break_characters = saved_completer_word_break_characters + end + + def test_using_quoting_detection_proc_with_multibyte_input + saved_completer_quote_characters = Readline.completer_quote_characters + saved_completer_word_break_characters = Readline.completer_word_break_characters + return unless Readline.respond_to?(:quoting_detection_proc=) + unless Encoding.find("locale") == Encoding::UTF_8 + return if assert_under_utf8 + skip 'this test needs UTF-8 locale' + end + + passed_text = nil + escaped_char_indexes = [] + line = nil + + with_temp_stdio do |stdin, stdout| + replace_stdio(stdin.path, stdout.path) do + Readline.completion_proc = -> (text) do + passed_text = text + ['completion'] + end + Readline.completer_quote_characters = '\'"' + Readline.completer_word_break_characters = ' ' + Readline.quoting_detection_proc = -> (text, index) do + escaped = index > 0 && text[index-1] == '\\' + escaped_char_indexes << index if escaped + escaped + end + + stdin.write("\u3042\u3093 second\\ third\t") + stdin.flush + line = Readline.readline('> ', false) + end + end + + assert_equal([10], escaped_char_indexes) + assert_equal('second\\ third', passed_text) + assert_equal("\u3042\u3093 completion", line) + ensure + Readline.completer_quote_characters = saved_completer_quote_characters + Readline.completer_word_break_characters = saved_completer_word_break_characters + end + private def replace_stdio(stdin_path, stdout_path) |