Skip to content

Commit 3a68f13

Browse files
vshabanytsiaandrykonchin
authored andcommitted
Add specs for SyntaxError raised when index assignment with block argument
1 parent c61aea4 commit 3a68f13

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

language/assignments_spec.rb

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,37 @@ def object.[]=(_, _) end
4141
ScratchPad.recorded.should == [:rhs]
4242
end
4343
end
44+
45+
context "given block argument" do
46+
before do
47+
@klass = Class.new do
48+
def initialize(h) @h = h end
49+
def [](k, &block) @h[k]; end
50+
def []=(k, v, &block) @h[k] = v; end
51+
end
52+
end
53+
54+
ruby_version_is ""..."3.4" do
55+
it "accepts block argument" do
56+
obj = @klass.new(a: 1)
57+
block = proc {}
58+
59+
eval "obj[:a, &block] = 2"
60+
eval("obj[:a, &block]").should == 2
61+
end
62+
end
63+
64+
ruby_version_is "3.4" do
65+
it "raises SyntaxError" do
66+
obj = @klass.new(a: 1)
67+
block = proc {}
68+
69+
-> {
70+
eval "obj[:a, &block] = 2"
71+
}.should raise_error(SyntaxError, /unexpected block arg given in index assignment|block arg given in index assignment/)
72+
end
73+
end
74+
end
4475
end
4576

4677
describe 'using +=' do
@@ -114,6 +145,37 @@ def []=(k, v) @a[k] = v; 42 end
114145
a.public_method(:k, 2).should == 2
115146
end
116147

148+
context "given block argument" do
149+
before do
150+
@klass = Class.new do
151+
def initialize(h) @h = h end
152+
def [](k, &block) @h[k]; end
153+
def []=(k, v, &block) @h[k] = v; end
154+
end
155+
end
156+
157+
ruby_version_is ""..."3.4" do
158+
it "accepts block argument" do
159+
obj = @klass.new(a: 1)
160+
block = proc {}
161+
162+
eval "obj[:a, &block] += 2"
163+
eval("obj[:a, &block]").should == 3
164+
end
165+
end
166+
167+
ruby_version_is "3.4" do
168+
it "raises SyntaxError" do
169+
obj = @klass.new(a: 1)
170+
block = proc {}
171+
172+
-> {
173+
eval "obj[:a, &block] += 2"
174+
}.should raise_error(SyntaxError, /unexpected block arg given in index assignment|block arg given in index assignment/)
175+
end
176+
end
177+
end
178+
117179
context 'splatted argument' do
118180
it 'correctly handles it' do
119181
@b[:m] = 10

0 commit comments

Comments
 (0)