From 0ce2ba22373d0518a4cea0e4ab7b6f1f1641ee0c Mon Sep 17 00:00:00 2001 From: Herwin Date: Tue, 9 Jan 2024 17:30:59 +0100 Subject: [PATCH 1/7] Add parentheses to calles of thread_variable_set This makes the code more consistent. --- core/thread/thread_variable_get_spec.rb | 4 ++-- core/thread/thread_variable_set_spec.rb | 6 +++--- core/thread/thread_variable_spec.rb | 4 ++-- core/thread/thread_variables_spec.rb | 10 +++++----- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/core/thread/thread_variable_get_spec.rb b/core/thread/thread_variable_get_spec.rb index 0ad19bfd88..1f465eb98d 100644 --- a/core/thread/thread_variable_get_spec.rb +++ b/core/thread/thread_variable_get_spec.rb @@ -14,12 +14,12 @@ end it "returns the value previously set by #thread_variable_set" do - @t.thread_variable_set :a, 49 + @t.thread_variable_set(:a, 49) @t.thread_variable_get(:a).should == 49 end it "returns a value private to self" do - @t.thread_variable_set :thread_variable_get_spec, 82 + @t.thread_variable_set(:thread_variable_get_spec, 82) Thread.current.thread_variable_get(:thread_variable_get_spec).should be_nil end end diff --git a/core/thread/thread_variable_set_spec.rb b/core/thread/thread_variable_set_spec.rb index 1338c306c7..72c34026c3 100644 --- a/core/thread/thread_variable_set_spec.rb +++ b/core/thread/thread_variable_set_spec.rb @@ -10,16 +10,16 @@ end it "returns the value set" do - (@t.thread_variable_set :a, 2).should == 2 + @t.thread_variable_set(:a, 2).should == 2 end it "sets a value that will be returned by #thread_variable_get" do - @t.thread_variable_set :a, 49 + @t.thread_variable_set(:a, 49) @t.thread_variable_get(:a).should == 49 end it "sets a value private to self" do - @t.thread_variable_set :thread_variable_get_spec, 82 + @t.thread_variable_set(:thread_variable_get_spec, 82) @t.thread_variable_get(:thread_variable_get_spec).should == 82 Thread.current.thread_variable_get(:thread_variable_get_spec).should be_nil end diff --git a/core/thread/thread_variable_spec.rb b/core/thread/thread_variable_spec.rb index 6bd1950c04..8fc585e586 100644 --- a/core/thread/thread_variable_spec.rb +++ b/core/thread/thread_variable_spec.rb @@ -10,12 +10,12 @@ end it "returns false if the thread variables do not contain 'key'" do - @t.thread_variable_set :a, 2 + @t.thread_variable_set(:a, 2) @t.thread_variable?(:b).should be_false end it "returns true if the thread variables contain 'key'" do - @t.thread_variable_set :a, 2 + @t.thread_variable_set(:a, 2) @t.thread_variable?(:a).should be_true end end diff --git a/core/thread/thread_variables_spec.rb b/core/thread/thread_variables_spec.rb index 1bd68b17f1..44301ed613 100644 --- a/core/thread/thread_variables_spec.rb +++ b/core/thread/thread_variables_spec.rb @@ -10,15 +10,15 @@ end it "returns the keys of all the values set" do - @t.thread_variable_set :a, 2 - @t.thread_variable_set :b, 4 - @t.thread_variable_set :c, 6 + @t.thread_variable_set(:a, 2) + @t.thread_variable_set(:b, 4) + @t.thread_variable_set(:c, 6) @t.thread_variables.sort.should == [:a, :b, :c] end it "sets a value private to self" do - @t.thread_variable_set :a, 82 - @t.thread_variable_set :b, 82 + @t.thread_variable_set(:a, 82) + @t.thread_variable_set(:b, 82) Thread.current.thread_variables.should_not include(:a, :b) end From 977f80dde72bf0763cc7da167aad2e59c731d963 Mon Sep 17 00:00:00 2001 From: Herwin Date: Tue, 9 Jan 2024 18:00:11 +0100 Subject: [PATCH 2/7] Clarify comment for Thread#thread_variables The old one was a copy-paste of the setter. --- core/thread/thread_variables_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/thread/thread_variables_spec.rb b/core/thread/thread_variables_spec.rb index 44301ed613..9d1466d4f4 100644 --- a/core/thread/thread_variables_spec.rb +++ b/core/thread/thread_variables_spec.rb @@ -16,7 +16,7 @@ @t.thread_variables.sort.should == [:a, :b, :c] end - it "sets a value private to self" do + it "returns the keys private to self" do @t.thread_variable_set(:a, 82) @t.thread_variable_set(:b, 82) Thread.current.thread_variables.should_not include(:a, :b) From 03212055f2a4ad94ace510e125e6f934db79742a Mon Sep 17 00:00:00 2001 From: Herwin Date: Tue, 9 Jan 2024 17:34:08 +0100 Subject: [PATCH 3/7] Expand specs for Thread#thread_variable_set * Test with frozen Thread * Test with nil value which removes the entry * Test different key types --- core/thread/thread_variable_set_spec.rb | 33 +++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/core/thread/thread_variable_set_spec.rb b/core/thread/thread_variable_set_spec.rb index 72c34026c3..f8f790dc01 100644 --- a/core/thread/thread_variable_set_spec.rb +++ b/core/thread/thread_variable_set_spec.rb @@ -23,4 +23,37 @@ @t.thread_variable_get(:thread_variable_get_spec).should == 82 Thread.current.thread_variable_get(:thread_variable_get_spec).should be_nil end + + it "converts a String key into a Symbol" do + @t.thread_variable_set('a', 49) + @t.thread_variable_get(:a).should == 49 + end + + it "converts a key that is neither String nor Symbol with #to_str" do + key = mock('key') + key.should_receive(:to_str).and_return('a') + @t.thread_variable_set(key, 49) + @t.thread_variable_get(:a).should == 49 + end + + it "removes a key if the value is nil" do + @t.thread_variable_set(:a, 52) + @t.thread_variable_set(:a, nil) + @t.thread_variable?(:a).should be_false + end + + it "raises a FrozenError if the thread is frozen" do + @t.freeze + -> { @t.thread_variable_set(:a, 1) }.should raise_error(FrozenError, "can't modify frozen thread locals") + end + + it "raises a TypeError if the key is neither Symbol nor String, nor responds to #to_str" do + -> { @t.thread_variable_set(123, 1) }.should raise_error(TypeError, '123 is not a symbol') + end + + it "does not try to convert the key with #to_sym" do + key = mock('key') + key.should_not_receive(:to_sym) + -> { @t.thread_variable_set(key, 42) }.should raise_error(TypeError, "#{key.inspect} is not a symbol") + end end From 2f8508e69f4cbe8f73e3baece4e003c04d7a99d8 Mon Sep 17 00:00:00 2001 From: Herwin Date: Tue, 9 Jan 2024 17:39:34 +0100 Subject: [PATCH 4/7] Expand specs for Thread#thread_variable_get * Test with frozen Thread * Test different key types The key type behaviour differs from Thread#thread_variable_set, keys that raise a TypeError when setting result in a nil value when getting. --- core/thread/thread_variable_get_spec.rb | 27 +++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/core/thread/thread_variable_get_spec.rb b/core/thread/thread_variable_get_spec.rb index 1f465eb98d..2eff1686ff 100644 --- a/core/thread/thread_variable_get_spec.rb +++ b/core/thread/thread_variable_get_spec.rb @@ -22,4 +22,31 @@ @t.thread_variable_set(:thread_variable_get_spec, 82) Thread.current.thread_variable_get(:thread_variable_get_spec).should be_nil end + + it "converts a String key into a Symbol" do + @t.thread_variable_set(:a, 49) + @t.thread_variable_get('a').should == 49 + end + + it "converts a key that is neither String nor Symbol with #to_str" do + key = mock('key') + key.should_receive(:to_str).and_return('a') + @t.thread_variable_set(:a, 49) + @t.thread_variable_get(key).should == 49 + end + + it "does not raise FrozenError if the thread is frozen" do + @t.freeze + @t.thread_variable_get(:a).should be_nil + end + + it "does not raise a TypeError if the key is neither Symbol nor String, nor responds to #to_str" do + @t.thread_variable_get(123).should be_nil + end + + it "does not try to convert the key with #to_sym" do + key = mock('key') + key.should_not_receive(:to_sym) + @t.thread_variable_get(key).should be_nil + end end From 7ab86dc12ce3fb177cb63e821aa0815f52561d51 Mon Sep 17 00:00:00 2001 From: Herwin Date: Tue, 9 Jan 2024 17:43:02 +0100 Subject: [PATCH 5/7] Expand specs for Thread#thread_variable? * Test with frozen Thread * Test different key types The key type behaviour is similar to Thread#thread_variable_get? --- core/thread/thread_variable_spec.rb | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/core/thread/thread_variable_spec.rb b/core/thread/thread_variable_spec.rb index 8fc585e586..041c9f438f 100644 --- a/core/thread/thread_variable_spec.rb +++ b/core/thread/thread_variable_spec.rb @@ -18,4 +18,31 @@ @t.thread_variable_set(:a, 2) @t.thread_variable?(:a).should be_true end + + it "converts a String key into a Symbol" do + @t.thread_variable_set(:a, 49) + @t.thread_variable?('a').should be_true + end + + it "converts a key that is neither String nor Symbol with #to_str" do + key = mock('key') + key.should_receive(:to_str).and_return('a') + @t.thread_variable_set(:a, 49) + @t.thread_variable?(key).should be_true + end + + it "does not raise FrozenError if the thread is frozen" do + @t.freeze + @t.thread_variable?(:a).should be_false + end + + it "does not raise a TypeError if the key is neither Symbol nor String, nor responds to #to_str" do + @t.thread_variable?(123).should be_false + end + + it "does not try to convert the key with #to_sym" do + key = mock('key') + key.should_not_receive(:to_sym) + @t.thread_variable?(key).should be_false + end end From 4cd2a60747a0decd2f3be31d8839227a2d20bca7 Mon Sep 17 00:00:00 2001 From: Herwin Date: Tue, 9 Jan 2024 18:02:25 +0100 Subject: [PATCH 6/7] Expand specs for Thread#thread_variables * Test different key types This shows the Symbol type being used as the internal type. --- core/thread/thread_variables_spec.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/thread/thread_variables_spec.rb b/core/thread/thread_variables_spec.rb index 9d1466d4f4..1c4937208c 100644 --- a/core/thread/thread_variables_spec.rb +++ b/core/thread/thread_variables_spec.rb @@ -26,4 +26,12 @@ Thread.current.thread_variables.should == [] @t.thread_variables.should == [] end + + it "converts keys into Symbols" do + key = mock('key') + key.should_receive(:to_str).and_return('a') + @t.thread_variable_set(key, 49) + @t.thread_variable_set('b', 50) + @t.thread_variables.sort.should == [:a, :b] + end end From 89328e413ab11580903b38703f5b495d11e94661 Mon Sep 17 00:00:00 2001 From: Andrew Konchin Date: Wed, 26 Jun 2024 13:45:05 +0300 Subject: [PATCH 7/7] Reword Thread #thread_variable_get/#thread_variable_set/#thread_variable?/#thread_variables specs titles --- core/thread/thread_variable_get_spec.rb | 7 ++++--- core/thread/thread_variable_set_spec.rb | 7 +++++-- core/thread/thread_variable_spec.rb | 7 ++++++- core/thread/thread_variables_spec.rb | 6 ++++-- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/core/thread/thread_variable_get_spec.rb b/core/thread/thread_variable_get_spec.rb index 2eff1686ff..67017771fd 100644 --- a/core/thread/thread_variable_get_spec.rb +++ b/core/thread/thread_variable_get_spec.rb @@ -23,9 +23,10 @@ Thread.current.thread_variable_get(:thread_variable_get_spec).should be_nil end - it "converts a String key into a Symbol" do - @t.thread_variable_set(:a, 49) - @t.thread_variable_get('a').should == 49 + it "accepts String and Symbol keys interchangeably" do + @t.thread_variable_set("a", 49) + @t.thread_variable_get("a").should == 49 + @t.thread_variable_get(:a).should == 49 end it "converts a key that is neither String nor Symbol with #to_str" do diff --git a/core/thread/thread_variable_set_spec.rb b/core/thread/thread_variable_set_spec.rb index f8f790dc01..c262a6614e 100644 --- a/core/thread/thread_variable_set_spec.rb +++ b/core/thread/thread_variable_set_spec.rb @@ -24,9 +24,12 @@ Thread.current.thread_variable_get(:thread_variable_get_spec).should be_nil end - it "converts a String key into a Symbol" do + it "accepts String and Symbol keys interchangeably" do @t.thread_variable_set('a', 49) - @t.thread_variable_get(:a).should == 49 + @t.thread_variable_get('a').should == 49 + + @t.thread_variable_set(:a, 50) + @t.thread_variable_get('a').should == 50 end it "converts a key that is neither String nor Symbol with #to_str" do diff --git a/core/thread/thread_variable_spec.rb b/core/thread/thread_variable_spec.rb index 041c9f438f..d64e6ec63d 100644 --- a/core/thread/thread_variable_spec.rb +++ b/core/thread/thread_variable_spec.rb @@ -19,9 +19,14 @@ @t.thread_variable?(:a).should be_true end - it "converts a String key into a Symbol" do + it "accepts String and Symbol keys interchangeably" do + @t.thread_variable?('a').should be_false + @t.thread_variable?(:a).should be_false + @t.thread_variable_set(:a, 49) + @t.thread_variable?('a').should be_true + @t.thread_variable?(:a).should be_true end it "converts a key that is neither String nor Symbol with #to_str" do diff --git a/core/thread/thread_variables_spec.rb b/core/thread/thread_variables_spec.rb index 1c4937208c..51ceef3376 100644 --- a/core/thread/thread_variables_spec.rb +++ b/core/thread/thread_variables_spec.rb @@ -27,11 +27,13 @@ @t.thread_variables.should == [] end - it "converts keys into Symbols" do + it "returns keys as Symbols" do key = mock('key') key.should_receive(:to_str).and_return('a') + @t.thread_variable_set(key, 49) @t.thread_variable_set('b', 50) - @t.thread_variables.sort.should == [:a, :b] + @t.thread_variable_set(:c, 51) + @t.thread_variables.sort.should == [:a, :b, :c] end end