aboutsummaryrefslogtreecommitdiffstats
path: root/spec/ruby/language/retry_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/language/retry_spec.rb')
-rw-r--r--spec/ruby/language/retry_spec.rb52
1 files changed, 52 insertions, 0 deletions
diff --git a/spec/ruby/language/retry_spec.rb b/spec/ruby/language/retry_spec.rb
new file mode 100644
index 0000000000..96e69b763a
--- /dev/null
+++ b/spec/ruby/language/retry_spec.rb
@@ -0,0 +1,52 @@
+require File.expand_path('../../spec_helper', __FILE__)
+
+describe "The retry statement" do
+ it "re-executes the closest block" do
+ retry_first = true
+ retry_second = true
+ results = []
+ begin
+ results << 1
+ raise
+ rescue
+ results << 2
+ if retry_first
+ results << 3
+ retry_first = false
+ retry
+ end
+ begin
+ results << 4
+ raise
+ rescue
+ results << 5
+ if retry_second
+ results << 6
+ retry_second = false
+ retry
+ end
+ end
+ end
+
+ results.should == [1, 2, 3, 1, 2, 4, 5, 6, 4, 5]
+ end
+
+ it "raises a SyntaxError when used outside of a begin statement" do
+ lambda { eval 'retry' }.should raise_error(SyntaxError)
+ end
+end
+
+describe "The retry keyword inside a begin block's rescue block" do
+ it "causes the begin block to be executed again" do
+ counter = 0
+
+ begin
+ counter += 1
+ raise "An exception"
+ rescue
+ retry unless counter == 7
+ end
+
+ counter.should == 7
+ end
+end