diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index 684312bd40261..2ddfa9885f6b9 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -1,3 +1,10 @@ +* `ActionDispatch::Assertions#html_document` uses Nokogiri's HTML5 parser if it is available. + + The HTML5 parser better represents what the DOM would be in a browser. Previously this test + helper always used Nokogiri's HTML4 parser. + + *Mike Dalessio* + * The `with_routing` helper can now be called at the class level. When called at the class level, the routes will be setup before each test, and reset after every test. For example: diff --git a/actionpack/lib/action_dispatch/testing/assertions.rb b/actionpack/lib/action_dispatch/testing/assertions.rb index cf4e7461b041b..a988876742c51 100644 --- a/actionpack/lib/action_dispatch/testing/assertions.rb +++ b/actionpack/lib/action_dispatch/testing/assertions.rb @@ -15,8 +15,10 @@ module Assertions def html_document @html_document ||= if @response.media_type&.end_with?("xml") Nokogiri::XML::Document.parse(@response.body) + elsif defined?(Nokogiri::HTML5) + Nokogiri::HTML5::Document.parse(@response.body) else - Nokogiri::HTML::Document.parse(@response.body) + Nokogiri::HTML4::Document.parse(@response.body) end end end diff --git a/actionview/lib/action_view/test_case.rb b/actionview/lib/action_view/test_case.rb index d7f6199427516..59d9307a9c60f 100644 --- a/actionview/lib/action_view/test_case.rb +++ b/actionview/lib/action_view/test_case.rb @@ -177,9 +177,17 @@ def _test_case end private + def html_document_class + defined?(Nokogiri::HTML5) ? Nokogiri::HTML5::Document : Nokogiri::HTML4::Document + end + + def html_document_fragment_class + defined?(Nokogiri::HTML5) ? Nokogiri::HTML5::DocumentFragment : Nokogiri::HTML4::DocumentFragment + end + # Need to experiment if this priority is the best one: rendered => output_buffer def document_root_element - Nokogiri::HTML::Document.parse(@rendered.blank? ? @output_buffer.to_str : @rendered).root + html_document_class.parse(@rendered.blank? ? @output_buffer.to_str : @rendered).root end module Locals diff --git a/actionview/test/template/form_tag_helper_test.rb b/actionview/test/template/form_tag_helper_test.rb index 1eb868ff17fb4..cc0513c1a11be 100644 --- a/actionview/test/template/form_tag_helper_test.rb +++ b/actionview/test/template/form_tag_helper_test.rb @@ -986,7 +986,7 @@ def protect_against_forgery? private def root_elem(rendered_content) - Nokogiri::HTML::DocumentFragment.parse(rendered_content).children.first # extract from nodeset + html_document_fragment_class.parse(rendered_content).children.first # extract from nodeset end def with_default_enforce_utf8(value)