2019-04-29 20:27:42 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2013-04-09 23:27:33 -04:00
|
|
|
require 'nokogiri/xml/parse_options'
|
|
|
|
RSpec::Matchers.define :match_html do |expected|
|
|
|
|
match do |actual|
|
2013-10-04 12:49:39 -04:00
|
|
|
a = make_canonical_html(expected).to_html.gsub(/\s+/, " ").strip
|
|
|
|
b = make_canonical_html(actual).to_html.gsub(/\s+/, " ").strip
|
|
|
|
a.eql? b
|
2013-04-09 23:27:33 -04:00
|
|
|
end
|
|
|
|
|
2015-04-25 11:47:20 -04:00
|
|
|
failure_message do |actual|
|
2013-06-13 05:09:11 -04:00
|
|
|
"after sanitizing for extra white space and compactness, expected:\n#{actual}\n to match:\n#{expected}"
|
2013-04-09 23:27:33 -04:00
|
|
|
end
|
|
|
|
|
2015-04-25 11:47:20 -04:00
|
|
|
failure_message_when_negated do |actual|
|
2013-06-13 05:09:11 -04:00
|
|
|
"after sanitizing for extra white space and compactness, expected:\n#{actual}\n not to match:\n#{expected}"
|
2013-04-09 23:27:33 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def make_canonical_html(html)
|
2020-05-04 23:46:57 -04:00
|
|
|
Nokogiri::HTML5(html) { |config| config[:options] = Nokogiri::XML::ParseOptions::NOBLANKS | Nokogiri::XML::ParseOptions::COMPACT }
|
2013-04-09 23:27:33 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|