require 'nokogiri/xml/parse_options'
RSpec::Matchers.define :match_html do |expected|
  match do |actual|
    a = make_canonical_html(expected).to_html.gsub(/\s+/, " ").strip
    b = make_canonical_html(actual).to_html.gsub(/\s+/, " ").strip
    a.eql? b
  end

  failure_message_for_should do |actual|
    "after sanitizing for extra white space and compactness, expected:\n#{actual}\n to match:\n#{expected}"
  end

  failure_message_for_should_not do |actual|
    "after sanitizing for extra white space and compactness, expected:\n#{actual}\n not to match:\n#{expected}"
  end

  def make_canonical_html(html)
    Nokogiri::HTML(html) { |config| config.options = Nokogiri::XML::ParseOptions::NOBLANKS | Nokogiri::XML::ParseOptions::COMPACT }
  end

end