diff options
author | Radosław Bułat <radek.bulat@gmail.com> | 2020-11-09 11:25:11 +0100 |
---|---|---|
committer | Marc-André Lafortune <github@marc-andre.ca> | 2020-12-17 12:46:02 -0500 |
commit | 81739ad4fdfcc86a769056fec352f27c686fba1b (patch) | |
tree | e526231281907efac92ada6c77671952b5cf8b1c /spec/ruby/core/module | |
parent | f7a6b460d5cf3665d3cc682fec34f989b639e7a6 (diff) |
Better cooperation between public/protected/private with attr* and alias_method
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/3757
Diffstat (limited to 'spec/ruby/core/module')
-rw-r--r-- | spec/ruby/core/module/alias_method_spec.rb | 15 | ||||
-rw-r--r-- | spec/ruby/core/module/attr_accessor_spec.rb | 16 | ||||
-rw-r--r-- | spec/ruby/core/module/attr_reader_spec.rb | 16 | ||||
-rw-r--r-- | spec/ruby/core/module/attr_spec.rb | 20 | ||||
-rw-r--r-- | spec/ruby/core/module/attr_writer_spec.rb | 16 | ||||
-rw-r--r-- | spec/ruby/core/module/shared/set_visibility.rb | 34 |
6 files changed, 115 insertions, 2 deletions
diff --git a/spec/ruby/core/module/alias_method_spec.rb b/spec/ruby/core/module/alias_method_spec.rb index 742e289a3f..5d3d0c23d9 100644 --- a/spec/ruby/core/module/alias_method_spec.rb +++ b/spec/ruby/core/module/alias_method_spec.rb @@ -85,8 +85,19 @@ describe "Module#alias_method" do Module.should have_public_instance_method(:alias_method, false) end - it "returns self" do - @class.send(:alias_method, :checking_return_value, :public_one).should equal(@class) + describe "returned value" do + ruby_version_is ""..."3.0" do + it "returns self" do + @class.send(:alias_method, :checking_return_value, :public_one).should equal(@class) + end + end + + ruby_version_is "3.0" do + it "returns symbol of the defined method name" do + @class.send(:alias_method, :checking_return_value, :public_one).should equal(:checking_return_value) + @class.send(:alias_method, 'checking_return_value', :public_one).should equal(:checking_return_value) + end + end end it "works in module" do diff --git a/spec/ruby/core/module/attr_accessor_spec.rb b/spec/ruby/core/module/attr_accessor_spec.rb index 6a749341be..665a9346bd 100644 --- a/spec/ruby/core/module/attr_accessor_spec.rb +++ b/spec/ruby/core/module/attr_accessor_spec.rb @@ -67,6 +67,22 @@ describe "Module#attr_accessor" do Module.should have_public_instance_method(:attr_accessor, false) end + ruby_version_is ""..."3.0" do + it "returns nil" do + Class.new do + (attr_accessor :foo, 'bar').should == nil + end + end + end + + ruby_version_is "3.0" do + it "returns an array of defined methods names as symbols" do + Class.new do + (attr_accessor :foo, 'bar').should == [:foo, :foo=, :bar, :bar=] + end + end + end + describe "on immediates" do before :each do class Fixnum diff --git a/spec/ruby/core/module/attr_reader_spec.rb b/spec/ruby/core/module/attr_reader_spec.rb index 238e3db9ea..e16b7ba2e3 100644 --- a/spec/ruby/core/module/attr_reader_spec.rb +++ b/spec/ruby/core/module/attr_reader_spec.rb @@ -61,4 +61,20 @@ describe "Module#attr_reader" do it "is a public method" do Module.should have_public_instance_method(:attr_reader, false) end + + ruby_version_is ""..."3.0" do + it "returns nil" do + Class.new do + (attr_reader :foo, 'bar').should == nil + end + end + end + + ruby_version_is "3.0" do + it "returns an array of defined methods names as symbols" do + Class.new do + (attr_reader :foo, 'bar').should == [:foo, :bar] + end + end + end end diff --git a/spec/ruby/core/module/attr_spec.rb b/spec/ruby/core/module/attr_spec.rb index 8b91e77658..060d072f27 100644 --- a/spec/ruby/core/module/attr_spec.rb +++ b/spec/ruby/core/module/attr_spec.rb @@ -145,4 +145,24 @@ describe "Module#attr" do it "is a public method" do Module.should have_public_instance_method(:attr, false) end + + ruby_version_is ""..."3.0" do + it "returns nil" do + Class.new do + (attr :foo, 'bar').should == nil + (attr :baz, false).should == nil + (attr :qux, true).should == nil + end + end + end + + ruby_version_is "3.0" do + it "returns an array of defined methods names as symbols" do + Class.new do + (attr :foo, 'bar').should == [:foo, :bar] + (attr :baz, false).should == [:baz] + (attr :qux, true).should == [:qux, :qux=] + end + end + end end diff --git a/spec/ruby/core/module/attr_writer_spec.rb b/spec/ruby/core/module/attr_writer_spec.rb index e4b193a9d8..59d8b7bf53 100644 --- a/spec/ruby/core/module/attr_writer_spec.rb +++ b/spec/ruby/core/module/attr_writer_spec.rb @@ -61,4 +61,20 @@ describe "Module#attr_writer" do it "is a public method" do Module.should have_public_instance_method(:attr_writer, false) end + + ruby_version_is ""..."3.0" do + it "returns nil" do + Class.new do + (attr_writer :foo, 'bar').should == nil + end + end + end + + ruby_version_is "3.0" do + it "returns an array of defined methods names as symbols" do + Class.new do + (attr_writer :foo, 'bar').should == [:foo=, :bar=] + end + end + end end diff --git a/spec/ruby/core/module/shared/set_visibility.rb b/spec/ruby/core/module/shared/set_visibility.rb index a04b1a54a0..9f31e230ca 100644 --- a/spec/ruby/core/module/shared/set_visibility.rb +++ b/spec/ruby/core/module/shared/set_visibility.rb @@ -6,6 +6,40 @@ describe :set_visibility, shared: true do end describe "with argument" do + describe "one or more arguments" do + it "sets visibility of given method names" do + visibility = @method + old_visibility = [:protected, :private].find {|vis| vis != visibility } + + mod = Module.new { + send old_visibility + def test1() end + def test2() end + send visibility, :test1, :test2 + } + mod.should send(:"have_#{visibility}_instance_method", :test1, false) + mod.should send(:"have_#{visibility}_instance_method", :test2, false) + end + end + + ruby_version_is "3.0" do + describe "array as a single argument" do + it "sets visibility of given method names" do + visibility = @method + old_visibility = [:protected, :private].find {|vis| vis != visibility } + + mod = Module.new { + send old_visibility + def test1() end + def test2() end + send visibility, [:test1, :test2] + } + mod.should send(:"have_#{visibility}_instance_method", :test1, false) + mod.should send(:"have_#{visibility}_instance_method", :test2, false) + end + end + end + it "does not clone method from the ancestor when setting to the same visibility in a child" do visibility = @method parent = Module.new { |