require File.expand_path(File.dirname(__FILE__) + "/../spec_helper") describe Markaby do it "can assign helpers after instantiation" do helper = mock 'helper', :foo => :bar builder = Markaby::Builder.new builder.helper = helper builder.foo.should == :bar end it "should be able to set a local" do builder = Markaby::Builder.new builder.locals = { :foo => "bar" } builder.foo.should == "bar" end it "should be able to set a different local value" do builder = Markaby::Builder.new builder.locals = { :foo => "baz" } builder.foo.should == "baz" end it "should assign the correct key" do builder = Markaby::Builder.new builder.locals = { :key => :value } builder.key.should == :value end it "should be able to assign multiple locals" do builder = Markaby::Builder.new builder.locals = { :one => "two", :three => "four" } builder.one.should == "two" builder.three.should == "four" end def test_builder_bang_methods assert_equal "", mab { instruct! } end it "should be able to produce the correct html from a fragment" do str = "" str += "
" str += "

Monkeys

" str += "

Giraffes Miniature and Large

" str += "

Donkeys

" str += "

Parakeet Innocent IV in Classic Chartreuse

" str += "
" generated = mab { div { h1 "Monkeys" h2 { "Giraffes #{small('Miniature')} and #{strong 'Large'}" } h3 "Donkeys" h4 { "Parakeet #{b { i 'Innocent IV' }} in Classic Chartreuse" } } } generated.should == str end def test_fragments assert_equal %{

Monkeys

Giraffes Miniature

Donkeys

}, mab { div { h1 "Monkeys"; h2 { "Giraffes #{strong 'Miniature' }" }; h3 "Donkeys" } } assert_equal %{

Monkeys

Giraffes Miniature and Large

Donkeys

Parakeet Large as well...

}, mab { div { @a = small 'Miniature'; @b = strong 'Large'; h1 "Monkeys"; h2 { "Giraffes #{@a} and #{@b}" }; h3 "Donkeys"; h4 { "Parakeet #{@b} as well..." } } } end def test_invalid_xhtml assert_exception(NoMethodError, "undefined method `dav'") { dav {} } assert_exception(Markaby::InvalidXhtmlError, "no attribute `styl' on div elements") { div(:styl => 'ok') {} } assert_exception(Markaby::InvalidXhtmlError, "no attribute `class' on tbody elements") { tbody.okay {} } end def test_full_doc_transitional doc = mab { xhtml_transitional { head { title 'OKay' } } } assert doc =~ /^<\?xml version="1.0" encoding="UTF-8"\?>/ assert doc.include?(%{"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">}) assert doc.include?(%{OKay}) end def test_full_doc_strict doc = mab { xhtml_strict { head { title 'OKay' } } } assert doc =~ /^<\?xml version="1.0" encoding="UTF-8"\?>/ assert doc.include?(%{"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">}) assert doc.include?(%{OKay}) end def test_full_doc_frameset doc = mab { xhtml_frameset { head { title 'OKay' } } } assert doc =~ /^<\?xml version="1.0" encoding="UTF-8"\?>/ assert doc.include?(%{"-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">}) assert doc.include?(%{OKay}) end def test_root_attributes_can_be_changed doc = mab { xhtml_strict(:lang => 'fr') { head { title { 'Salut!' } } } } assert doc.include?(%{"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">}) assert doc.include?(%{Salut!}) assert doc.include?(%{ lang="fr"}) end def version_file File.expand_path(File.dirname(__FILE__) + "/../../VERSION") end def test_markaby_should_have_correct_version assert_equal Markaby::VERSION, File.read(version_file).strip end def test_duplicate_usage_of_same_id assert_raises Markaby::InvalidXhtmlError do mab do p.one! p.one! end end end # auto validation def test_tagging_with_invalid_tag_should_raise_error assert_raises Markaby::InvalidXhtmlError do mab do tag! :an_invalid_tag end end end def test_self_closing_html_tag_with_block_throws_errors assert_raises Markaby::InvalidXhtmlError do mab do html_tag :img do end end end end def test_local_assigning builder = Markaby::Builder.new(:variable => :a_value) assert_equal :a_value, builder.variable end def test_local_assignment_with_strings builder = Markaby::Builder.new("variable" => :a_value) assert_equal :a_value, builder.variable end def test_local_assignment_prefers_symbols_to_strings builder = Markaby::Builder.new("variable" => "string_value", :variable => :symbol_value) assert_equal :symbol_value, builder.variable end def test_method_missing_should_call_tag_if_no_tagset_present Markaby::Builder.set(:tagset, nil) builder = Markaby::Builder.new builder.something.should == "" end it "should copy instance variables from a helper object" do klass = Class.new do def initialize @hello = "hello there" end end builder = Markaby::Builder.new({}, klass.new) builder.capture { @hello }.should == "hello there" end describe Markaby::InvalidXhtmlError do it "should inherit from StandardError" do Markaby::InvalidXhtmlError.superclass.should == StandardError end end end