diff options
Diffstat (limited to 'spec/ruby/core/kernel/raise_spec.rb')
| -rw-r--r-- | spec/ruby/core/kernel/raise_spec.rb | 108 |
1 files changed, 19 insertions, 89 deletions
diff --git a/spec/ruby/core/kernel/raise_spec.rb b/spec/ruby/core/kernel/raise_spec.rb index a4ab963fa3..6162677e17 100644 --- a/spec/ruby/core/kernel/raise_spec.rb +++ b/spec/ruby/core/kernel/raise_spec.rb @@ -4,9 +4,19 @@ require_relative '../../shared/kernel/raise' describe "Kernel#raise" do it "is a private method" do - Kernel.should have_private_instance_method(:raise) + Kernel.private_instance_methods.should.include?(:raise) end + # Shared specs expect a public #raise method. + public_raiser = Object.new + class << public_raiser + public :raise + end + it_behaves_like :kernel_raise, :raise, public_raiser + it_behaves_like :kernel_raise_with_cause, :raise, public_raiser +end + +describe "Kernel#raise with previously rescued exception" do it "re-raises the previously rescued exception if no exception is specified" do ScratchPad.record nil @@ -23,90 +33,9 @@ describe "Kernel#raise" do raise ScratchPad.record :no_reraise end - end.should raise_error(Exception, "outer") - - ScratchPad.recorded.should be_nil - end - - it "accepts a cause keyword argument that sets the cause" do - cause = StandardError.new - -> { raise("error", cause: cause) }.should raise_error(RuntimeError) { |e| e.cause.should == cause } - end - - it "accepts a cause keyword argument that overrides the last exception" do - begin - raise "first raise" - rescue => ignored - cause = StandardError.new - -> { raise("error", cause: cause) }.should raise_error(RuntimeError) { |e| e.cause.should == cause } - end - end - - it "raises an ArgumentError when only cause is given" do - cause = StandardError.new - -> { raise(cause: cause) }.should raise_error(ArgumentError, "only cause is given with no arguments") - end - - it "raises an ArgumentError when only cause is given even if it has nil value" do - -> { raise(cause: nil) }.should raise_error(ArgumentError, "only cause is given with no arguments") - end - - it "raises an ArgumentError when given cause is not an instance of Exception" do - -> { raise "message", cause: Object.new }.should raise_error(TypeError, "exception object expected") - end - - it "doesn't raise an ArgumentError when given cause is nil" do - -> { raise "message", cause: nil }.should raise_error(RuntimeError, "message") - end - - it "allows cause equal an exception" do - e = RuntimeError.new("message") - -> { raise e, cause: e }.should raise_error(e) - end + end.should.raise(Exception, "outer") - it "doesn't set given cause when it equals an exception" do - e = RuntimeError.new("message") - - begin - raise e, cause: e - rescue - end - - e.cause.should == nil - end - - it "raises ArgumentError when exception is part of the cause chain" do - -> { - begin - raise "Error 1" - rescue => e1 - begin - raise "Error 2" - rescue => e2 - begin - raise "Error 3" - rescue => e3 - raise e1, cause: e3 - end - end - end - }.should raise_error(ArgumentError, "circular causes") - end - - it "re-raises a rescued exception" do - -> do - begin - raise StandardError, "aaa" - rescue Exception - begin - raise ArgumentError - rescue ArgumentError - end - - # should raise StandardError "aaa" - raise - end - end.should raise_error(StandardError, "aaa") + ScratchPad.recorded.should == nil end it "re-raises a previously rescued exception without overwriting the cause" do @@ -283,10 +212,11 @@ describe "Kernel#raise" do end end -describe "Kernel#raise" do - it_behaves_like :kernel_raise, :raise, Kernel -end - describe "Kernel.raise" do - it "needs to be reviewed for spec completeness" + it "is a public method" do + Kernel.singleton_class.should.public_method_defined?(:raise) + end + + it_behaves_like :kernel_raise, :raise, Kernel + it_behaves_like :kernel_raise_with_cause, :raise, Kernel end |
