diff options
Diffstat (limited to 'test/t/syntax.rb')
| -rw-r--r-- | test/t/syntax.rb | 92 |
1 files changed, 87 insertions, 5 deletions
diff --git a/test/t/syntax.rb b/test/t/syntax.rb index a726719f8..c4c99242b 100644 --- a/test/t/syntax.rb +++ b/test/t/syntax.rb @@ -35,9 +35,10 @@ assert('super', '11.3.4') do end assert('yield', '11.3.5') do - assert_raise LocalJumpError do - yield - end +# it's syntax error now +# assert_raise LocalJumpError do +# yield +# end assert_raise LocalJumpError do o = Object.new def o.foo @@ -357,6 +358,11 @@ assert('splat object in assignment') do assert_equal [2], (a = *o) end +assert('one-line pattern match') do + 1 => a + assert_equal(1, a) +end + assert('splat object in case statement') do o = Object.new def o.to_a @@ -435,10 +441,11 @@ assert('parenthesed do-block in cmdarg') do end assert('method definition in cmdarg') do - if false + result = class MethodDefinitionInCmdarg + def self.bar(arg); arg end bar def foo; self.each do end end end - true + assert_equal(:foo, result) end assert('optional argument in the rhs default expressions') do @@ -462,6 +469,18 @@ assert('optional block argument in the rhs default expressions') do assert_nil(Proc.new {|foo = foo| foo}.call) end +assert('local variable definition in default value and subsequent arguments') do + def m(a = b = 1, c) [a, b, c] end + assert_equal([1, 1, :c], m(:c)) + assert_equal([:a, nil, :c], m(:a, :c)) + + def m(a = b = 1, &c) [a, b, c ? true : nil] end + assert_equal([1, 1, nil], m) + assert_equal([1, 1, true], m{}) + assert_equal([:a, nil, nil], m(:a)) + assert_equal([:a, nil, true], m(:a){}) +end + assert('multiline comments work correctly') do =begin this is a comment with nothing after begin and end @@ -483,6 +502,10 @@ this is a comment that has extra after =begin and =end with tabs after it end assert 'keyword arguments' do + def m(a, b:1) [a, b] end + assert_equal [1, 1], m(1) + assert_equal [1, 2], m(1, b: 2) + def m(a, b:) [a, b] end assert_equal [1, 2], m(1, b: 2) assert_raise(ArgumentError) { m b: 1 } @@ -661,4 +684,63 @@ assert 'keyword arguments' do result = m(1, 2, e: 3, g: 4, h: 5, i: 6, &(l = ->{})) assert_equal([1, 1, [], 2, 3, 2, 4, { h: 5, i: 6 }, l], result) =end + + def m(a: b = 1, c:) [a, b, c] end + assert_equal([1, 1, :c], m(c: :c)) + assert_equal([:a, nil, :c], m(a: :a, c: :c)) +end + +assert('numbered parameters') do + assert_equal(15, [1,2,3,4,5].reduce {_1+_2}) + assert_equal(45, Proc.new do _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 end.call(*[1, 2, 3, 4, 5, 6, 7, 8, 9])) +end + +assert('_0 is not numbered parameter') do + _0 = :l + assert_equal(:l, ->{_0}.call) +end + +assert('argument forwarding') do + c = Class.new { + def a0(*a,&b) + assert_equal([1,2,3], a) + assert_not_nil(b) + end + def a(...) + a0(...) + end + def b(a,...) + assert_equal(a,1) + a0(1,...) + end + } + o = c.new + o.a(1,2,3){} + o.b(1,2,3){} +end + +assert('endless def') do + c = Class.new { + def m1 = 42 + def m2() = 42 + def m3(x) = x+1 + def self.s1 = 42 + def self.s2() = 42 + def self.s3(x) = x + 1 + def cm1 = m3 42 + def cm2() = m3 42 + def cm3(x) = m3 x+1 + def self.cs1 = s3 42 + def self.cs2() = s3 42 + def self.cs3(x) = s3 x + 1 + } + o = c.new + assert_equal(42, o.m1) + assert_equal(43, o.m3(o.m2)) + assert_equal(42, c.s1) + assert_equal(43, c.s3(c.s2)) + assert_equal(43, o.cm1) + assert_equal(45, o.cm3(o.cm2)) + assert_equal(43, c.cs1) + assert_equal(45, c.cs3(c.cs2)) end |
