summaryrefslogtreecommitdiff
path: root/test/irb/test_history.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/irb/test_history.rb')
-rw-r--r--test/irb/test_history.rb129
1 files changed, 75 insertions, 54 deletions
diff --git a/test/irb/test_history.rb b/test/irb/test_history.rb
index 8942d24c12..392a6afa9a 100644
--- a/test/irb/test_history.rb
+++ b/test/irb/test_history.rb
@@ -1,6 +1,7 @@
# frozen_string_literal: false
require 'test/unit'
require 'irb'
+require 'irb/ext/save-history'
require 'readline'
module TestIRB
@@ -13,27 +14,60 @@ module TestIRB
IRB.conf[:RC_NAME_GENERATOR] = nil
end
+ class TestInputMethod < ::IRB::InputMethod
+ HISTORY = Array.new
+
+ include IRB::HistorySavingAbility
+
+ attr_reader :list, :line_no
+
+ def initialize(list = [])
+ super("test")
+ @line_no = 0
+ @list = list
+ end
+
+ def gets
+ @list[@line_no]&.tap {@line_no += 1}
+ end
+
+ def eof?
+ @line_no >= @list.size
+ end
+
+ def encoding
+ Encoding.default_external
+ end
+
+ def reset
+ @line_no = 0
+ end
+
+ def winsize
+ [10, 20]
+ end
+ end
+
def test_history_save_1
omit "Skip Editline" if /EditLine/n.match(Readline::VERSION)
- assert_history_with_irbrc_and_irb_history(<<~EXPECTED_HISTORY, <<~IRBRC, <<~IRB_HISTORY) do |stdin|
+ IRB.conf[:SAVE_HISTORY] = 1
+ assert_history(<<~EXPECTED_HISTORY, <<~INITIAL_HISTORY, <<~INPUT)
exit
EXPECTED_HISTORY
- IRB.conf[:USE_READLINE] = true
- IRB.conf[:SAVE_HISTORY] = 1
- IRB.conf[:USE_READLINE] = true
- IRBRC
1
2
3
4
- IRB_HISTORY
- stdin.write("5\nexit\n")
- end
+ INITIAL_HISTORY
+ 5
+ exit
+ INPUT
end
def test_history_save_100
omit "Skip Editline" if /EditLine/n.match(Readline::VERSION)
- assert_history_with_irbrc_and_irb_history(<<~EXPECTED_HISTORY, <<~IRBRC, <<~IRB_HISTORY) do |stdin|
+ IRB.conf[:SAVE_HISTORY] = 100
+ assert_history(<<~EXPECTED_HISTORY, <<~INITIAL_HISTORY, <<~INPUT)
1
2
3
@@ -41,22 +75,20 @@ module TestIRB
5
exit
EXPECTED_HISTORY
- IRB.conf[:USE_READLINE] = true
- IRB.conf[:SAVE_HISTORY] = 100
- IRB.conf[:USE_READLINE] = true
- IRBRC
1
2
3
4
- IRB_HISTORY
- stdin.write("5\nexit\n")
- end
+ INITIAL_HISTORY
+ 5
+ exit
+ INPUT
end
def test_history_save_bignum
omit "Skip Editline" if /EditLine/n.match(Readline::VERSION)
- assert_history_with_irbrc_and_irb_history(<<~EXPECTED_HISTORY, <<~IRBRC, <<~IRB_HISTORY) do |stdin|
+ IRB.conf[:SAVE_HISTORY] = 10 ** 19
+ assert_history(<<~EXPECTED_HISTORY, <<~INITIAL_HISTORY, <<~INPUT)
1
2
3
@@ -64,22 +96,20 @@ module TestIRB
5
exit
EXPECTED_HISTORY
- IRB.conf[:USE_READLINE] = true
- IRB.conf[:SAVE_HISTORY] = 10 ** 19
- IRB.conf[:USE_READLINE] = true
- IRBRC
1
2
3
4
- IRB_HISTORY
- stdin.write("5\nexit\n")
- end
+ INITIAL_HISTORY
+ 5
+ exit
+ INPUT
end
def test_history_save_minus_as_infinity
omit "Skip Editline" if /EditLine/n.match(Readline::VERSION)
- assert_history_with_irbrc_and_irb_history(<<~EXPECTED_HISTORY, <<~IRBRC, <<~IRB_HISTORY) do |stdin|
+ IRB.conf[:SAVE_HISTORY] = -1 # infinity
+ assert_history(<<~EXPECTED_HISTORY, <<~INITIAL_HISTORY, <<~INPUT)
1
2
3
@@ -87,58 +117,49 @@ module TestIRB
5
exit
EXPECTED_HISTORY
- IRB.conf[:USE_READLINE] = true
- IRB.conf[:SAVE_HISTORY] = -1 # infinity
- IRB.conf[:USE_READLINE] = true
- IRBRC
1
2
3
4
- IRB_HISTORY
- stdin.write("5\nexit\n")
- end
+ INITIAL_HISTORY
+ 5
+ exit
+ INPUT
end
private
- def assert_history_with_irbrc_and_irb_history(expected_history, irbrc, irb_history)
- result = nil
- result_history = nil
- backup_irbrc = ENV.delete("IRBRC")
+ def assert_history(expected_history, initial_irb_history, input)
+ backup_verbose, $VERBOSE = $VERBOSE, nil
backup_home = ENV["HOME"]
+ IRB.conf[:LC_MESSAGES] = IRB::Locale.new
+ actual_history = nil
Dir.mktmpdir("test_irb_history_#{$$}") do |tmpdir|
ENV["HOME"] = tmpdir
- open(IRB.rc_file, "w") do |f|
- f.write(irbrc)
- end
open(IRB.rc_file("_history"), "w") do |f|
- f.write(irb_history)
+ f.write(initial_irb_history)
end
- with_temp_stdio do |stdin, stdout|
- yield(stdin, stdout)
- stdin.close
- stdout.flush
- system('ruby', '-Ilib', '-Itest', '-W0', '-rirb', '-e', 'IRB.start(__FILE__)', in: stdin.path, out: stdout.path, err: stdout.path)
- result = stdout.read
- stdout.close
- end
+ io = TestInputMethod.new
+ io.class::HISTORY.clear
+ io.load_history
+ io.class::HISTORY.concat(input.split)
+ io.save_history
+
+ io.load_history
open(IRB.rc_file("_history"), "r") do |f|
- result_history = f.read
+ actual_history = f.read
end
end
- assert_equal(expected_history, result_history, <<~MESSAGE)
+ assert_equal(expected_history, actual_history, <<~MESSAGE)
expected:
#{expected_history}
but actual:
- #{result_history}
- and stdout and stderr ware
- #{result}
+ #{actual_history}
MESSAGE
ensure
+ $VERBOSE = backup_verbose
ENV["HOME"] = backup_home
- ENV["IRBRC"] = backup_irbrc
end
def with_temp_stdio