1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
require 'test/unit'
class TestBlocksProcs < Test::Unit::TestCase
IS19 = RUBY_VERSION =~ /1\.9/
def testBasicProc
proc = proc {|i| i}
assert_equal(2, proc.call(2))
assert_equal(3, proc.call(3))
proc = proc {|i| i*2}
assert_equal(4, proc.call(2))
assert_equal(6, proc.call(3))
end
def testProcScoping
my_proc1 = nil
my_proc2 = nil
x = 0
proc {
iii=5
my_proc1 = proc{|i|
iii = i
}
my_proc2 = proc {
x = iii # nested variables shared by procs
}
# scope of nested variables
assert_not_nil(defined?(iii))
}.call
assert(!defined?(iii)) # out of scope
my_proc1.call(5)
my_proc2.call
assert_equal(5, x)
end
def testYield
o = "dummy object"
def o.f; yield nil; end; o.f {|a| assert_nil(a)}
def o.f; yield 1; end; o.f {|a| assert_equal(1, a)}
def o.f; yield []; end; o.f {|a| assert_equal([], a)}
def o.f; yield [1]; end; o.f {|a| assert_equal([1], a)}
def o.f; yield [nil]; end; o.f {|a| assert_equal([nil], a)}
def o.f; yield [[]]; end; o.f {|a| assert_equal([[]], a)}
def o.f; yield [*[]]; end; o.f {|a| assert_equal([], a)}
def o.f; yield [*[1]]; end; o.f {|a| assert_equal([1], a)}
def o.f; yield [*[1,2]]; end; o.f {|a| assert_equal([1,2], a)}
def o.f; yield *nil; end; o.f {|a| assert_nil(a)}
def o.f; yield *1; end; o.f {|a| assert_equal(1, a)}
def o.f; yield *[]; end; o.f {|a| assert_nil(a)}
def o.f; yield *[1]; end; o.f {|a| assert_equal(1, a)}
def o.f; yield *[nil]; end; o.f {|a| assert_nil(a)}
def o.f; yield *[[]]; end; o.f {|a| assert_equal([], a)}
def o.f; yield *[*[]]; end; o.f {|a| assert_nil(a)}
def o.f; yield *[*[1]]; end; o.f {|a| assert_equal(1, a)}
def o.f; yield *[*[1,2]]; end; o.f {|a| assert_equal(IS19 ? 1 : [1,2], a)}
def o.f; yield nil; end; o.f {|*a| assert_equal([nil], a)}
def o.f; yield 1; end; o.f {|*a| assert_equal([1], a)}
def o.f; yield []; end; o.f {|*a| assert_equal([[]], a)}
def o.f; yield [1]; end; o.f {|*a| assert_equal([[1]], a)}
def o.f; yield [nil]; end; o.f {|*a| assert_equal([[nil]], a)}
def o.f; yield [[]]; end; o.f {|*a| assert_equal([[[]]], a)}
def o.f; yield [*[]]; end; o.f {|*a| assert_equal([[]], a)}
def o.f; yield [*[1]]; end; o.f {|*a| assert_equal([[1]], a)}
def o.f; yield [*[1,2]]; end; o.f {|*a| assert_equal([[1,2]], a)}
def o.f; yield *nil; end; o.f {|*a| assert_equal(IS19 ? [] : [nil], a)}
def o.f; yield *1; end; o.f {|*a| assert_equal([1], a)}
def o.f; yield *[]; end; o.f {|*a| assert_equal([], a)}
def o.f; yield *[1]; end; o.f {|*a| assert_equal([1], a)}
def o.f; yield *[nil]; end; o.f {|*a| assert_equal([nil], a)}
def o.f; yield *[[]]; end; o.f {|*a| assert_equal([[]], a)}
def o.f; yield *[*[]]; end; o.f {|*a| assert_equal([], a)}
def o.f; yield *[*[1]]; end; o.f {|*a| assert_equal([1], a)}
def o.f; yield *[*[1,2]]; end; o.f {|*a| assert_equal([1,2], a)}
def o.f; yield nil; end; o.f {|a,b,*c| assert([a,b,c] == [nil, nil, []])}
def o.f; yield 1; end; o.f {|a,b,*c| assert([a,b,c] == [1, nil, []])}
def o.f; yield []; end; o.f {|a,b,*c| assert([a,b,c] == [nil, nil, []])}
def o.f; yield [1]; end; o.f {|a,b,*c| assert([a,b,c] == [1, nil, []])}
def o.f; yield [nil]; end; o.f {|a,b,*c| assert([a,b,c] == [nil, nil, []])}
def o.f; yield [[]]; end; o.f {|a,b,*c| assert([a,b,c] == [[], nil, []])}
def o.f; yield [*[]]; end; o.f {|a,b,*c| assert([a,b,c] == [nil, nil, []])}
def o.f; yield [*[1]]; end; o.f {|a,b,*c| assert([a,b,c] == [1, nil, []])}
def o.f; yield [*[1,2]]; end; o.f {|a,b,*c| assert([a,b,c] == [1, 2, []])}
def o.f; yield *nil; end; o.f {|a,b,*c| assert([a,b,c] == [nil, nil, []])}
def o.f; yield *1; end; o.f {|a,b,*c| assert([a,b,c] == [1, nil, []])}
def o.f; yield *[]; end; o.f {|a,b,*c| assert([a,b,c] == [nil, nil, []])}
def o.f; yield *[1]; end; o.f {|a,b,*c| assert([a,b,c] == [1, nil, []])}
def o.f; yield *[nil]; end; o.f {|a,b,*c| assert([a,b,c] == [nil, nil, []])}
# FIXME: JRUBY-6499
def o.f; yield *[[]]; end; o.f {|a,b,*c| assert_equal(IS19 ? [nil, nil, []] : [[], nil, []], [a,b,c])} unless defined?(JRUBY_VERSION)
def o.f; yield *[*[]]; end; o.f {|a,b,*c| assert([a,b,c] == [nil, nil, []])}
def o.f; yield *[*[1]]; end; o.f {|a,b,*c| assert([a,b,c] == [1, nil, []])}
def o.f; yield *[*[1,2]]; end; o.f {|a,b,*c| assert([a,b,c] == [1, 2, []])}
end
end
|