diff options
| author | Stan Lo <stan001212@gmail.com> | 2023-07-04 16:17:36 +0100 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2023-07-04 15:17:41 +0000 |
| commit | f6af5a1128754bdac07b8cf3c41a7397f113a130 (patch) | |
| tree | 98d4b528b18544078412c28a234c0f9f1e634f65 /test | |
| parent | 296782ab60e63fe825461a199369c5dd8505c2b7 (diff) | |
[ruby/irb] Refactor eval history
(https://github.com/ruby/irb/pull/623)
* Rename `ext/history.rb` to `ext/eval_history.rb`
To confusion with `lib/irb/history.rb`
* Add eval_history tests
* Rename eval_history's History to EvalHistory to avoid confusion
Diffstat (limited to 'test')
| -rw-r--r-- | test/irb/test_eval_history.rb | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/test/irb/test_eval_history.rb b/test/irb/test_eval_history.rb new file mode 100644 index 0000000000..e81e65f7f4 --- /dev/null +++ b/test/irb/test_eval_history.rb @@ -0,0 +1,68 @@ +# frozen_string_literal: true +require "irb" + +require_relative "helper" + +module TestIRB + class EvalHistoryTest < TestCase + def setup + save_encodings + IRB.instance_variable_get(:@CONF).clear + end + + def teardown + restore_encodings + end + + def execute_lines(*lines, conf: {}, main: self, irb_path: nil) + IRB.init_config(nil) + IRB.conf[:VERBOSE] = false + IRB.conf[:PROMPT_MODE] = :SIMPLE + IRB.conf.merge!(conf) + input = TestInputMethod.new(lines) + irb = IRB::Irb.new(IRB::WorkSpace.new(main), input) + irb.context.return_format = "=> %s\n" + irb.context.irb_path = irb_path if irb_path + IRB.conf[:MAIN_CONTEXT] = irb.context + capture_output do + irb.eval_input + end + end + + def test_eval_history_is_diabled_by_default + out, err = execute_lines( + "a = 1", + "__" + ) + + assert_empty(err) + assert_match(/undefined local variable or method `__'/, out) + end + + def test_eval_history_can_be_retrieved_with_double_underscore + out, err = execute_lines( + "a = 1", + "__", + conf: { EVAL_HISTORY: 5 } + ) + + assert_empty(err) + assert_match("=> 1\n" + "=> 1 1\n", out) + end + + def test_eval_history_respects_given_limit + out, err = execute_lines( + "'foo'\n", + "'bar'\n", + "'baz'\n", + "'xyz'\n", + "__", + conf: { EVAL_HISTORY: 4 } + ) + + assert_empty(err) + # Because eval_history injects `__` into the history AND decide to ignore it, we only get <limit> - 1 results + assert_match("2 \"bar\"\n" + "3 \"baz\"\n" + "4 \"xyz\"\n", out) + end + end +end |
