2019-04-26 05:28:54 -04:00
|
|
|
# frozen_string_literal: false
|
2019-11-28 01:32:21 -05:00
|
|
|
require "test/unit"
|
|
|
|
require "irb"
|
2019-04-26 05:28:54 -04:00
|
|
|
|
|
|
|
module TestIRB
|
|
|
|
class TestCompletion < Test::Unit::TestCase
|
|
|
|
def test_nonstring_module_name
|
|
|
|
begin
|
|
|
|
require "irb/completion"
|
|
|
|
bug5938 = '[ruby-core:42244]'
|
2019-06-12 11:29:45 -04:00
|
|
|
bundle_exec = ENV.key?('BUNDLE_GEMFILE') ? ['-rbundler/setup'] : []
|
|
|
|
cmds = bundle_exec + %W[-W0 -rirb -rirb/completion -e IRB.setup(__FILE__)
|
2019-04-26 05:28:54 -04:00
|
|
|
-e IRB.conf[:MAIN_CONTEXT]=IRB::Irb.new.context
|
|
|
|
-e module\sFoo;def\sself.name;//;end;end
|
|
|
|
-e IRB::InputCompletor::CompletionProc.call("[1].first.")
|
|
|
|
-- -f --]
|
|
|
|
status = assert_in_out_err(cmds, "", //, [], bug5938)
|
|
|
|
assert(status.success?, bug5938)
|
|
|
|
rescue LoadError
|
2021-05-31 01:56:50 -04:00
|
|
|
pend "cannot load irb/completion"
|
2019-04-26 05:28:54 -04:00
|
|
|
end
|
|
|
|
end
|
2019-11-28 01:15:41 -05:00
|
|
|
|
|
|
|
def test_complete_numeric
|
|
|
|
assert_include(IRB::InputCompletor.retrieve_completion_data("1r.positi", bind: binding), "1r.positive?")
|
|
|
|
assert_empty(IRB::InputCompletor.retrieve_completion_data("1i.positi", bind: binding))
|
|
|
|
end
|
2020-02-10 09:15:13 -05:00
|
|
|
|
2020-02-12 05:40:10 -05:00
|
|
|
def test_complete_symbol
|
2021-09-23 03:28:28 -04:00
|
|
|
%w"UTF-16LE UTF-7".each do |enc|
|
|
|
|
"K".force_encoding(enc).to_sym
|
|
|
|
rescue
|
|
|
|
end
|
2020-02-13 10:07:28 -05:00
|
|
|
_ = :aiueo
|
2020-02-12 05:40:10 -05:00
|
|
|
assert_include(IRB::InputCompletor.retrieve_completion_data(":a", bind: binding), ":aiueo")
|
|
|
|
assert_empty(IRB::InputCompletor.retrieve_completion_data(":irb_unknown_symbol_abcdefg", bind: binding))
|
|
|
|
end
|
|
|
|
|
2021-09-10 15:30:29 -04:00
|
|
|
def test_complete_invalid_three_colons
|
|
|
|
assert_empty(IRB::InputCompletor.retrieve_completion_data(":::A", bind: binding))
|
|
|
|
assert_empty(IRB::InputCompletor.retrieve_completion_data(":::", bind: binding))
|
|
|
|
end
|
|
|
|
|
2021-10-10 15:30:42 -04:00
|
|
|
def test_complete_absolute_constants_with_special_characters
|
|
|
|
assert_empty(IRB::InputCompletor.retrieve_completion_data("::A:", bind: binding))
|
|
|
|
assert_empty(IRB::InputCompletor.retrieve_completion_data("::A.", bind: binding))
|
|
|
|
assert_empty(IRB::InputCompletor.retrieve_completion_data("::A(", bind: binding))
|
|
|
|
assert_empty(IRB::InputCompletor.retrieve_completion_data("::A)", bind: binding))
|
|
|
|
end
|
|
|
|
|
2020-02-10 09:22:24 -05:00
|
|
|
def test_complete_symbol_failure
|
|
|
|
assert_nil(IRB::InputCompletor::PerfectMatchedProc.(":aiueo", bind: binding))
|
|
|
|
end
|
2020-02-12 05:16:12 -05:00
|
|
|
|
|
|
|
def test_complete_reserved_words
|
|
|
|
candidates = IRB::InputCompletor.retrieve_completion_data("de", bind: binding)
|
|
|
|
%w[def defined?].each do |word|
|
|
|
|
assert_include candidates, word
|
|
|
|
end
|
|
|
|
|
|
|
|
candidates = IRB::InputCompletor.retrieve_completion_data("__", bind: binding)
|
|
|
|
%w[__ENCODING__ __LINE__ __FILE__].each do |word|
|
|
|
|
assert_include candidates, word
|
|
|
|
end
|
|
|
|
end
|
2021-01-06 05:05:46 -05:00
|
|
|
|
|
|
|
def test_complete_predicate?
|
|
|
|
candidates = IRB::InputCompletor.retrieve_completion_data("1.posi", bind: binding)
|
2021-01-08 00:44:26 -05:00
|
|
|
assert_include candidates, '1.positive?'
|
2021-01-06 05:05:46 -05:00
|
|
|
|
|
|
|
namespace = IRB::InputCompletor.retrieve_completion_data("1.positive?", bind: binding, doc_namespace: true)
|
|
|
|
assert_equal "Integer.positive?", namespace
|
|
|
|
end
|
2021-03-24 01:55:05 -04:00
|
|
|
|
|
|
|
def test_complete_require
|
|
|
|
candidates = IRB::InputCompletor::CompletionProc.("'irb", "require ", "")
|
|
|
|
%w['irb/init 'irb/ruby-lex].each do |word|
|
|
|
|
assert_include candidates, word
|
|
|
|
end
|
2021-03-24 02:33:07 -04:00
|
|
|
# Test cache
|
|
|
|
candidates = IRB::InputCompletor::CompletionProc.("'irb", "require ", "")
|
|
|
|
%w['irb/init 'irb/ruby-lex].each do |word|
|
|
|
|
assert_include candidates, word
|
|
|
|
end
|
2021-03-24 01:55:05 -04:00
|
|
|
end
|
|
|
|
|
2021-09-07 16:07:24 -04:00
|
|
|
def test_complete_require_library_name_first
|
2021-09-24 09:56:38 -04:00
|
|
|
pend 'Need to use virtual library paths'
|
2021-09-07 16:20:48 -04:00
|
|
|
candidates = IRB::InputCompletor::CompletionProc.("'csv", "require ", "")
|
2021-09-17 06:56:28 -04:00
|
|
|
assert_equal "'csv", candidates.first
|
2021-09-07 16:07:24 -04:00
|
|
|
end
|
|
|
|
|
2021-03-24 01:55:05 -04:00
|
|
|
def test_complete_require_relative
|
2021-03-24 03:10:27 -04:00
|
|
|
candidates = Dir.chdir(__dir__ + "/../..") do
|
|
|
|
IRB::InputCompletor::CompletionProc.("'lib/irb", "require_relative ", "")
|
|
|
|
end
|
2021-03-24 01:55:05 -04:00
|
|
|
%w['lib/irb/init 'lib/irb/ruby-lex].each do |word|
|
|
|
|
assert_include candidates, word
|
|
|
|
end
|
2021-03-24 02:33:07 -04:00
|
|
|
# Test cache
|
|
|
|
candidates = Dir.chdir(__dir__ + "/../..") do
|
|
|
|
IRB::InputCompletor::CompletionProc.("'lib/irb", "require_relative ", "")
|
|
|
|
end
|
|
|
|
%w['lib/irb/init 'lib/irb/ruby-lex].each do |word|
|
|
|
|
assert_include candidates, word
|
|
|
|
end
|
2021-03-24 01:55:05 -04:00
|
|
|
end
|
2021-09-02 08:34:53 -04:00
|
|
|
|
|
|
|
def test_complete_variable
|
|
|
|
str_example = ''
|
2021-09-03 16:41:37 -04:00
|
|
|
str_example.clear # suppress "assigned but unused variable" warning
|
2021-09-02 08:34:53 -04:00
|
|
|
assert_include(IRB::InputCompletor.retrieve_completion_data("str_examp", bind: binding), "str_example")
|
|
|
|
assert_equal(IRB::InputCompletor.retrieve_completion_data("str_example", bind: binding, doc_namespace: true), "String")
|
2021-09-03 16:40:15 -04:00
|
|
|
assert_equal(IRB::InputCompletor.retrieve_completion_data("str_example.to_s", bind: binding, doc_namespace: true), "String.to_s")
|
2021-09-02 08:34:53 -04:00
|
|
|
end
|
2021-09-03 16:33:03 -04:00
|
|
|
|
|
|
|
def test_complete_class_method
|
|
|
|
assert_include(IRB::InputCompletor.retrieve_completion_data("String.new", bind: binding), "String.new")
|
|
|
|
assert_equal(IRB::InputCompletor.retrieve_completion_data("String.new", bind: binding, doc_namespace: true), "String.new")
|
|
|
|
end
|
2019-04-26 05:28:54 -04:00
|
|
|
end
|
|
|
|
end
|