Change soft-fail to use the config, rather than env
[rbx.git] / spec / frozen / 1.8 / language / loop_spec.rb
blobf3c3379f20d50059a2b8f0a30a88fd9816336597
1 require File.dirname(__FILE__) + '/../spec_helper'
3 describe "The loop expression" do
4   
5   it "repeats the given block until a break is called" do
6     outer_loop = 0
7     loop do
8       outer_loop += 1
9       break if outer_loop == 10
10     end
11     outer_loop.should == 10
12   end
13   
14   it "executes code in its own scope" do
15     loop do
16       inner_loop = 123
17       break
18     end
19     lambda { inner_loop }.should raise_error(NameError)
20   end
21   
22   it "returns the value passed to break if interrupted by break" do
23     loop do
24       break 123
25     end.should == 123
26   end
27   
28   it "returns nil if interrupted by break with no arguments" do
29     loop do
30       break
31     end.should == nil
32   end
34   it "skips to end of body with next" do
35     a = []
36     i = 0
37     loop do
38       break if (i+=1) >= 5
39       next if i == 3
40       a << i
41     end
42     a.should == [1, 2, 4]
43   end
44   
45   it "restarts the current iteration with redo" do
46     a = []
47     loop do
48       a << 1
49       redo if a.size < 2
50       a << 2
51       break if a.size == 3      
52     end
53     a.should == [1, 1, 2]
54   end
56   it "uses a spaghetti nightmare of redo, next and break" do
57     a = []
58     loop do
59       a << 1
60       redo if a.size == 1
61       a << 2
62       next if a.size == 3
63       a << 3
64       break if a.size > 6
65     end
66     a.should == [1, 1, 2, 1, 2, 3, 1, 2, 3]
67   end  
68 end