2021-03-25 05:58:25 -04:00
|
|
|
require 'irb'
|
|
|
|
|
|
|
|
begin
|
|
|
|
require 'yamatanooroti'
|
|
|
|
|
|
|
|
class IRB::TestRendering < Yamatanooroti::TestCase
|
|
|
|
def setup
|
|
|
|
@pwd = Dir.pwd
|
|
|
|
suffix = '%010d' % Random.rand(0..65535)
|
|
|
|
@tmpdir = File.join(File.expand_path(Dir.tmpdir), "test_irb_#{$$}_#{suffix}")
|
|
|
|
begin
|
|
|
|
Dir.mkdir(@tmpdir)
|
|
|
|
rescue Errno::EEXIST
|
|
|
|
FileUtils.rm_rf(@tmpdir)
|
|
|
|
Dir.mkdir(@tmpdir)
|
|
|
|
end
|
|
|
|
@irbrc_backup = ENV['IRBRC']
|
|
|
|
@irbrc_file = ENV['IRBRC'] = File.join(@tmpdir, 'temporaty_irbrc')
|
|
|
|
File.unlink(@irbrc_file) if File.exist?(@irbrc_file)
|
|
|
|
end
|
|
|
|
|
|
|
|
def teardown
|
|
|
|
FileUtils.rm_rf(@tmpdir)
|
|
|
|
ENV['IRBRC'] = @irbrc_backup
|
|
|
|
ENV.delete('RELINE_TEST_PROMPT') if ENV['RELINE_TEST_PROMPT']
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_launch
|
|
|
|
write_irbrc <<~'LINES'
|
|
|
|
puts 'start IRB'
|
|
|
|
LINES
|
2021-08-29 13:29:13 -04:00
|
|
|
start_terminal(25, 80, %W{ruby -I#{@pwd}/lib #{@pwd}/exe/irb}, startup_message: 'start IRB')
|
2021-03-25 05:58:25 -04:00
|
|
|
write(<<~EOC)
|
|
|
|
'Hello, World!'
|
|
|
|
EOC
|
|
|
|
close
|
|
|
|
assert_screen(<<~EOC)
|
|
|
|
start IRB
|
|
|
|
irb(main):001:0> 'Hello, World!'
|
|
|
|
=> "Hello, World!"
|
|
|
|
irb(main):002:0>
|
|
|
|
EOC
|
|
|
|
end
|
|
|
|
|
2021-04-02 11:46:01 -04:00
|
|
|
def test_multiline_paste
|
|
|
|
write_irbrc <<~'LINES'
|
|
|
|
puts 'start IRB'
|
|
|
|
LINES
|
2021-08-29 13:29:13 -04:00
|
|
|
start_terminal(25, 80, %W{ruby -I#{@pwd}/lib #{@pwd}/exe/irb}, startup_message: 'start IRB')
|
2021-04-02 11:46:01 -04:00
|
|
|
write(<<~EOC)
|
|
|
|
class A
|
2021-03-26 09:46:40 -04:00
|
|
|
def inspect; '#<A>'; end
|
2021-04-02 11:46:01 -04:00
|
|
|
def a; self; end
|
|
|
|
def b; true; end
|
|
|
|
end
|
|
|
|
|
|
|
|
a = A.new
|
|
|
|
|
|
|
|
a
|
|
|
|
.a
|
|
|
|
.b
|
|
|
|
EOC
|
|
|
|
close
|
|
|
|
assert_screen(<<~EOC)
|
|
|
|
start IRB
|
|
|
|
irb(main):001:1* class A
|
2021-03-26 09:46:40 -04:00
|
|
|
irb(main):002:1* def inspect; '#<A>'; end
|
|
|
|
irb(main):003:1* def a; self; end
|
|
|
|
irb(main):004:1* def b; true; end
|
|
|
|
irb(main):005:0> end
|
|
|
|
=> :b
|
|
|
|
irb(main):006:0>
|
|
|
|
irb(main):007:0> a = A.new
|
|
|
|
=> #<A>
|
|
|
|
irb(main):008:0>
|
|
|
|
irb(main):009:0> a
|
|
|
|
irb(main):010:0> .a
|
|
|
|
irb(main):011:0> .b
|
2021-04-02 11:46:01 -04:00
|
|
|
=> true
|
2021-03-26 09:46:40 -04:00
|
|
|
irb(main):012:0>
|
|
|
|
EOC
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_evaluate_each_toplevel_statement_by_multiline_paste
|
|
|
|
write_irbrc <<~'LINES'
|
|
|
|
puts 'start IRB'
|
|
|
|
LINES
|
2021-08-29 13:29:13 -04:00
|
|
|
start_terminal(40, 80, %W{ruby -I#{@pwd}/lib #{@pwd}/exe/irb}, startup_message: 'start IRB')
|
2021-03-26 09:46:40 -04:00
|
|
|
write(<<~EOC)
|
|
|
|
class A
|
|
|
|
def inspect; '#<A>'; end
|
|
|
|
def b; self; end
|
|
|
|
def c; true; end
|
|
|
|
end
|
|
|
|
|
|
|
|
a = A.new
|
|
|
|
|
|
|
|
a
|
|
|
|
.b
|
|
|
|
# aaa
|
|
|
|
.c
|
|
|
|
|
|
|
|
(a)
|
|
|
|
&.b()
|
|
|
|
|
|
|
|
|
|
|
|
class A def b; self; end; def c; true; end; end;
|
|
|
|
a = A.new
|
|
|
|
a
|
|
|
|
.b
|
|
|
|
# aaa
|
|
|
|
.c
|
|
|
|
(a)
|
|
|
|
&.b()
|
|
|
|
EOC
|
|
|
|
close
|
|
|
|
assert_screen(<<~EOC)
|
|
|
|
start IRB
|
|
|
|
irb(main):001:1* class A
|
|
|
|
irb(main):002:1* def inspect; '#<A>'; end
|
|
|
|
irb(main):003:1* def b; self; end
|
|
|
|
irb(main):004:1* def c; true; end
|
|
|
|
irb(main):005:0> end
|
|
|
|
=> :c
|
|
|
|
irb(main):006:0>
|
|
|
|
irb(main):007:0> a = A.new
|
|
|
|
=> #<A>
|
|
|
|
irb(main):008:0>
|
|
|
|
irb(main):009:0> a
|
|
|
|
irb(main):010:0> .b
|
|
|
|
irb(main):011:0> # aaa
|
|
|
|
irb(main):012:0> .c
|
|
|
|
=> true
|
|
|
|
irb(main):013:0>
|
|
|
|
irb(main):014:0> (a)
|
|
|
|
irb(main):015:0> &.b()
|
|
|
|
=> #<A>
|
|
|
|
irb(main):016:0>
|
|
|
|
irb(main):017:0>
|
|
|
|
irb(main):018:0> class A def b; self; end; def c; true; end; end;
|
|
|
|
=> :c
|
|
|
|
irb(main):019:0> a = A.new
|
|
|
|
=> #<A>
|
|
|
|
irb(main):020:0> a
|
|
|
|
irb(main):021:0> .b
|
|
|
|
irb(main):022:0> # aaa
|
|
|
|
irb(main):023:0> .c
|
|
|
|
=> true
|
|
|
|
irb(main):024:0> (a)
|
|
|
|
irb(main):025:0> &.b()
|
|
|
|
=> #<A>
|
|
|
|
irb(main):026:0>
|
2021-04-02 11:46:01 -04:00
|
|
|
EOC
|
|
|
|
end
|
|
|
|
|
2021-09-08 09:22:58 -04:00
|
|
|
def test_symbol_with_backtick
|
|
|
|
write_irbrc <<~'LINES'
|
|
|
|
puts 'start IRB'
|
|
|
|
LINES
|
|
|
|
start_terminal(40, 80, %W{ruby -I#{@pwd}/lib #{@pwd}/exe/irb}, startup_message: 'start IRB')
|
|
|
|
write(<<~EOC)
|
|
|
|
:`
|
|
|
|
EOC
|
|
|
|
close
|
|
|
|
assert_screen(<<~EOC)
|
|
|
|
start IRB
|
|
|
|
irb(main):001:0> :`
|
|
|
|
=> :`
|
|
|
|
irb(main):002:0>
|
|
|
|
EOC
|
|
|
|
end
|
|
|
|
|
2021-10-07 21:28:44 -04:00
|
|
|
def test_autocomplete_with_showdoc_in_gaps_on_narrow_screen_right
|
|
|
|
pend "Needs a dummy document to show doc"
|
|
|
|
write_irbrc <<~'LINES'
|
|
|
|
IRB.conf[:PROMPT][:MY_PROMPT] = {
|
|
|
|
:PROMPT_I => "%03n> ",
|
|
|
|
:PROMPT_N => "%03n> ",
|
|
|
|
:PROMPT_S => "%03n> ",
|
|
|
|
:PROMPT_C => "%03n> "
|
|
|
|
}
|
|
|
|
IRB.conf[:PROMPT_MODE] = :MY_PROMPT
|
|
|
|
puts 'start IRB'
|
|
|
|
LINES
|
|
|
|
start_terminal(4, 19, %W{ruby -I/home/aycabta/ruby/reline/lib -I#{@pwd}/lib #{@pwd}/exe/irb}, startup_message: 'start IRB')
|
|
|
|
write("Str\C-i")
|
|
|
|
close
|
|
|
|
assert_screen(<<~EOC)
|
|
|
|
001> String
|
|
|
|
StringPress A
|
|
|
|
StructString
|
|
|
|
of byte
|
|
|
|
EOC
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_autocomplete_with_showdoc_in_gaps_on_narrow_screen_left
|
|
|
|
pend "Needs a dummy document to show doc"
|
|
|
|
write_irbrc <<~'LINES'
|
|
|
|
IRB.conf[:PROMPT][:MY_PROMPT] = {
|
|
|
|
:PROMPT_I => "%03n> ",
|
|
|
|
:PROMPT_N => "%03n> ",
|
|
|
|
:PROMPT_S => "%03n> ",
|
|
|
|
:PROMPT_C => "%03n> "
|
|
|
|
}
|
|
|
|
IRB.conf[:PROMPT_MODE] = :MY_PROMPT
|
|
|
|
puts 'start IRB'
|
|
|
|
LINES
|
|
|
|
start_terminal(4, 12, %W{ruby -I#{@pwd}/lib #{@pwd}/exe/irb}, startup_message: 'start IRB')
|
|
|
|
write("Str\C-i")
|
|
|
|
close
|
|
|
|
assert_screen(<<~EOC)
|
|
|
|
001> String
|
|
|
|
PressString
|
|
|
|
StrinStruct
|
|
|
|
of by
|
|
|
|
EOC
|
|
|
|
end
|
|
|
|
|
2021-03-25 05:58:25 -04:00
|
|
|
private def write_irbrc(content)
|
|
|
|
File.open(@irbrc_file, 'w') do |f|
|
|
|
|
f.write content
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
rescue LoadError, NameError
|
|
|
|
# On Ruby repository, this test suit doesn't run because Ruby repo doesn't
|
|
|
|
# have the yamatanooroti gem.
|
|
|
|
end
|