summaryrefslogtreecommitdiffhomepage
path: root/test/t/bs_block.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/t/bs_block.rb')
-rw-r--r--test/t/bs_block.rb390
1 files changed, 390 insertions, 0 deletions
diff --git a/test/t/bs_block.rb b/test/t/bs_block.rb
new file mode 100644
index 000000000..b290cb914
--- /dev/null
+++ b/test/t/bs_block.rb
@@ -0,0 +1,390 @@
+##
+# Bootstrap tests for blocks
+
+assert('BS Block 1') do
+ 1.times{
+ begin
+ a = 1
+ ensure
+ foo = nil
+ end
+ } == 1
+end
+
+assert('BS Block 2') do
+ [1,2,3].find{|x| x == 2} == 2
+end
+
+assert('BS Block 3') do
+ class E
+ include Enumerable
+ def each(&block)
+ [1, 2, 3].each(&block)
+ end
+ end
+ E.new.find {|x| x == 2 } == 2
+end
+
+assert('BS Block 3') do
+ sum = 0
+ for x in [1, 2, 3]
+ sum += x
+ end
+ sum == 6
+end
+
+assert('BS Block 4') do
+ sum = 0
+ for x in (1..5)
+ sum += x
+ end
+ sum == 15
+end
+
+assert('BS Block 5') do
+ sum = 0
+ for x in []
+ sum += x
+ end
+ sum == 0
+end
+
+assert('BS Block 6') do
+ ans = []
+ 1.times{
+ for n in 1..3
+ a = n
+ ans << a
+ end
+ } == 1
+end
+
+assert('BS Block 7') do
+ ans = []
+ for m in 1..3
+ for n in 1..3
+ a = [m, n]
+ ans << a
+ end
+ end == 1..3
+end
+
+assert('BS Block 8') do
+ (1..3).to_a == [1, 2, 3]
+end
+
+assert('BS Block 9') do
+ (1..3).map{|e|
+ e * 4
+ } == [4, 8, 12]
+end
+
+assert('BS Block 10') do
+ def m
+ yield
+ end
+ def n
+ yield
+ end
+
+ m{
+ n{
+ 100
+ }
+ } == 100
+end
+
+assert('BS Block 11') do
+ def m
+ yield 1
+ end
+
+ m{|ib|
+ m{|jb|
+ i = 20
+ }
+ } == 20
+end
+
+assert('BS Block 12') do
+ def m
+ yield 1
+ end
+
+ m{|ib|
+ m{|jb|
+ ib = 20
+ kb = 2
+ }
+ } == 2
+end
+
+assert('BS Block 13') do
+ def iter1
+ iter2{
+ yield
+ }
+ end
+
+ def iter2
+ yield
+ end
+
+ iter1{
+ jb = 2
+ iter1{
+ jb = 3
+ }
+ jb
+ } == 3
+end
+
+assert('BS Block 14') do
+ def iter1
+ iter2{
+ yield
+ }
+ end
+
+ def iter2
+ yield
+ end
+
+ iter1{
+ jb = 2
+ iter1{
+ jb
+ }
+ jb
+ } == 2
+end
+
+assert('BS Block 15') do
+ def m
+ yield 1
+ end
+ m{|ib|
+ ib*2
+ } == 2
+end
+
+assert('BS Block 16') do
+ def m
+ yield 12345, 67890
+ end
+ m{|ib,jb|
+ ib*2+jb
+ } == 92580
+end
+
+assert('BS Block 17') do
+ def iter
+ yield 10
+ end
+
+ a = nil
+ [iter{|a|
+ a
+ }, a] == [10, nil]
+end
+
+assert('BS Block 18') do
+ def iter
+ yield 10
+ end
+
+ iter{|a|
+ iter{|a|
+ a + 1
+ } + a
+ } == 21
+end
+
+assert('BS Block 19') do
+ def iter
+ yield 10, 20, 30, 40
+ end
+
+ a = b = c = d = nil
+ iter{|a, b, c, d|
+ [a, b, c, d]
+ } + [a, b, c, d] == [10, 20, 30, 40, nil, nil, nil, nil]
+end
+
+assert('BS Block 20') do
+ def iter
+ yield 10, 20, 30, 40
+ end
+
+ a = b = nil
+ iter{|a, b, c, d|
+ [a, b, c, d]
+ } + [a, b] == [10, 20, 30, 40, nil, nil]
+end
+
+assert('BS Block 21') do
+ def iter
+ yield 1, 2
+ end
+
+ iter{|a, *b|
+ [a, b]
+ } == [1, [2]]
+end
+
+assert('BS Block 22') do
+ def iter
+ yield 1, 2
+ end
+
+ iter{|*a|
+ [a]
+ } == [[1, 2]]
+end
+
+assert('BS Block 23') do
+ def iter
+ yield 1, 2
+ end
+
+ iter{|a, b, *c|
+ [a, b, c]
+ } == [1, 2, []]
+end
+
+assert('BS Block 24') do
+ def m
+ yield
+ end
+ m{
+ 1
+ } == 1
+end
+
+assert('BS Block 25') do
+ def m
+ yield 123
+ end
+ m{|ib|
+ m{|jb|
+ ib*jb
+ }
+ } == 15129
+end
+
+assert('BS Block 26') do
+ def m a
+ yield a
+ end
+ m(1){|ib|
+ m(2){|jb|
+ ib*jb
+ }
+ } == 2
+end
+
+assert('BS Block 27') do
+ sum = 0
+ 3.times{|ib|
+ 2.times{|jb|
+ sum += ib + jb
+ }}
+ sum == 9
+end
+
+assert('BS Block 28') do
+ 3.times{|bl|
+ break 10
+ } == 10
+end
+
+assert('BS Block 29') do
+ def iter
+ yield 1,2,3
+ end
+
+ iter{|i, j|
+ [i, j]
+ } == [1, 2]
+end
+
+assert('BS Block 30') do
+ def iter
+ yield 1
+ end
+
+ iter{|i, j|
+ [i, j]
+ } == [1, nil]
+end
+
+assert('BS Block [ruby-dev:31147]') do
+ def m
+ yield
+ end
+ m{|&b| b}.inspect == 'nil'
+end
+
+assert('BS Block [ruby-dev:31160]') do
+ def m()
+ yield
+ end
+ m {|(v,(*))|}.inspect == 'nil'
+end
+
+assert('BS Block 31') do
+ def m()
+ yield
+ end
+ m {|((*))|}.inspect == 'nil'
+end
+
+assert('BS Block [ruby-dev:31440]') do
+ def m
+ yield [0]
+ end
+ m{|v, &b| v}.inspect == '[0]'
+end
+
+assert('BS Block 32') do
+ r = false; 1.times{|&b| r = b}; r.class == NilClass
+end
+
+assert('BS Block [ruby-core:14395]') do
+ class Controller
+ def respond_to(&block)
+ responder = Responder.new
+ block.call(responder)
+ responder.respond
+ end
+ def test_for_bug
+ respond_to{|format|
+ format.js{
+ "in test"
+ render{|obj|
+ obj
+ }
+ }
+ }
+ end
+ def render(&block)
+ "in render"
+ end
+ end
+
+ class Responder
+ def method_missing(symbol, &block)
+ "enter method_missing"
+ @response = Proc.new{
+ 'in method missing'
+ block.call
+ }
+ "leave method_missing"
+ end
+ def respond
+ @response.call
+ end
+ end
+ t = Controller.new
+ t.test_for_bug
+end