describe "Fortitude doctype support", :type => :system do def wc(*args, &block) widget_class({ :superclass => Fortitude::Widget }.merge(args[-1] || { }), &block) end def wc_with_doctype(dt, *args, &block) out = wc(*args, &block) out.doctype(dt) out end def allows_dir?(doctype) widget_class = wc_with_doctype(doctype) widget_class.class_eval do def content dir do li "hi" end end end begin render(widget_class) true rescue NoMethodError => nme false end end it "should autoload specific widgets" do expect(Fortitude::Widgets::Html5).to be expect(Fortitude::Widgets::Html4Strict).to be expect(Fortitude::Widgets::Html4Transitional).to be expect(Fortitude::Widgets::Html4Frameset).to be expect(Fortitude::Widgets::Xhtml10Strict).to be expect(Fortitude::Widgets::Xhtml10Transitional).to be expect(Fortitude::Widgets::Xhtml10Frameset).to be expect(Fortitude::Widgets::Xhtml11).to be end before :all do @classes_by_doctype = { } end EXPECTED_RESULTS = { :html5 => { :allows_dir => false, :allows_background => false, :allows_frame => false, :closes_void_tags => false, :requires_close_void_tags_to_be => nil, :doctype_line => '', :javascript => :none, :true_value_has_attribute_value => false }, :html4_strict => { :allows_dir => false, :allows_background => false, :allows_frame => false, :closes_void_tags => false, :requires_close_void_tags_to_be => false, :doctype_line => '', :javascript => :type, :true_value_has_attribute_value => false }, :html4_transitional => { :allows_dir => true, :allows_background => true, :allows_frame => false, :closes_void_tags => false, :requires_close_void_tags_to_be => false, :doctype_line => '', :javascript => :type, :true_value_has_attribute_value => false }, :html4_frameset => { :allows_dir => true, :allows_background => true, :allows_frame => true, :closes_void_tags => false, :requires_close_void_tags_to_be => false, :doctype_line => '', :javascript => :type, :true_value_has_attribute_value => false }, :xhtml10_strict => { :allows_dir => false, :allows_background => false, :allows_frame => false, :closes_void_tags => true, :requires_close_void_tags_to_be => true, :doctype_line => '', :javascript => :type_and_cdata, :true_value_has_attribute_value => true }, :xhtml10_transitional => { :allows_dir => true, :allows_background => true, :allows_frame => false, :closes_void_tags => true, :requires_close_void_tags_to_be => true, :doctype_line => '', :javascript => :type_and_cdata, :true_value_has_attribute_value => true }, :xhtml10_frameset => { :allows_dir => true, :allows_background => true, :allows_frame => true, :closes_void_tags => true, :requires_close_void_tags_to_be => true, :doctype_line => '', :javascript => :type_and_cdata, :true_value_has_attribute_value => true }, :xhtml11 => { :allows_dir => false, :allows_background => false, :allows_frame => false, :closes_void_tags => true, :requires_close_void_tags_to_be => true, :doctype_line => '', :javascript => :type_and_cdata, :true_value_has_attribute_value => true } }.each do |doctype, expected_results| describe doctype do let(:the_widget_class) { @classes_by_doctype[doctype] ||= wc_with_doctype(doctype) } it "should #{expected_results[:true_value_has_attribute_value] ? "" : "not "}have an attribute value for attribute values of true" do the_widget_class.class_eval do def content p(:class => true) end end if expected_results[:true_value_has_attribute_value] expect(render(the_widget_class)).to eq("
") else expect(render(the_widget_class)).to eq("") end end it "should #{expected_results[:allows_dir] ? "" : "not "}allowhi
") else expect { render(the_widget_class) }.to raise_error(Fortitude::Errors::InvalidElementAttributes) end end it "should #{expected_results[:allows_frame] ? "" : "not "} allow " do the_widget_class.class_eval do def content frame :src => 'http://www.google.com/' end end if expected_results[:allows_frame] expect(render(the_widget_class)).to match(%r{}) else expect { render(the_widget_class) }.to raise_error(NoMethodError, /frame/i) end end it "should #{expected_results[:closes_void_tags] ? "": "not "}close void tags" do the_widget_class.class_eval do def content br end end if expected_results[:closes_void_tags] expect(render(the_widget_class)).to eq("