diff options
author | Benoit Daloze <eregontp@gmail.com> | 2020-05-02 16:03:14 +0200 |
---|---|---|
committer | Benoit Daloze <eregontp@gmail.com> | 2020-05-02 16:03:14 +0200 |
commit | c9213aa864fb8527388679c21f1ea8ce129e2f1a (patch) | |
tree | a6ef2403c73ef61a2aaddad6c0f8d9d09e4e6151 /spec/ruby/core/module/using_spec.rb | |
parent | a68ddf42879005905176bc38285906fe01707aff (diff) | |
download | ruby-c9213aa864fb8527388679c21f1ea8ce129e2f1a.tar.gz |
Update to ruby/spec@d394dfd
Diffstat (limited to 'spec/ruby/core/module/using_spec.rb')
-rw-r--r-- | spec/ruby/core/module/using_spec.rb | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/spec/ruby/core/module/using_spec.rb b/spec/ruby/core/module/using_spec.rb index 533d87d080..4781b99bb7 100644 --- a/spec/ruby/core/module/using_spec.rb +++ b/spec/ruby/core/module/using_spec.rb @@ -243,6 +243,96 @@ describe "Module#using" do mod.call_foo(c).should == "foo from refinement" end + it "is active for module defined via Module.new {}" do + refinement = Module.new do + refine Integer do + def foo; "foo from refinement"; end + end + end + + result = nil + + Module.new do + using refinement + + Module.new do + result = 1.foo + end + end + + result.should == "foo from refinement" + end + + it "is active for class defined via Class.new {}" do + refinement = Module.new do + refine Integer do + def foo; "foo from refinement"; end + end + end + + result = nil + + Module.new do + using refinement + + Class.new do + result = 1.foo + end + end + + result.should == "foo from refinement" + end + + it "is active for block called via instance_exec" do + refinement = Module.new do + refine Integer do + def foo; "foo from refinement"; end + end + end + + c = Class.new do + using refinement + + def abc + block = -> { + 1.foo + } + + self.instance_exec(&block) + end + end + + c.new.abc.should == "foo from refinement" + end + + it "is active for block called via instance_eval" do + refinement = Module.new do + refine String do + def foo; "foo from refinement"; end + end + end + + c = Class.new do + using refinement + + def initialize + @a = "1703" + + @a.instance_eval do + def abc + "#{self}: #{self.foo}" + end + end + end + + def abc + @a.abc + end + end + + c.new.abc.should == "1703: foo from refinement" + end + it "is not active if `using` call is not evaluated" do result = nil |