summaryrefslogtreecommitdiff
path: root/spec/ruby/language/assignments_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/language/assignments_spec.rb')
-rw-r--r--spec/ruby/language/assignments_spec.rb66
1 files changed, 63 insertions, 3 deletions
diff --git a/spec/ruby/language/assignments_spec.rb b/spec/ruby/language/assignments_spec.rb
index 4ad9f4167b..d621c9f0c6 100644
--- a/spec/ruby/language/assignments_spec.rb
+++ b/spec/ruby/language/assignments_spec.rb
@@ -36,7 +36,7 @@ describe 'Assignments' do
-> {
(:not_a_module)::A = (ScratchPad << :rhs; :value)
- }.should raise_error(TypeError)
+ }.should.raise(TypeError)
ScratchPad.recorded.should == [:rhs]
end
@@ -68,7 +68,35 @@ describe 'Assignments' do
-> {
eval "obj[:a, &block] = 2"
- }.should raise_error(SyntaxError, /unexpected block arg given in index assignment|block arg given in index assignment/)
+ }.should.raise(SyntaxError, /unexpected block arg given in index assignment|block arg given in index assignment/)
+ end
+ end
+ end
+
+ context "given keyword arguments" do
+ before do
+ @klass = Class.new do
+ attr_reader :x
+
+ def []=(*args, **kw)
+ @x = [args, kw]
+ end
+ end
+ end
+
+ ruby_version_is ""..."3.4" do
+ it "supports keyword arguments in index assignments" do
+ a = @klass.new
+ eval "a[1, 2, 3, b: 4] = 5"
+ a.x.should == [[1, 2, 3, {b: 4}, 5], {}]
+ end
+ end
+
+ ruby_version_is "3.4" do
+ it "raises SyntaxError when given keyword arguments in index assignments" do
+ a = @klass.new
+ -> { eval "a[1, 2, 3, b: 4] = 5" }.should.raise(SyntaxError,
+ /keywords are not allowed in index assignment expressions|keyword arg given in index assignment/) # prism|parse.y
end
end
end
@@ -171,7 +199,39 @@ describe 'Assignments' do
-> {
eval "obj[:a, &block] += 2"
- }.should raise_error(SyntaxError, /unexpected block arg given in index assignment|block arg given in index assignment/)
+ }.should.raise(SyntaxError, /unexpected block arg given in index assignment|block arg given in index assignment/)
+ end
+ end
+ end
+
+ context "given keyword arguments" do
+ before do
+ @klass = Class.new do
+ attr_reader :x
+
+ def [](*args)
+ 100
+ end
+
+ def []=(*args, **kw)
+ @x = [args, kw]
+ end
+ end
+ end
+
+ ruby_version_is ""..."3.4" do
+ it "supports keyword arguments in index assignments" do
+ a = @klass.new
+ eval "a[1, 2, 3, b: 4] += 5"
+ a.x.should == [[1, 2, 3, 105], {b: 4}]
+ end
+ end
+
+ ruby_version_is "3.4" do
+ it "raises SyntaxError when given keyword arguments in index assignments" do
+ a = @klass.new
+ -> { eval "a[1, 2, 3, b: 4] += 5" }.should.raise(SyntaxError,
+ /keywords are not allowed in index assignment expressions|keyword arg given in index assignment/) # prism|parse.y
end
end
end