diff options
Diffstat (limited to 'spec/ruby/core/proc/shared')
| -rw-r--r-- | spec/ruby/core/proc/shared/compose.rb | 22 | ||||
| -rw-r--r-- | spec/ruby/core/proc/shared/dup.rb | 39 |
2 files changed, 61 insertions, 0 deletions
diff --git a/spec/ruby/core/proc/shared/compose.rb b/spec/ruby/core/proc/shared/compose.rb new file mode 100644 index 0000000000..c004cec7c9 --- /dev/null +++ b/spec/ruby/core/proc/shared/compose.rb @@ -0,0 +1,22 @@ +describe :proc_compose, shared: true do + it "raises TypeError if passed not callable object" do + lhs = @object.call + not_callable = Object.new + + -> { + lhs.send(@method, not_callable) + }.should.raise(TypeError, "callable object is expected") + + end + + it "does not try to coerce argument with #to_proc" do + lhs = @object.call + + succ = Object.new + def succ.to_proc(s); s.succ; end + + -> { + lhs.send(@method, succ) + }.should.raise(TypeError, "callable object is expected") + end +end diff --git a/spec/ruby/core/proc/shared/dup.rb b/spec/ruby/core/proc/shared/dup.rb new file mode 100644 index 0000000000..2821d2e00f --- /dev/null +++ b/spec/ruby/core/proc/shared/dup.rb @@ -0,0 +1,39 @@ +describe :proc_dup, shared: true do + it "returns a copy of self" do + a = -> { "hello" } + b = a.send(@method) + + a.should_not.equal?(b) + + a.call.should == b.call + end + + it "returns an instance of subclass" do + cl = Class.new(Proc) + + cl.new{}.send(@method).class.should == cl + end + + ruby_version_is "3.4" do + it "copies instance variables" do + proc = -> { "hello" } + proc.instance_variable_set(:@ivar, 1) + cl = proc.send(@method) + cl.instance_variables.should == [:@ivar] + end + + it "copies the finalizer" do + code = <<-'RUBY' + obj = Proc.new { } + + ObjectSpace.define_finalizer(obj, Proc.new { STDOUT.write "finalized\n" }) + + obj.clone + + exit 0 + RUBY + + ruby_exe(code).lines.sort.should == ["finalized\n", "finalized\n"] + end + end +end |
