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

ruby-changes:59185

From: Jean <ko1@a...>
Date: Wed, 11 Dec 2019 16:46:42 +0900 (JST)
Subject: [ruby-changes:59185] 8a80bfcfd4 (master): Make Thread#to_s consistent with Method and Proc to_s

https://git.ruby-lang.org/ruby.git/commit/?id=8a80bfcfd4

From 8a80bfcfd4d510a20a62e21d8d2f4119cb823d4f Mon Sep 17 00:00:00 2001
From: Jean byroot Boussier <jean.boussier+github@s...>
Date: Tue, 10 Dec 2019 11:49:39 +0100
Subject: Make Thread#to_s consistent with Method and Proc to_s


diff --git a/spec/ruby/core/thread/inspect_spec.rb b/spec/ruby/core/thread/inspect_spec.rb
index 4c635b7..bd6e0c3 100644
--- a/spec/ruby/core/thread/inspect_spec.rb
+++ b/spec/ruby/core/thread/inspect_spec.rb
@@ -1,44 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/spec/ruby/core/thread/inspect_spec.rb#L1
 require_relative '../../spec_helper'
-require_relative 'fixtures/classes'
+require_relative 'shared/to_s'
 
 describe "Thread#inspect" do
-  it "can check it's own status" do
-    ThreadSpecs.status_of_current_thread.inspect.should include('run')
-  end
-
-  it "describes a running thread" do
-    ThreadSpecs.status_of_running_thread.inspect.should include('run')
-  end
-
-  it "describes a sleeping thread" do
-    ThreadSpecs.status_of_sleeping_thread.inspect.should include('sleep')
-  end
-
-  it "describes a blocked thread" do
-    ThreadSpecs.status_of_blocked_thread.inspect.should include('sleep')
-  end
-
-  it "describes a completed thread" do
-    ThreadSpecs.status_of_completed_thread.inspect.should include('dead')
-  end
-
-  it "describes a killed thread" do
-    ThreadSpecs.status_of_killed_thread.inspect.should include('dead')
-  end
-
-  it "describes a thread with an uncaught exception" do
-    ThreadSpecs.status_of_thread_with_uncaught_exception.inspect.should include('dead')
-  end
-
-  it "describes a dying sleeping thread" do
-    ThreadSpecs.status_of_dying_sleeping_thread.inspect.should include('sleep')
-  end
-
-  it "reports aborting on a killed thread" do
-    ThreadSpecs.status_of_dying_running_thread.inspect.should include('aborting')
-  end
-
-  it "reports aborting on a killed thread after sleep" do
-    ThreadSpecs.status_of_dying_thread_after_sleep.inspect.should include('aborting')
-  end
+  it_behaves_like :thread_to_s, :inspect
 end
diff --git a/spec/ruby/core/thread/shared/to_s.rb b/spec/ruby/core/thread/shared/to_s.rb
new file mode 100644
index 0000000..0c4e3c0
--- /dev/null
+++ b/spec/ruby/core/thread/shared/to_s.rb
@@ -0,0 +1,53 @@ https://github.com/ruby/ruby/blob/trunk/spec/ruby/core/thread/shared/to_s.rb#L1
+require_relative '../fixtures/classes'
+
+describe :thread_to_s, shared: true do
+  sep = ruby_version_is("2.7") ? " " : "@"
+
+  it "returns a description including file and line number" do
+    Thread.new { "hello" }.send(@method).should =~ /^#<Thread:([^ ]*?)#{sep}#{Regexp.escape __FILE__}:#{__LINE__ } \w+>$/
+  end
+
+  it "has a binary encoding" do
+    Thread.new { "hello" }.send(@method).encoding.should == Encoding::BINARY
+  end
+
+  it "can check it's own status" do
+    ThreadSpecs.status_of_current_thread.inspect.should include('run')
+  end
+
+  it "describes a running thread" do
+    ThreadSpecs.status_of_running_thread.inspect.should include('run')
+  end
+
+  it "describes a sleeping thread" do
+    ThreadSpecs.status_of_sleeping_thread.inspect.should include('sleep')
+  end
+
+  it "describes a blocked thread" do
+    ThreadSpecs.status_of_blocked_thread.inspect.should include('sleep')
+  end
+
+  it "describes a completed thread" do
+    ThreadSpecs.status_of_completed_thread.inspect.should include('dead')
+  end
+
+  it "describes a killed thread" do
+    ThreadSpecs.status_of_killed_thread.inspect.should include('dead')
+  end
+
+  it "describes a thread with an uncaught exception" do
+    ThreadSpecs.status_of_thread_with_uncaught_exception.inspect.should include('dead')
+  end
+
+  it "describes a dying sleeping thread" do
+    ThreadSpecs.status_of_dying_sleeping_thread.inspect.should include('sleep')
+  end
+
+  it "reports aborting on a killed thread" do
+    ThreadSpecs.status_of_dying_running_thread.inspect.should include('aborting')
+  end
+
+  it "reports aborting on a killed thread after sleep" do
+    ThreadSpecs.status_of_dying_thread_after_sleep.inspect.should include('aborting')
+  end
+end
diff --git a/spec/ruby/core/thread/to_s_spec.rb b/spec/ruby/core/thread/to_s_spec.rb
new file mode 100644
index 0000000..cb182a0
--- /dev/null
+++ b/spec/ruby/core/thread/to_s_spec.rb
@@ -0,0 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/spec/ruby/core/thread/to_s_spec.rb#L1
+require_relative '../../spec_helper'
+require_relative 'shared/to_s'
+
+describe "Thread#to_s" do
+  it_behaves_like :thread_to_s, :to_s
+end
diff --git a/thread.c b/thread.c
index 8d4b283..80f6f78 100644
--- a/thread.c
+++ b/thread.c
@@ -3181,7 +3181,7 @@ rb_thread_to_s(VALUE thread) https://github.com/ruby/ruby/blob/trunk/thread.c#L3181
         rb_str_catf(str, "@%"PRIsVALUE, target_th->name);
     }
     if ((loc = threadptr_invoke_proc_location(target_th)) != Qnil) {
-        rb_str_catf(str, "@%"PRIsVALUE":%"PRIsVALUE,
+        rb_str_catf(str, " %"PRIsVALUE":%"PRIsVALUE,
                     RARRAY_AREF(loc, 0), RARRAY_AREF(loc, 1));
         rb_gc_force_recycle(loc);
     }
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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