summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/prism/errors_test.rb48
1 files changed, 48 insertions, 0 deletions
diff --git a/test/prism/errors_test.rb b/test/prism/errors_test.rb
index 6297548668..bc3f3ebee9 100644
--- a/test/prism/errors_test.rb
+++ b/test/prism/errors_test.rb
@@ -1722,6 +1722,54 @@ module Prism
]
end
+ def test_statement_operators
+ source = <<~RUBY
+ alias x y + 1
+ alias x y.z
+ BEGIN { bar } + 1
+ BEGIN { bar }.z
+ END { bar } + 1
+ END { bar }.z
+ undef x + 1
+ undef x.z
+ RUBY
+ message1 = 'Expected a newline or semicolon after the statement'
+ message2 = 'Cannot parse the expression'
+ assert_errors expression(source), source, [
+ [message1, 9..9],
+ [message2, 9..9],
+ [message1, 23..23],
+ [message2, 23..23],
+ [message1, 39..39],
+ [message2, 39..39],
+ [message1, 57..57],
+ [message2, 57..57],
+ [message1, 71..71],
+ [message2, 71..71],
+ [message1, 87..87],
+ [message2, 87..87],
+ [message1, 97..97],
+ [message2, 97..97],
+ [message1, 109..109],
+ [message2, 109..109],
+ ]
+ end
+
+ def test_statement_at_non_statement
+ source = <<~RUBY
+ foo(alias x y)
+ foo(BEGIN { bar })
+ foo(END { bar })
+ foo(undef x)
+ RUBY
+ assert_errors expression(source), source, [
+ ['Unexpected an `alias` at a non-statement position', 4..9],
+ ['Unexpected a `BEGIN` at a non-statement position', 19..24],
+ ['Unexpected an `END` at a non-statement position', 38..41],
+ ['Unexpected an `undef` at a non-statement position', 55..60],
+ ]
+ end
+
private
def assert_errors(expected, source, errors, compare_ripper: RUBY_ENGINE == "ruby")