summaryrefslogtreecommitdiff
path: root/spec/ruby/core/module/refine_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/core/module/refine_spec.rb')
-rw-r--r--spec/ruby/core/module/refine_spec.rb57
1 files changed, 57 insertions, 0 deletions
diff --git a/spec/ruby/core/module/refine_spec.rb b/spec/ruby/core/module/refine_spec.rb
index 97ea0a706d..662d49205d 100644
--- a/spec/ruby/core/module/refine_spec.rb
+++ b/spec/ruby/core/module/refine_spec.rb
@@ -425,6 +425,24 @@ describe "Module#refine" do
end
end
+ ruby_version_is "" ... "2.6" do
+ it "is not honored by Kernel#public_send" do
+ refinement = Module.new do
+ refine ModuleSpecs::ClassWithFoo do
+ def foo; "foo from refinement"; end
+ end
+ end
+
+ result = nil
+ Module.new do
+ using refinement
+ result = ModuleSpecs::ClassWithFoo.new.public_send :foo
+ end
+
+ result.should == "foo"
+ end
+ end
+
ruby_version_is "2.6" do
it "is honored by Kernel#public_send" do
refinement = Module.new do
@@ -561,6 +579,45 @@ describe "Module#refine" do
result.should == true
end
end
+
+ ruby_version_is ""..."2.6" do
+ it "is not honored by &" do
+ refinement = Module.new do
+ refine String do
+ def to_proc(*args)
+ -> (*) { 'foo' }
+ end
+ end
+ end
+
+ -> do
+ Module.new do
+ using refinement
+ ["hola"].map(&"upcase")
+ end
+ end.should raise_error(TypeError, /wrong argument type String \(expected Proc\)/)
+ end
+ end
+
+ ruby_version_is "2.6" do
+ it "is honored by &" do
+ refinement = Module.new do
+ refine String do
+ def to_proc(*args)
+ -> (*) { 'foo' }
+ end
+ end
+ end
+
+ result = nil
+ Module.new do
+ using refinement
+ result = ["hola"].map(&"upcase")
+ end
+
+ result.should == ['foo']
+ end
+ end
end
context "when super is called in a refinement" do