diff options
Diffstat (limited to 'test/prism/result/attribute_write_test.rb')
-rw-r--r-- | test/prism/result/attribute_write_test.rb | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/test/prism/result/attribute_write_test.rb b/test/prism/result/attribute_write_test.rb new file mode 100644 index 0000000000..8f2e352738 --- /dev/null +++ b/test/prism/result/attribute_write_test.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +require_relative "../test_helper" + +module Prism + class AttributeWriteTest < TestCase + module Target + def self.value + 2 + end + + def self.value=(value) + 2 + end + + def self.[]=(index, value) + 2 + end + end + + def test_named_call_with_operator + assert_attribute_write("Target.value = 1") + end + + def test_named_call_without_operator + assert_attribute_write("Target.value=(1)") + end + + def test_indexed_call_with_operator + assert_attribute_write("Target[0] = 1") + end + + def test_indexed_call_without_operator + refute_attribute_write("Target.[]=(0, 1)") + end + + def test_comparison_operators + refute_attribute_write("Target.value == 1") + refute_attribute_write("Target.value === 1") + end + + private + + def assert_attribute_write(source) + call = Prism.parse_statement(source) + assert(call.attribute_write?) + assert_equal(1, eval(source)) + end + + def refute_attribute_write(source) + call = Prism.parse_statement(source) + refute(call.attribute_write?) + refute_equal(1, eval(source)) + end + end +end |