File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,28 @@
6262
it "passes a single, multi-value Array" do
6363
@y.s([1, 2, 3], &lambda { |*a| a }).should == [[1, 2, 3]]
6464
end
65+
66+
it "raises an ArgumentError if too few arguments are passed" do
67+
lambda {
68+
@y.s(1, &lambda { |a,b| [a,b] })
69+
}.should raise_error(ArgumentError)
70+
end
71+
72+
ruby_bug "#12705", "2.4" do
73+
it "should not destructure an Array into multiple arguments" do
74+
lambda {
75+
@y.s([1, 2], &lambda { |a,b| [a,b] })
76+
}.should raise_error(ArgumentError)
77+
end
78+
end
79+
80+
ruby_version_is ""..."2.2" do # above is a regression since 2.2
81+
it "should not destructure an Array into multiple arguments" do
82+
lambda {
83+
@y.s([1, 2], &lambda { |a,b| [a,b] })
84+
}.should raise_error(ArgumentError)
85+
end
86+
end
6587
end
6688
end
6789

@@ -73,6 +95,22 @@
7395
it "passes the arguments to the block" do
7496
@y.m(1, 2, 3) { |*a| a }.should == [1, 2, 3]
7597
end
98+
99+
it "passes only the first argument if the block takes one parameter" do
100+
@y.m(1, 2, 3) { |a| a }.should == 1
101+
end
102+
103+
it "raises an ArgumentError if too many arguments are passed to a lambda" do
104+
lambda {
105+
@y.m(1, 2, 3, &lambda { |a| })
106+
}.should raise_error(ArgumentError)
107+
end
108+
109+
it "raises an ArgumentError if too few arguments are passed to a lambda" do
110+
lambda {
111+
@y.m(1, 2, 3, &lambda { |a,b,c,d| })
112+
}.should raise_error(ArgumentError)
113+
end
76114
end
77115

78116
describe "taking a single splatted argument" do

0 commit comments

Comments
 (0)