diff options
Diffstat (limited to 'test/t/syntax.rb')
| -rw-r--r-- | test/t/syntax.rb | 115 |
1 files changed, 85 insertions, 30 deletions
diff --git a/test/t/syntax.rb b/test/t/syntax.rb index b3ee2d438..a89432b68 100644 --- a/test/t/syntax.rb +++ b/test/t/syntax.rb @@ -48,7 +48,32 @@ assert('yield', '11.3.5') do end end -assert('redo in a for loop (#3275)') do +assert('break', '11.5.2.4.3') do + n = 0 + a = [] + while true + n += 1 + a.push(n) + if n > 3 + break + end + end + + assert_equal [1,2,3,4], a + + n = 0 + a = [] + 6.times do + n += 1 + a.push(n) + if n > 3 + break + end + end + assert_equal [1,2,3,4], a +end + +assert('redo', '11.5.2.4.5') do sum = 0 for i in 1..10 sum += i @@ -59,6 +84,17 @@ assert('redo in a for loop (#3275)') do end assert_equal 220, sum + + n = 0 + a = [] + 3.times do + n += 1 + if n == 2 + redo + end + a.push(n) + end + assert_equal [1,3,4], a end assert('Abbreviated variable assignment', '11.4.2.3.2') do @@ -188,6 +224,18 @@ assert('Abbreviated variable assignment as returns') do assert_equal 1, Syntax4AbbrVarAsgnAsReturns::A.new.b end +assert('Abbreviated variable assignment of object attribute') do + module Syntax4AbbrVarAsgnObjectAttr + class A + attr_accessor :c + def b + self.c ||= 1 + end + end + end + assert_equal 1, Syntax4AbbrVarAsgnObjectAttr::A.new.b +end + assert('Splat and multiple assignment') do *a = *[1,2,3] b, *c = *[7,8,9] @@ -504,8 +552,7 @@ assert 'keyword arguments' do assert_raise(ArgumentError) { m } assert_raise(ArgumentError) { m 'a' => 1, a: 1 } h = { a: 1 } - assert_equal 1, m(h) - assert_equal({ a: 1 }, h) + assert_equal 1, m(**h) def m(a: 1) a end assert_equal 1, m @@ -520,23 +567,23 @@ assert 'keyword arguments' do def m(a, **) a end assert_equal 1, m(1) assert_equal 1, m(1, a: 2, b: 3) - assert_equal({ 'a' => 1, b: 2 }, m('a' => 1, b: 2)) + assert_raise(ArgumentError) { m('a' => 1, b: 2) } def m(a, **k) [a, k] end assert_equal [1, {}], m(1) assert_equal [1, {a: 2, b: 3}], m(1, a: 2, b: 3) - assert_equal [{'a' => 1, b: 2}, {}], m('a' => 1, b: 2) + assert_raise(ArgumentError) { m('a' => 1, b: 2) } def m(a=1, **) a end assert_equal 1, m assert_equal 2, m(2, a: 1, b: 0) - assert_raise(ArgumentError) { m('a' => 1, a: 2) } def m(a=1, **k) [a, k] end assert_equal [1, {}], m assert_equal [1, {a: 1}], m(a: 1) assert_equal [2, {a: 1, b: 2}], m(2, a: 1, b: 2) - assert_equal [{a: 1}, {b: 2}], m({a: 1}, {b: 2}) + assert_equal [{a: 1}, {b: 2}], m({a: 1}, b: 2) + assert_raise(ArgumentError) { m({a: 1}, {b: 2}) } def m(*, a:) a end assert_equal 1, m(a: 1) @@ -561,34 +608,27 @@ assert 'keyword arguments' do def m(*a, **) a end assert_equal [], m() assert_equal [1, 2, 3], m(1, 2, 3, a: 4, b: 5) - assert_raise(ArgumentError) { m("a" => 1, a: 1) } assert_equal [1], m(1, **{a: 2}) def m(*, **k) k end assert_equal({}, m()) assert_equal({a: 4, b: 5}, m(1, 2, 3, a: 4, b: 5)) - assert_raise(ArgumentError) { m("a" => 1, a: 1) } def m(a = nil, b = nil, **k) [a, k] end assert_equal [nil, {}], m() assert_equal([nil, {a: 1}], m(a: 1)) - assert_raise(ArgumentError) { m("a" => 1, a: 1) } assert_equal([{"a" => 1}, {a: 1}], m({ "a" => 1 }, a: 1)) assert_equal([{a: 1}, {}], m({a: 1}, {})) - assert_equal([nil, {}], m({})) + assert_equal([{}, {}], m({})) def m(*a, **k) [a, k] end assert_equal([[], {}], m()) assert_equal([[1], {}], m(1)) assert_equal([[], {a: 1, b: 2}], m(a: 1, b: 2)) assert_equal([[1, 2, 3], {a: 2}], m(1, 2, 3, a: 2)) - assert_raise(ArgumentError) { m("a" => 1, a: 1) } - assert_raise(ArgumentError) { m("a" => 1) } assert_equal([[], {a: 1}], m(a: 1)) - assert_raise(ArgumentError) { m("a" => 1, a: 1) } assert_equal([[{"a" => 1}], {a: 1}], m({ "a" => 1 }, a: 1)) - assert_equal([[{a: 1}], {}], m({a: 1}, {})) - assert_raise(ArgumentError) { m({a: 1}, {"a" => 1}) } + assert_equal([[{a: 1}, {}], {}], m({a: 1}, {})) def m(a:, b:) [a, b] end assert_equal([1, 2], m(a: 1, b: 2)) @@ -597,23 +637,21 @@ assert 'keyword arguments' do def m(a:, b: 1) [a, b] end assert_equal([1, 1], m(a: 1)) assert_equal([1, 2], m(a: 1, b: 2)) + assert_raise(ArgumentError) { m(b: 1) } assert_raise(ArgumentError) { m("a" => 1, a: 1, b: 2) } def m(a:, **) a end assert_equal(1, m(a: 1)) assert_equal(1, m(a: 1, b: 2)) - assert_raise(ArgumentError) { m("a" => 1, a: 1, b: 2) } def m(a:, **k) [a, k] end assert_equal([1, {}], m(a: 1)) assert_equal([1, {b: 2, c: 3}], m(a: 1, b: 2, c: 3)) - assert_raise(ArgumentError) { m("a" => 1, a: 1, b: 2) } -=begin def m(a:, &b) [a, b] end assert_equal([1, nil], m(a: 1)) - assert_equal([1, l], m(a: 1, &(l = ->{}))) -=end + result = m(a: 1, &(l = ->{})) + assert_equal([1, l], result) def m(a: 1, b:) [a, b] end assert_equal([1, 0], m(b: 0)) @@ -651,21 +689,12 @@ assert 'keyword arguments' do assert_equal([{ a: 1, b: 2}, nil], m(a: 1, b: 2)) assert_equal :blk, m{ :blk }[1].call - def m(hsh = {}) hsh end - assert_equal({ a: 1, b: 2 }, m(a: 1, b: 2)) - assert_equal({ a: 1, 'b' => 2 }, m(a: 1, 'b' => 2)) - - def m(hsh) hsh end - assert_equal({ a: 1, b: 2 }, m(a: 1, b: 2)) - assert_equal({ a: 1, 'b' => 2 }, m(a: 1, 'b' => 2)) - =begin def m(a, b=1, *c, (*d, (e)), f: 2, g:, h:, **k, &l) [a, b, c, d, e, f, g, h, k, l] end result = m(9, 8, 7, 6, f: 5, g: 4, h: 3, &(l = ->{})) assert_equal([9, 8, [7], [], 6, 5, 4, 3, {}, l], result) - def m a, b=1, *c, d, e:, f: 2, g:, **k, &l [a, b, c, d, e, f, g, k, l] end @@ -706,3 +735,29 @@ assert('argument forwarding') do 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 |
