summaryrefslogtreecommitdiffhomepage
path: root/test/t/syntax.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/t/syntax.rb')
-rw-r--r--test/t/syntax.rb115
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