summaryrefslogtreecommitdiff
path: root/test/ruby
diff options
context:
space:
mode:
authorJemma Issroff <jemmaissroff@gmail.com>2023-12-14 16:44:38 -0500
committerJemma Issroff <jemmaissroff@gmail.com>2023-12-14 17:11:54 -0500
commit5587bd4b37cc01227ce5546b3350033bb1ef9775 (patch)
treeecc7135e9e9cc4e2d47f2c83ceba887fa2261570 /test/ruby
parent39c072d6f7846a99f64e52090a320576715325c5 (diff)
[PRISM] Implement safe navigation in CallNodes
This commit implements safe navigation for CallNodes, CallAndWriteNodes and CallOperatorWriteNodes
Diffstat (limited to 'test/ruby')
-rw-r--r--test/ruby/test_compile_prism.rb46
1 files changed, 46 insertions, 0 deletions
diff --git a/test/ruby/test_compile_prism.rb b/test/ruby/test_compile_prism.rb
index 6b16205869..fc563951f6 100644
--- a/test/ruby/test_compile_prism.rb
+++ b/test/ruby/test_compile_prism.rb
@@ -1470,6 +1470,16 @@ module Prism
pm = PrivateMethod.new
pm.send(:instance_var)
CODE
+
+ # Testing safe navigation operator
+ assert_prism_eval(<<-CODE)
+ def self.test_prism_call_node
+ if [][0]&.first
+ 1
+ end
+ end
+ test_prism_call_node
+ CODE
end
def test_CallAndWriteNode
@@ -1507,6 +1517,24 @@ module Prism
self.test_call_and_write_node &&= 1
CODE
)
+
+ assert_prism_eval(<<-CODE)
+ def self.test_prism_call_node; end
+ def self.test_prism_call_node=(val)
+ val
+ end
+ self&.test_prism_call_node &&= 1
+ CODE
+
+ assert_prism_eval(<<-CODE)
+ def self.test_prism_call_node
+ 2
+ end
+ def self.test_prism_call_node=(val)
+ val
+ end
+ self&.test_prism_call_node &&= 1
+ CODE
end
def test_CallOrWriteNode
@@ -1544,6 +1572,24 @@ module Prism
self.test_call_or_write_node ||= 1
CODE
)
+
+ assert_prism_eval(<<-CODE)
+ def self.test_prism_call_node
+ 2
+ end
+ def self.test_prism_call_node=(val)
+ val
+ end
+ self&.test_prism_call_node ||= 1
+ CODE
+
+ assert_prism_eval(<<-CODE)
+ def self.test_prism_call_node; end
+ def self.test_prism_call_node=(val)
+ val
+ end
+ self&.test_prism_call_node ||= 1
+ CODE
end
def test_CallOperatorWriteNode