зеркало из https://github.com/github/ruby.git
[ruby/rexml] Message less confusing error to human (#16)
* Message less confusing error to human * Problem: Following error message is not helpful, because you have to reason that '' actually means it's in the top-level, and the 'div' (not '</div>') is an end tag require "rexml/parsers/lightparser" REXML::Parsers::LightParser.new('</div>').parse #=> Missing end tag for '' (got 'div') * Solution: add a special case in error handling just to change the error message require "rexml/parsers/lightparser" REXML::Parsers::LightParser.new('</div>').parse #=> Unexpected top-level end tag (got 'div') * Refactor by removing unnecessary `md` check * Thanks @a_matsuda to review this at asakusa.rb! https://github.com/ruby/rexml/commit/f6528d4477
This commit is contained in:
Родитель
33e4a59b4a
Коммит
f85caf40a6
|
@ -335,6 +335,10 @@ module REXML
|
|||
@nsstack.shift
|
||||
last_tag = @tags.pop
|
||||
md = @source.match( CLOSE_MATCH, true )
|
||||
if md and !last_tag
|
||||
message = "Unexpected top-level end tag (got '#{md[1]}')"
|
||||
raise REXML::ParseException.new(message, @source)
|
||||
end
|
||||
if md.nil? or last_tag != md[1]
|
||||
message = "Missing end tag for '#{last_tag}'"
|
||||
message << " (got '#{md[1]}')" if md
|
||||
|
|
|
@ -8,6 +8,19 @@ module REXMLTests
|
|||
end
|
||||
|
||||
class TestInvalid < self
|
||||
def test_top_level_end_tag
|
||||
exception = assert_raise(REXML::ParseException) do
|
||||
parse("</a>")
|
||||
end
|
||||
assert_equal(<<-DETAIL.chomp, exception.to_s)
|
||||
Unexpected top-level end tag (got 'a')
|
||||
Line: 1
|
||||
Position: 4
|
||||
Last 80 unconsumed characters:
|
||||
|
||||
DETAIL
|
||||
end
|
||||
|
||||
def test_no_end_tag
|
||||
exception = assert_raise(REXML::ParseException) do
|
||||
parse("<a></")
|
||||
|
|
Загрузка…
Ссылка в новой задаче