Skip to content

Commit 2a3686a

Browse files
eregonandrykonchin
authored andcommitted
Add specs for **nil parameter in methods/procs/lambdas
1 parent e6362f8 commit 2a3686a

3 files changed

Lines changed: 64 additions & 0 deletions

File tree

language/lambda_spec.rb

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,24 @@ def a; 1; end
286286
end
287287
end
288288
end
289+
290+
evaluate <<-ruby do
291+
@a = -> (**nil) { :ok }
292+
ruby
293+
294+
@a.call().should == :ok
295+
-> { @a.call(a: 1) }.should raise_error(ArgumentError, 'no keywords accepted')
296+
-> { @a.call(**{a: 1}) }.should raise_error(ArgumentError, 'no keywords accepted')
297+
-> { @a.call("a" => 1) }.should raise_error(ArgumentError, 'no keywords accepted')
298+
end
299+
300+
evaluate <<-ruby do
301+
@a = -> (a, **nil) { a }
302+
ruby
303+
304+
@a.call({a: 1}).should == {a: 1}
305+
-> { @a.call(a: 1) }.should raise_error(ArgumentError, 'no keywords accepted')
306+
end
289307
end
290308

291309
describe "A lambda expression 'lambda { ... }'" do
@@ -583,5 +601,23 @@ def m2() yield end
583601
result = @a.(1, 2, e: 3, g: 4, h: 5, i: 6, &(l = ->{}))
584602
result.should == [1, 1, [], 2, 3, 2, 4, { h: 5, i: 6 }, l]
585603
end
604+
605+
evaluate <<-ruby do
606+
@a = lambda { |**nil| :ok }
607+
ruby
608+
609+
@a.call().should == :ok
610+
-> { @a.call(a: 1) }.should raise_error(ArgumentError, 'no keywords accepted')
611+
-> { @a.call(**{a: 1}) }.should raise_error(ArgumentError, 'no keywords accepted')
612+
-> { @a.call("a" => 1) }.should raise_error(ArgumentError, 'no keywords accepted')
613+
end
614+
615+
evaluate <<-ruby do
616+
@a = lambda { |a, **nil| a }
617+
ruby
618+
619+
@a.call({a: 1}).should == {a: 1}
620+
-> { @a.call(a: 1) }.should raise_error(ArgumentError, 'no keywords accepted')
621+
end
586622
end
587623
end

language/method_spec.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,6 +1100,16 @@ def m(a, b=1, *c, d, e:, f: 2, g:, **k, &l)
11001100
result.should == [1, 1, [], 2, 3, 2, 4, { h: 5, i: 6 }, l]
11011101
end
11021102

1103+
evaluate <<-ruby do
1104+
def m(**nil); :ok; end;
1105+
ruby
1106+
1107+
m().should == :ok
1108+
-> { m(a: 1) }.should raise_error(ArgumentError, 'no keywords accepted')
1109+
-> { m(**{a: 1}) }.should raise_error(ArgumentError, 'no keywords accepted')
1110+
-> { m("a" => 1) }.should raise_error(ArgumentError, 'no keywords accepted')
1111+
end
1112+
11031113
evaluate <<-ruby do
11041114
def m(a, **nil); a end;
11051115
ruby

language/proc_spec.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,4 +246,22 @@
246246
-> { p.call() }.should raise_error(ArgumentError)
247247
end
248248
end
249+
250+
evaluate <<-ruby do
251+
@p = proc { |**nil| :ok }
252+
ruby
253+
254+
@p.call().should == :ok
255+
-> { @p.call(a: 1) }.should raise_error(ArgumentError, 'no keywords accepted')
256+
-> { @p.call(**{a: 1}) }.should raise_error(ArgumentError, 'no keywords accepted')
257+
-> { @p.call("a" => 1) }.should raise_error(ArgumentError, 'no keywords accepted')
258+
end
259+
260+
evaluate <<-ruby do
261+
@p = proc { |a, **nil| a }
262+
ruby
263+
264+
@p.call({a: 1}).should == {a: 1}
265+
-> { @p.call(a: 1) }.should raise_error(ArgumentError, 'no keywords accepted')
266+
end
249267
end

0 commit comments

Comments
 (0)