1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/irb/test_context.rb
nobu 9fa0d0058d irb.rb: restore the last error
* lib/irb.rb (eval_input): restore the last error `$!`, as the
  previous result.  [Feature #14684]

* lib/irb/context.rb (evaluate): add `exception` keyword argument
  to set the last error.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63150 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-04-14 13:05:52 +00:00

53 lines
1.3 KiB
Ruby

# frozen_string_literal: false
require 'test/unit'
require 'tempfile'
require 'irb'
require 'rubygems' if defined?(Gem)
module TestIRB
class TestContext < Test::Unit::TestCase
class TestInputMethod < ::IRB::InputMethod
attr_reader :line, :line_no
def initialize(list = [])
super("test")
@line_no = 0
@line = list
end
def gets
@list[@line_no.tap {@line_no += 1}]
end
def eof?
@line_no >= @list.size
end
end
def setup
IRB.init_config(nil)
IRB.conf[:USE_READLINE] = false
IRB.conf[:VERBOSE] = false
workspace = IRB::WorkSpace.new(Object.new)
@context = IRB::Context.new(nil, workspace, TestInputMethod.new)
end
def test_last_value
assert_nil(@context.last_value)
assert_nil(@context.evaluate('_', 1))
obj = Object.new
@context.set_last_value(obj)
assert_same(obj, @context.last_value)
assert_same(obj, @context.evaluate('_', 1))
end
def test_evaluate_with_exception
assert_nil(@context.evaluate("$!", 1))
e = assert_raise_with_message(RuntimeError, 'foo') {
@context.evaluate("raise 'foo'", 1)
}
assert_equal('foo', e.message)
assert_same(e, @context.evaluate('$!', 1, exception: e))
end
end
end