[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]