summaryrefslogtreecommitdiff
path: root/test/ripper
diff options
context:
space:
mode:
authorNobuhiro IMAI <nov@yo.rim.or.jp>2020-12-19 01:31:12 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2020-12-19 17:32:39 +0900
commite33eb09b76e9070fd49837e8b896319636501b38 (patch)
treec677c09711635a4c9e9d40e9de77f509ba519633 /test/ripper
parent52b1716c78a7ad9daa317e3eb43f744744b9f736 (diff)
ripper: fix `#tok` on some error events [Bug 17345]
sorting alias target by event arity, and setup suitable `Elem` for error.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3936
Diffstat (limited to 'test/ripper')
-rw-r--r--test/ripper/test_lexer.rb31
1 files changed, 26 insertions, 5 deletions
diff --git a/test/ripper/test_lexer.rb b/test/ripper/test_lexer.rb
index 62ea98d1f8..910048b28c 100644
--- a/test/ripper/test_lexer.rb
+++ b/test/ripper/test_lexer.rb
@@ -147,11 +147,11 @@ class TestRipper::Lexer < Test::Unit::TestCase
end
BAD_CODE = {
- parse_error: ['def req(true) end', %r[unexpected `true']],
- assign_error: ['begin; nil = 1; end', %r[assign to nil]],
- alias_error: ['begin; alias $x $1; end', %r[number variables]],
- class_name_error: ['class bad; end', %r[class/module name]],
- param_error: ['def req(@a) end', %r[formal argument.*instance]],
+ parse_error: ['def req(true) end', %r[unexpected `true'], 'true'],
+ assign_error: ['begin; nil = 1; end', %r[assign to nil], 'nil'],
+ alias_error: ['begin; alias $x $1; end', %r[number variables], '$1'],
+ class_name_error: ['class bad; end', %r[class/module name], 'bad'],
+ param_error: ['def req(@a) end', %r[formal argument.*instance], '@a'],
}
def test_raise_errors_keyword
@@ -183,4 +183,25 @@ class TestRipper::Lexer < Test::Unit::TestCase
end
end
end
+
+ def test_lexer_scan_with_syntax_error
+ all_assertions do |all|
+ BAD_CODE.each do |err, (code, message, token)|
+ all.for(err) do
+ lexer = Ripper::Lexer.new(code)
+ elems = lexer.scan
+ assert_predicate lexer, :error?
+ error = lexer.errors.first
+ assert_match message, error.message
+ i = elems.find_index{|e| e == error}
+ assert_operator 0...elems.size, :include?, i
+ elem = elems[i + 1]
+ assert_not_equal error.event, elem.event
+ assert_equal error.pos, elem.pos
+ assert_equal error.tok, elem.tok
+ assert_equal error.state, elem.state
+ end
+ end
+ end
+ end
end