diff options
author | Benoit Daloze <eregontp@gmail.com> | 2021-09-07 19:01:07 +0200 |
---|---|---|
committer | Benoit Daloze <eregontp@gmail.com> | 2021-09-07 19:01:07 +0200 |
commit | 258661409e9e3fd470f006975ded872778aad4f4 (patch) | |
tree | 4cd23fe290feb50f4d41349013dbb41bdf12117f /spec/ruby/core/module/define_method_spec.rb | |
parent | a375640ea561d1f7c4d2d89839007b3a973a04e0 (diff) |
Update to ruby/spec@b1e93a2
Diffstat (limited to 'spec/ruby/core/module/define_method_spec.rb')
-rw-r--r-- | spec/ruby/core/module/define_method_spec.rb | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/spec/ruby/core/module/define_method_spec.rb b/spec/ruby/core/module/define_method_spec.rb index 0cb2ab140c..c65b30de24 100644 --- a/spec/ruby/core/module/define_method_spec.rb +++ b/spec/ruby/core/module/define_method_spec.rb @@ -350,6 +350,14 @@ describe "Module#define_method" do object2.other_cool_method.should == "data is foo" end + it "accepts a proc from a Symbol" do + symbol_proc = :+.to_proc + klass = Class.new do + define_method :foo, &symbol_proc + end + klass.new.foo(1, 2).should == 3 + end + it "maintains the Proc's scope" do class DefineMethodByProcClass in_scope = true @@ -715,3 +723,46 @@ describe "Method#define_method when passed a Proc object" do end end end + +describe "Method#define_method when passed a block" do + describe "behaves exactly like a lambda" do + it "for return" do + Class.new do + define_method(:foo) do + return 42 + end + end.new.foo.should == 42 + end + + it "for break" do + Class.new do + define_method(:foo) do + break 42 + end + end.new.foo.should == 42 + end + + it "for next" do + Class.new do + define_method(:foo) do + next 42 + end + end.new.foo.should == 42 + end + + it "for redo" do + Class.new do + result = [] + define_method(:foo) do + if result.empty? + result << :first + redo + else + result << :second + result + end + end + end.new.foo.should == [:first, :second] + end + end +end |