ruby-changes:65684
From: aycabta <ko1@a...>
Date: Mon, 29 Mar 2021 05:10:23 +0900 (JST)
Subject: [ruby-changes:65684] a1938ec308 (master): [ruby/irb] Always add input method when calling Irb.new in tests
https://git.ruby-lang.org/ruby.git/commit/?id=a1938ec308 From a1938ec308543d1649069bddd3bf0aeb541f3804 Mon Sep 17 00:00:00 2001 From: aycabta <aycabta@g...> Date: Sun, 28 Mar 2021 22:47:20 +0900 Subject: [ruby/irb] Always add input method when calling Irb.new in tests When passes input method as nil to Context.new through Irb.new, ReidlineInputMethod.new is executed and the global internal state of Reline is rewritten, therefore other tests are failed in the Ruby repository. This commit changes to use TestInputMethod. https://github.com/ruby/irb/commit/010dce9210 --- test/irb/test_cmd.rb | 86 +++++++++++++++++++++++++--------------------------- 1 file changed, 42 insertions(+), 44 deletions(-) diff --git a/test/irb/test_cmd.rb b/test/irb/test_cmd.rb index f2e9cfb..9bf78a4 100644 --- a/test/irb/test_cmd.rb +++ b/test/irb/test_cmd.rb @@ -5,6 +5,32 @@ require "irb/extend-command" https://github.com/ruby/ruby/blob/trunk/test/irb/test_cmd.rb#L5 module TestIRB class ExtendCommand < Test::Unit::TestCase + class TestInputMethod < ::IRB::InputMethod + 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 + end + def setup @pwd = Dir.pwd @tmpdir = File.join(Dir.tmpdir, "test_reline_config_#{$$}") @@ -44,12 +70,12 @@ module TestIRB https://github.com/ruby/ruby/blob/trunk/test/irb/test_cmd.rb#L70 IRB.conf[:USE_SINGLELINE] = false IRB.conf[:VERBOSE] = false workspace = IRB::WorkSpace.new(self) - irb = IRB::Irb.new(workspace) + irb = IRB::Irb.new(workspace, TestInputMethod.new([])) IRB.conf[:MAIN_CONTEXT] = irb.context expected = %r{ Ruby\sversion: .+\n IRB\sversion:\sirb .+\n - InputMethod:\sReidlineInputMethod\swith\sReline .+ and .+\n + InputMethod:\sAbstract\sInputMethod\n \.irbrc\spath: .+\n RUBY_PLATFORM: .+ }x @@ -64,12 +90,12 @@ module TestIRB https://github.com/ruby/ruby/blob/trunk/test/irb/test_cmd.rb#L90 IRB.conf[:USE_SINGLELINE] = true IRB.conf[:VERBOSE] = false workspace = IRB::WorkSpace.new(self) - irb = IRB::Irb.new(workspace) + irb = IRB::Irb.new(workspace, TestInputMethod.new([])) IRB.conf[:MAIN_CONTEXT] = irb.context expected = %r{ Ruby\sversion: .+\n IRB\sversion:\sirb .+\n - InputMethod:\sReadlineInputMethod\swith .+ and .+\n + InputMethod:\sAbstract\sInputMethod\n \.irbrc\spath: .+\n RUBY_PLATFORM: .+ }x @@ -87,12 +113,12 @@ module TestIRB https://github.com/ruby/ruby/blob/trunk/test/irb/test_cmd.rb#L113 IRB.conf[:USE_SINGLELINE] = false IRB.conf[:VERBOSE] = false workspace = IRB::WorkSpace.new(self) - irb = IRB::Irb.new(workspace) + irb = IRB::Irb.new(workspace, TestInputMethod.new([])) IRB.conf[:MAIN_CONTEXT] = irb.context expected = %r{ Ruby\sversion: .+\n IRB\sversion:\sirb .+\n - InputMethod:\sReidlineInputMethod\swith\sReline\s[^ ]+(?!\sand\s.+)\n + InputMethod:\sAbstract\sInputMethod\n RUBY_PLATFORM: .+\n \z }x @@ -114,12 +140,12 @@ module TestIRB https://github.com/ruby/ruby/blob/trunk/test/irb/test_cmd.rb#L140 IRB.conf[:USE_SINGLELINE] = true IRB.conf[:VERBOSE] = false workspace = IRB::WorkSpace.new(self) - irb = IRB::Irb.new(workspace) + irb = IRB::Irb.new(workspace, TestInputMethod.new([])) IRB.conf[:MAIN_CONTEXT] = irb.context expected = %r{ Ruby\sversion: .+\n IRB\sversion:\sirb .+\n - InputMethod:\sReadlineInputMethod\swith\s(?~.*\sand\s.+)\n + InputMethod:\sAbstract\sInputMethod\n RUBY_PLATFORM: .+\n \z }x @@ -130,32 +156,6 @@ module TestIRB https://github.com/ruby/ruby/blob/trunk/test/irb/test_cmd.rb#L156 IRB.const_set(:IRBRC_EXT, ext_backup) end - class TestInputMethod < ::IRB::InputMethod - 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 - end - def test_measure IRB.init_config(nil) IRB.conf[:PROMPT] = { @@ -376,15 +376,14 @@ module TestIRB https://github.com/ruby/ruby/blob/trunk/test/irb/test_cmd.rb#L376 end def test_ls + input = TestInputMethod.new([ + "ls Object.new.tap { |o| o.instance_variable_set(:@a, 1) }\n", + ]) IRB.init_config(nil) workspace = IRB::WorkSpace.new(self) + irb = IRB::Irb.new(workspace, input) IRB.conf[:VERBOSE] = false - irb = IRB::Irb.new(workspace) IRB.conf[:MAIN_CONTEXT] = irb.context - input = TestInputMethod.new([ - "ls Object.new.tap { |o| o.instance_variable_set(:@a, 1) }\n", - ]) - irb = IRB::Irb.new(IRB::WorkSpace.new(Object.new), input) irb.context.return_format = "=> %s\n" out, err = capture_output do irb.eval_input @@ -394,15 +393,14 @@ module TestIRB https://github.com/ruby/ruby/blob/trunk/test/irb/test_cmd.rb#L393 end def test_whereami + input = TestInputMethod.new([ + "whereami\n", + ]) IRB.init_config(nil) workspace = IRB::WorkSpace.new(self) + irb = IRB::Irb.new(workspace, input) IRB.conf[:VERBOSE] = false - irb = IRB::Irb.new(workspace) IRB.conf[:MAIN_CONTEXT] = irb.context - input = TestInputMethod.new([ - "whereami\n", - ]) - irb = IRB::Irb.new(IRB::WorkSpace.new(Object.new), input) irb.context.return_format = "=> %s\n" out, err = capture_output do irb.eval_input -- cgit v1.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/