From e0bdd54348514ff06df88a9bac88fa56058235a4 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Tue, 15 Dec 2020 14:14:13 +0900 Subject: Ripper: Refined error callbacks [Bug #17345] --- test/ripper/dummyparser.rb | 6 +++++- test/ripper/test_lexer.rb | 18 +++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) (limited to 'test/ripper') diff --git a/test/ripper/dummyparser.rb b/test/ripper/dummyparser.rb index ca36985893..fa834bd0f7 100644 --- a/test/ripper/dummyparser.rb +++ b/test/ripper/dummyparser.rb @@ -101,7 +101,11 @@ class DummyParser < Ripper Node.new('valias', a, b) end - def on_alias_error(a) + def on_assign_error(mesg = nil, a) + Node.new('assign_error', a) + end + + def on_alias_error(mesg = nil, a) Node.new('aliaserr', a) end diff --git a/test/ripper/test_lexer.rb b/test/ripper/test_lexer.rb index 05a70d3449..62ea98d1f8 100644 --- a/test/ripper/test_lexer.rb +++ b/test/ripper/test_lexer.rb @@ -147,18 +147,18 @@ class TestRipper::Lexer < Test::Unit::TestCase end BAD_CODE = { - parse_error: 'def req(true) end', - assign_error: 'begin; nil = 1; end', - alias_error: 'begin; alias $x $1; end', - class_name_error: 'class bad; end', - param_error: 'def req(@a) end', + 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]], } def test_raise_errors_keyword all_assertions do |all| - BAD_CODE.each do |err, code| + BAD_CODE.each do |err, (code, message)| all.for(err) do - assert_raise(SyntaxError) { Ripper.tokenize(code, raise_errors: true) } + assert_raise_with_message(SyntaxError, message) { Ripper.tokenize(code, raise_errors: true) } end end end @@ -166,7 +166,7 @@ class TestRipper::Lexer < Test::Unit::TestCase def test_tokenize_with_syntax_error all_assertions do |all| - BAD_CODE.each do |err, code| + BAD_CODE.each do |err, (code)| all.for(err) do assert_equal "end", Ripper.tokenize(code).last end @@ -176,7 +176,7 @@ class TestRipper::Lexer < Test::Unit::TestCase def test_lex_with_syntax_error all_assertions do |all| - BAD_CODE.each do |err, code| + BAD_CODE.each do |err, (code)| all.for(err) do assert_equal [[1, code.size-3], :on_kw, "end", state(:EXPR_END)], Ripper.lex(code).last end -- cgit v1.2.3