Skip to content

Commit

Permalink
Showing 1 changed file with 99 additions and 0 deletions.
99 changes: 99 additions & 0 deletions spec/ruby/language/predefined_spec.rb
Original file line number Diff line number Diff line change
@@ -262,6 +262,105 @@ def method_missing(*args)

$!.should == nil
end

describe "in bodies without ensure"
it "should be cleared when an exception is rescued" do
begin
raise 'foo'
rescue
end
$!.should == nil
end

it "should be cleared when an exception is rescued even when a non-local return is present" do
def foo; yield; end
def bar
begin
raise
rescue Exception
foo { return }
end
end

bar
$!.should == nil
end

it "should not be cleared when an exception is not rescued" do
e = MyException.new
begin
begin
begin
raise e
rescue TypeError
end
ensure
$!.should == e
end
rescue
end
end

it "should not be cleared when an exception is rescued and rethrown" do
e = MyException.new
begin
begin
begin
raise e
rescue => e
raise e
end
ensure
$!.should == e
end
rescue
end
end
end

describe "in ensure-protected bodies"
it "should be cleared when an exception is rescued" do
begin
raise 'foo'
rescue
ensure
end
$!.should == nil
end

it "should not be cleared when an exception is not rescued" do
e = MyException.new
begin
begin
begin
raise e
rescue TypeError
ensure
end
ensure
$!.should == e
end
rescue
end
end

it "should not be cleared when an exception is rescued and rethrown" do
e = MyException.new
begin
begin
begin
raise e
rescue => e
raise e
ensure
end
ensure
$!.should == e
end
rescue
end
end
end
end

=begin

0 comments on commit 51af4f8

Please sign in to comment.