diff options
Diffstat (limited to 'spec/ruby/core/exception/cause_spec.rb')
| -rw-r--r-- | spec/ruby/core/exception/cause_spec.rb | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/spec/ruby/core/exception/cause_spec.rb b/spec/ruby/core/exception/cause_spec.rb index a1aa39ae34..cfc15bdda3 100644 --- a/spec/ruby/core/exception/cause_spec.rb +++ b/spec/ruby/core/exception/cause_spec.rb @@ -1,19 +1,38 @@ -require File.expand_path('../../../spec_helper', __FILE__) +require_relative '../../spec_helper' describe "Exception#cause" do it "returns the active exception when an exception is raised" do begin raise Exception, "the cause" - rescue Exception - begin + rescue Exception => cause + -> { raise RuntimeError, "the consequence" - rescue RuntimeError => e - e.should be_an_instance_of(RuntimeError) - e.message.should == "the consequence" + }.should.raise(RuntimeError, "the consequence", cause:) + end + end + + it "is set for user errors caused by internal errors" do + begin + 1 / 0 + rescue => cause + -> { raise "foo" }.should.raise(RuntimeError, cause:) + end + end - e.cause.should be_an_instance_of(Exception) - e.cause.message.should == "the cause" - end + it "is set for internal errors caused by user errors" do + cause = RuntimeError.new "cause" + begin + raise cause + rescue + -> { 1 / 0 }.should.raise(ZeroDivisionError, cause:) + end + end + + it "is not set to the exception itself when it is re-raised" do + begin + raise RuntimeError + rescue RuntimeError => e + -> { raise e }.should.raise(RuntimeError, cause: nil) end end end |
