# frozen_string_literal: true require "spec_helper" module Roadie describe MarkupImprover do def improve(html) dom = Nokogiri::HTML.parse html MarkupImprover.new(dom, html).improve dom end describe "automatic doctype" do it "inserts a HTML5 doctype if no doctype is present" do expect(improve("").internal_subset.to_xml).to eq("") end it "does not insert duplicate doctypes" do html = improve("").to_html expect(html.scan("DOCTYPE").size).to eq(1) end it "leaves other doctypes alone" do dtd = "" html = "#{dtd}" expect(improve(html).internal_subset.to_xml.strip).to eq(dtd) end end describe "basic HTML structure" do it "inserts a element as the root" do expect(improve("")).to have_selector("html") expect(improve("

Hey!

")).to have_selector("html h1") expect(improve("").css("html").size).to eq(1) end it "inserts if not present" do expect(improve("")).to have_selector("html > head + body") expect(improve("")).to have_selector("html > head") expect(improve("Foo")).to have_selector("html > head") expect(improve("").css("head").size).to eq(1) end it "inserts if not present" do expect(improve("

Hey!

")).to have_selector("html > body > h1") expect(improve("

Hey!

")).to have_selector("html > body > h1") expect(improve("

Hey!

").css("body").size).to eq(1) end end describe "charset declaration" do it "is inserted if missing" do dom = improve("") expect(dom).to have_selector("head meta") meta = dom.at_css("head meta") expect(meta["http-equiv"]).to eq("Content-Type") expect(meta["content"]).to eq("text/html; charset=UTF-8") end it "is left alone when predefined" do expect(improve(<<-HTML).xpath("//meta")).to have(1).item HTML end end end end