# 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