Fix some symbol.to_proc problems
[jruby.git] / test / testReturn.rb
blobcef0b25a830b53e122ae54fdf28982b09889b266
1 require 'test/minirunit'
2 test_check "Test return(s):"
4 def meth1
5   (1..10).each do |val|
6     return val
7   end
8 end
10 test_ok(1 == meth1)
12 def meth2(&b)
13   b
14 end
16 res = meth2 { return }
18 test_exception(LocalJumpError){ res.call }
20 def meth3
21   (1..10).each do |v1|
22      ('a'..'z').each do |v2|
23         return v2
24      end
25   end
26 end
28 test_ok('a' == meth3)
30 def meth4
31   p = Proc.new { return 99 }
32   p.call
33   puts "Never get here"
34 end
36 test_ok(99 == meth4)
38 q = Proc.new { return 99 }
40 def meth5(p)
41   p.call
42 end
44 test_exception(LocalJumpError) { meth5(q) } 
46 def meth6
47   p = lambda { return 99 }
48   test_ok(99 == p.call)
49 end
51 meth6
53 class B
54   attr_reader :arr
55   def initialize(arr)
56     @arr = arr
57   end
58   def detect (nothing_found = nil)
59     z = each { |e| return e if yield(e) }
60     # should not get here if return hit
61     puts "DOH #{z}"
62     nothing_found.call unless nothing_found.nil?
63     nil
64   end
65   def each
66     i = 0
67     loop do
68       break if i == @arr.size
69       yield @arr[i]
70       i+=1
71     end
72   end
73 end
76 test_ok(2 == B.new([1, 2, 3, 4]).detect {|c| c > 1})
78 def proc_call(&b)
79   b.call
80 end
81 def proc_return1
82   proc_call{return 42}+1
83 end
84 test_ok(proc_return1() == 42)
86 # Procs (blocks) turn lambda-like when defined as a methods
87 # (actually define_method instance_eval's them, but lambda is easier for now)
88 class X
89   def self.make_method(sym, &blk)
90     define_method(sym, &blk)
91   end
92   
93   make_method :foo do
94     return "bar"
95   end
96 end
98 test_equal("bar", X.new.foo)