diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-01-28 11:45:21 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-01-28 11:45:21 +0000 |
commit | 2a4c87dc31b3774b8f8f2ab7b74f6d864f41a804 (patch) | |
tree | 7ebced0774e05f5a00f78f93d94e15c5d7b202e1 /spec | |
parent | 2210709b79222ecd2d9758f7316fdbd7c068ea84 (diff) |
Add refinements support to method/instance_method.
[Fix GH-2034]
From: manga_osyo <manga.osyo@gmail.com>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66935 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'spec')
-rw-r--r-- | spec/ruby/core/module/refine_spec.rb | 74 |
1 files changed, 66 insertions, 8 deletions
diff --git a/spec/ruby/core/module/refine_spec.rb b/spec/ruby/core/module/refine_spec.rb index 662d49205d..42b2b64331 100644 --- a/spec/ruby/core/module/refine_spec.rb +++ b/spec/ruby/core/module/refine_spec.rb @@ -526,20 +526,78 @@ describe "Module#refine" do result.should == "hello from refinement" end - it "is not honored by Kernel#method" do - klass = Class.new - refinement = Module.new do - refine klass do - def foo; end + ruby_version_is "" ... "2.7" do + it "is not honored by Kernel#method" do + klass = Class.new + refinement = Module.new do + refine klass do + def foo; end + end end + + -> { + Module.new do + using refinement + klass.new.method(:foo) + end + }.should raise_error(NameError, /undefined method `foo'/) end + end - -> { + ruby_version_is "2.7" do + it "is honored by Kernel#method" do + klass = Class.new + refinement = Module.new do + refine klass do + def foo; end + end + end + + result = nil Module.new do using refinement - klass.new.method(:foo) + result = klass.new.method(:foo).class end - }.should raise_error(NameError, /undefined method `foo'/) + + result.should == Method + end + end + + ruby_version_is "" ... "2.7" do + it "is not honored by Kernel#instance_method" do + klass = Class.new + refinement = Module.new do + refine klass do + def foo; end + end + end + + -> { + Module.new do + using refinement + klass.instance_method(:foo) + end + }.should raise_error(NameError, /undefined method `foo'/) + end + end + + ruby_version_is "2.7" do + it "is honored by Kernel#method" do + klass = Class.new + refinement = Module.new do + refine klass do + def foo; end + end + end + + result = nil + Module.new do + using refinement + result = klass.instance_method(:foo).class + end + + result.should == UnboundMethod + end end ruby_version_is "" ... "2.6" do |