markaby 0.5 → 0.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/CHANGELOG.rdoc +79 -0
- data/Markaby.gemspec +103 -0
- data/{README → README.rdoc} +14 -6
- data/Rakefile +71 -14
- data/VERSION +1 -0
- data/garlic.rb +29 -0
- data/init.rb +6 -0
- data/lib/markaby.rb +4 -9
- data/lib/markaby/builder.rb +156 -143
- data/lib/markaby/builder_tags.rb +64 -0
- data/lib/markaby/cssproxy.rb +36 -34
- data/lib/markaby/kernel_method.rb +7 -0
- data/lib/markaby/rails.rb +64 -39
- data/lib/markaby/rails/current.rb +46 -0
- data/lib/markaby/rails/deprecated.rb +124 -0
- data/lib/markaby/rails/rails_builder.rb +50 -0
- data/lib/markaby/tags.rb +158 -130
- data/lib/markaby/tilt.rb +21 -0
- data/spec/markaby/builder_spec.rb +118 -0
- data/spec/markaby/css_proxy_spec.rb +47 -0
- data/spec/markaby/fragment_spec.rb +10 -0
- data/spec/markaby/markaby_other_static.mab +1 -0
- data/spec/markaby/markaby_spec.rb +232 -0
- data/spec/markaby/rails/spec_helper.rb +21 -0
- data/spec/markaby/rails/views/markaby/_a_partial.mab +3 -0
- data/spec/markaby/rails/views/markaby/_partial_child_with_locals.mab +1 -0
- data/spec/markaby/rails/views/markaby/access_to_helpers.mab +1 -0
- data/spec/markaby/rails/views/markaby/broken.mab +7 -0
- data/spec/markaby/rails/views/markaby/correct_template_values.mab +5 -0
- data/spec/markaby/rails/views/markaby/form_for.mab +2 -0
- data/spec/markaby/rails/views/markaby/form_for_with_fields.mab +3 -0
- data/spec/markaby/rails/views/markaby/form_for_with_multiple_fields.mab +4 -0
- data/spec/markaby/rails/views/markaby/no_values_passed.mab +3 -0
- data/spec/markaby/rails/views/markaby/partial_parent.mab +1 -0
- data/spec/markaby/rails/views/markaby/partial_parent_with_locals.mab +7 -0
- data/spec/markaby/rails/views/markaby/render_erb_without_explicit_render_call.erb +1 -0
- data/spec/markaby/rails/views/markaby/render_explicit_but_empty_markaby_layout.mab +0 -0
- data/spec/markaby/rails/views/markaby/render_mab_without_explicit_render_call.mab +3 -0
- data/spec/markaby/rails/views/markaby/render_with_ivar.mab +3 -0
- data/spec/markaby/rails/views/markaby/renders_erb.rhtml +1 -0
- data/spec/markaby/rails_spec.rb +249 -0
- data/spec/markaby/rails_version_spec.rb +37 -0
- data/spec/markaby/tilt/erb.erb +1 -0
- data/spec/markaby/tilt/locals.mab +1 -0
- data/spec/markaby/tilt/markaby.mab +1 -0
- data/spec/markaby/tilt/markaby_other_static.mab +1 -0
- data/spec/markaby/tilt/render_twice.mab +1 -0
- data/spec/markaby/tilt/scope.mab +1 -0
- data/spec/markaby/tilt/yielding.mab +2 -0
- data/spec/markaby/tilt_spec.rb +86 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +39 -0
- metadata +132 -52
- data/lib/markaby/metaid.rb +0 -16
- data/lib/markaby/template.rb +0 -12
- data/setup.rb +0 -1551
- data/test/test_markaby.rb +0 -109
- data/tools/rakehelp.rb +0 -106
| @@ -0,0 +1,47 @@ | |
| 1 | 
            +
            require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class CssProxyTest < Test::Unit::TestCase
         | 
| 4 | 
            +
              it "should have method_missing as private" do
         | 
| 5 | 
            +
                methods = Markaby::CssProxy.private_instance_methods.dup
         | 
| 6 | 
            +
                methods.map! { |m| m.to_sym }
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                methods.should include(:method_missing)
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              def mock_builder
         | 
| 12 | 
            +
                mock_builder = Class.new do
         | 
| 13 | 
            +
                  def tag!(*args); end
         | 
| 14 | 
            +
                end.new
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              def test_responds_to_everything
         | 
| 18 | 
            +
                proxy = Markaby::CssProxy.new(mock_builder, 'stream', :sym)
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                assert proxy.respond_to?(:any_method)
         | 
| 21 | 
            +
                assert proxy.respond_to?(:foobarbazasdfasdfadfs)
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              def test_does_not_respond_to_method_missing
         | 
| 25 | 
            +
                proxy = Markaby::CssProxy.new(mock_builder, 'stream', :sym)
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                assert !proxy.respond_to?(:method_missing)
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              def test_does_respond_to_private_instance_methods_with_private_flag_set_to_true
         | 
| 31 | 
            +
                proxy = Markaby::CssProxy.new(mock_builder, 'stream', :sym)
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                assert proxy.respond_to?(:method_missing, true)
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              def test_does_not_respond_to_private_instance_methods_with_private_flag_set_to_false
         | 
| 37 | 
            +
                proxy = Markaby::CssProxy.new(mock_builder, 'stream', :sym)
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                assert !proxy.respond_to?(:method_missing, false)
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              def test_respond_to_should_always_return_boolean
         | 
| 43 | 
            +
                proxy = Markaby::CssProxy.new(mock_builder, 'stream', :sym)
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                assert_equal proxy.respond_to?(:method_missing, :a_value), true
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
            end
         | 
| @@ -0,0 +1,10 @@ | |
| 1 | 
            +
            require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class FragmentTest < Test::Unit::TestCase
         | 
| 4 | 
            +
              it "should have method_missing as a private instance method" do
         | 
| 5 | 
            +
                private_methods = Markaby::Fragment.private_instance_methods.dup
         | 
| 6 | 
            +
                private_methods.map! { |m| m.to_sym }
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                private_methods.should include(:method_missing)
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
            end
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            text "_why?"
         | 
| @@ -0,0 +1,232 @@ | |
| 1 | 
            +
            require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class MarkabyTest < Test::Unit::TestCase
         | 
| 4 | 
            +
              def teardown
         | 
| 5 | 
            +
                Markaby::Builder.restore_defaults!
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              def test_simple
         | 
| 9 | 
            +
                assert_equal "<hr/>", mab { hr }
         | 
| 10 | 
            +
                assert_equal "<hr/><br/>", mab { hr; br }
         | 
| 11 | 
            +
                assert_equal "<p>foo</p>", mab { p 'foo' }
         | 
| 12 | 
            +
                assert_equal "<p>foo</p>", mab { p { 'foo' } }
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              def test_classes_and_ids
         | 
| 16 | 
            +
                assert_equal %{<div class="one"></div>},     mab { div.one '' }
         | 
| 17 | 
            +
                assert_equal %{<div class="one two"></div>}, mab { div.one.two '' }
         | 
| 18 | 
            +
                assert_equal %{<div id="three"></div>},      mab { div.three! '' }
         | 
| 19 | 
            +
                assert_equal %{<hr class="hidden"/>},        mab { hr.hidden }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                out = mab { input.foo :id => 'bar' }
         | 
| 22 | 
            +
                out.should match("<input.*class=\"foo\".*/>")
         | 
| 23 | 
            +
                out.should match("<input.*name=\"bar\".*/>")
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              def test_escaping
         | 
| 27 | 
            +
                assert_equal "<h1>Apples & Oranges</h1>", mab { h1 'Apples & Oranges' }
         | 
| 28 | 
            +
                assert_equal "<h1>Apples & Oranges</h1>", mab { h1 { 'Apples & Oranges' } }
         | 
| 29 | 
            +
                assert_equal "<h1 class=\"fruits&floots\">Apples</h1>", mab { h1 'Apples', :class => 'fruits&floots' }
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              def test_capture
         | 
| 33 | 
            +
                builder = Markaby::Builder.new
         | 
| 34 | 
            +
                assert builder.to_s.empty?
         | 
| 35 | 
            +
                assert_equal "<h1>TEST</h1>", builder.capture { h1 'TEST' }
         | 
| 36 | 
            +
                assert builder.to_s.empty?
         | 
| 37 | 
            +
                assert mab { capture { h1 'hello world' }; nil }.empty?
         | 
| 38 | 
            +
                assert_equal mab { div { h1 'TEST' } }, mab { div { capture { h1 'TEST' } } }
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              def test_ivars
         | 
| 42 | 
            +
                html = "<div><h1>Steve</h1><div><h2>Gerald</h2></div><h3>Gerald</h3></div>"
         | 
| 43 | 
            +
                assert_equal html, mab { div { @name = 'Steve'; h1 @name; div { @name = 'Gerald'; h2 @name }; h3 @name } }
         | 
| 44 | 
            +
                assert_equal html, mab { div { @name = 'Steve'; h1 @name; self << capture { div { @name = 'Gerald'; h2 @name } }; h3 @name } }
         | 
| 45 | 
            +
                assert_equal html, mab(:name => 'Steve') { div { h1 @name; self << capture { div { @name = 'Gerald'; h2 @name } }; h3 @name } }
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              def test_ivars_without_at_symbol
         | 
| 49 | 
            +
                assert_equal "<h1>Hello World</h1>", mab { @message = 'Hello World'; h1 message }
         | 
| 50 | 
            +
              end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
              def spec_helpers
         | 
| 53 | 
            +
                Markaby::Builder.ignored_helpers.clear
         | 
| 54 | 
            +
                assert_equal %{squirrels}, mab({}, MarkabyTestHelpers) { pluralize('squirrel') }
         | 
| 55 | 
            +
                assert_equal %{<a href="">edit</a>}, mab({}, MarkabyTestHelpers) { link_to('edit') }
         | 
| 56 | 
            +
                assert mab({}, MarkabyTestHelpers) { @output_helpers = false; link_to('edit'); nil }.empty?
         | 
| 57 | 
            +
                Markaby::Builder.ignore_helpers :pluralize
         | 
| 58 | 
            +
                assert_exception(NoMethodError, "undefined method `pluralize'", {}, MarkabyTestHelpers) { pluralize('squirrel') }
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
              def test_uses_helper_instance_variable
         | 
| 62 | 
            +
                helper = Module.new do
         | 
| 63 | 
            +
                  @some_ivar = :ivar_value
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                builder = Markaby::Builder.new({}, helper)
         | 
| 67 | 
            +
                assert_equal :ivar_value, builder.some_ivar
         | 
| 68 | 
            +
              end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
              it "can assign helpers after instantiation" do
         | 
| 71 | 
            +
                helper = mock 'helper', :foo => :bar
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                builder = Markaby::Builder.new
         | 
| 74 | 
            +
                builder.helper = helper
         | 
| 75 | 
            +
                assert_equal :bar, builder.foo
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
              it "should be able to set a local" do
         | 
| 79 | 
            +
                builder = Markaby::Builder.new
         | 
| 80 | 
            +
                builder.locals = { :foo => "bar" }
         | 
| 81 | 
            +
                builder.foo.should == "bar"
         | 
| 82 | 
            +
              end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
              it "should be able to set a different local value" do
         | 
| 85 | 
            +
                builder = Markaby::Builder.new
         | 
| 86 | 
            +
                builder.locals = { :foo => "baz" }
         | 
| 87 | 
            +
                builder.foo.should == "baz"
         | 
| 88 | 
            +
              end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
              it "should assign the correct key" do
         | 
| 91 | 
            +
                builder = Markaby::Builder.new
         | 
| 92 | 
            +
                builder.locals = { :key => :value }
         | 
| 93 | 
            +
                builder.key.should == :value
         | 
| 94 | 
            +
              end
         | 
| 95 | 
            +
             | 
| 96 | 
            +
              it "should be able to assign multiple locals" do
         | 
| 97 | 
            +
                builder = Markaby::Builder.new
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                builder.locals = { :one => "two", :three => "four" }
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                builder.one.should == "two"
         | 
| 102 | 
            +
                builder.three.should == "four"
         | 
| 103 | 
            +
              end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
              def test_builder_bang_methods
         | 
| 106 | 
            +
                assert_equal "<?xml version=\"1.0\" encoding=\"UTF-8\"?>", mab { instruct! }
         | 
| 107 | 
            +
              end
         | 
| 108 | 
            +
             | 
| 109 | 
            +
              it "should be able to produce the correct html from a fragment" do
         | 
| 110 | 
            +
                str = ""
         | 
| 111 | 
            +
                str += "<div>"
         | 
| 112 | 
            +
                str += "<h1>Monkeys</h1>"
         | 
| 113 | 
            +
                str += "<h2>Giraffes <small>Miniature</small> and <strong>Large</strong></h2>"
         | 
| 114 | 
            +
                str += "<h3>Donkeys</h3>"
         | 
| 115 | 
            +
                str += "<h4>Parakeet <b><i>Innocent IV</i></b> in Classic Chartreuse</h4>"
         | 
| 116 | 
            +
                str += "</div>"
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                generated = mab {
         | 
| 119 | 
            +
                  div {
         | 
| 120 | 
            +
                    h1 "Monkeys"
         | 
| 121 | 
            +
                    h2 {
         | 
| 122 | 
            +
                      "Giraffes #{small('Miniature')} and #{strong 'Large'}"
         | 
| 123 | 
            +
                    }
         | 
| 124 | 
            +
                    h3 "Donkeys"
         | 
| 125 | 
            +
                    h4 { "Parakeet #{b { i 'Innocent IV' }} in Classic Chartreuse" }
         | 
| 126 | 
            +
                  }
         | 
| 127 | 
            +
                }
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                generated.should == str
         | 
| 130 | 
            +
              end
         | 
| 131 | 
            +
             | 
| 132 | 
            +
              def test_fragments
         | 
| 133 | 
            +
                assert_equal %{<div><h1>Monkeys</h1><h2>Giraffes <strong>Miniature</strong></h2><h3>Donkeys</h3></div>},
         | 
| 134 | 
            +
                    mab { div { h1 "Monkeys"; h2 { "Giraffes #{strong 'Miniature' }" }; h3 "Donkeys" } }
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                assert_equal %{<div><h1>Monkeys</h1><h2>Giraffes <small>Miniature</small> and <strong>Large</strong></h2><h3>Donkeys</h3><h4>Parakeet <strong>Large</strong> as well...</h4></div>},
         | 
| 137 | 
            +
                    mab { div { @a = small 'Miniature'; @b = strong 'Large'; h1 "Monkeys"; h2 { "Giraffes #{@a} and #{@b}" }; h3 "Donkeys"; h4 { "Parakeet #{@b} as well..." } } }
         | 
| 138 | 
            +
              end
         | 
| 139 | 
            +
             | 
| 140 | 
            +
              def test_invalid_xhtml
         | 
| 141 | 
            +
                assert_exception(NoMethodError, "undefined method `dav'") { dav {} }
         | 
| 142 | 
            +
                assert_exception(Markaby::InvalidXhtmlError, "no attribute `styl' on div elements") { div(:styl => 'ok') {} }
         | 
| 143 | 
            +
                assert_exception(Markaby::InvalidXhtmlError, "no attribute `class' on tbody elements") { tbody.okay {} }
         | 
| 144 | 
            +
              end
         | 
| 145 | 
            +
             | 
| 146 | 
            +
              def test_full_doc_transitional
         | 
| 147 | 
            +
                doc = mab { xhtml_transitional { head { title 'OKay' } } }
         | 
| 148 | 
            +
                assert doc =~ /^<\?xml version="1.0" encoding="UTF-8"\?>/
         | 
| 149 | 
            +
                assert doc.include?(%{"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">})
         | 
| 150 | 
            +
                assert doc.include?(%{<title>OKay</title>})
         | 
| 151 | 
            +
              end
         | 
| 152 | 
            +
             | 
| 153 | 
            +
              def test_full_doc_strict
         | 
| 154 | 
            +
                doc = mab { xhtml_strict { head { title 'OKay' } } }
         | 
| 155 | 
            +
                assert doc =~ /^<\?xml version="1.0" encoding="UTF-8"\?>/
         | 
| 156 | 
            +
                assert doc.include?(%{"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">})
         | 
| 157 | 
            +
                assert doc.include?(%{<title>OKay</title>})
         | 
| 158 | 
            +
              end
         | 
| 159 | 
            +
             | 
| 160 | 
            +
              def test_full_doc_frameset
         | 
| 161 | 
            +
                doc = mab { xhtml_frameset { head { title 'OKay' } } }
         | 
| 162 | 
            +
                assert doc =~ /^<\?xml version="1.0" encoding="UTF-8"\?>/
         | 
| 163 | 
            +
                assert doc.include?(%{"-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">})
         | 
| 164 | 
            +
                assert doc.include?(%{<title>OKay</title>})
         | 
| 165 | 
            +
              end
         | 
| 166 | 
            +
             | 
| 167 | 
            +
              def test_root_attributes_can_be_changed
         | 
| 168 | 
            +
                doc = mab { xhtml_strict(:lang => 'fr') { head { title { 'Salut!' } } } }
         | 
| 169 | 
            +
                assert doc.include?(%{"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">})
         | 
| 170 | 
            +
                assert doc.include?(%{<title>Salut!</title>})
         | 
| 171 | 
            +
                assert doc.include?(%{ lang="fr"})
         | 
| 172 | 
            +
              end
         | 
| 173 | 
            +
             | 
| 174 | 
            +
              def version_file
         | 
| 175 | 
            +
                File.expand_path(File.dirname(__FILE__) + "/../../VERSION")
         | 
| 176 | 
            +
              end
         | 
| 177 | 
            +
             | 
| 178 | 
            +
              def test_markaby_should_have_correct_version
         | 
| 179 | 
            +
                assert_equal Markaby::VERSION, File.read(version_file).strip
         | 
| 180 | 
            +
              end
         | 
| 181 | 
            +
             | 
| 182 | 
            +
              def test_duplicate_usage_of_same_id
         | 
| 183 | 
            +
                assert_raises Markaby::InvalidXhtmlError do
         | 
| 184 | 
            +
                  mab do
         | 
| 185 | 
            +
                    p.one!
         | 
| 186 | 
            +
                    p.one!
         | 
| 187 | 
            +
                  end
         | 
| 188 | 
            +
                end
         | 
| 189 | 
            +
              end
         | 
| 190 | 
            +
             | 
| 191 | 
            +
              # auto validation
         | 
| 192 | 
            +
             | 
| 193 | 
            +
              def test_tagging_with_invalid_tag_should_raise_error
         | 
| 194 | 
            +
                assert_raises Markaby::InvalidXhtmlError do
         | 
| 195 | 
            +
                  mab do
         | 
| 196 | 
            +
                    tag! :an_invalid_tag
         | 
| 197 | 
            +
                  end
         | 
| 198 | 
            +
                end
         | 
| 199 | 
            +
              end
         | 
| 200 | 
            +
             | 
| 201 | 
            +
              def test_self_closing_html_tag_with_block_throws_errors
         | 
| 202 | 
            +
                assert_raises Markaby::InvalidXhtmlError do
         | 
| 203 | 
            +
                  mab do
         | 
| 204 | 
            +
                    html_tag :img do
         | 
| 205 | 
            +
                    end
         | 
| 206 | 
            +
                  end
         | 
| 207 | 
            +
                end
         | 
| 208 | 
            +
              end
         | 
| 209 | 
            +
             | 
| 210 | 
            +
              def test_local_assigning
         | 
| 211 | 
            +
                builder = Markaby::Builder.new(:variable => :a_value)
         | 
| 212 | 
            +
             | 
| 213 | 
            +
                assert_equal :a_value, builder.variable
         | 
| 214 | 
            +
              end
         | 
| 215 | 
            +
             | 
| 216 | 
            +
              def test_local_assignment_with_strings
         | 
| 217 | 
            +
                builder = Markaby::Builder.new("variable" => :a_value)
         | 
| 218 | 
            +
                assert_equal :a_value, builder.variable
         | 
| 219 | 
            +
              end
         | 
| 220 | 
            +
             | 
| 221 | 
            +
              def test_local_assignment_prefers_symbols_to_strings
         | 
| 222 | 
            +
                builder = Markaby::Builder.new("variable" => "string_value", :variable => :symbol_value)
         | 
| 223 | 
            +
                assert_equal :symbol_value, builder.variable
         | 
| 224 | 
            +
              end
         | 
| 225 | 
            +
             | 
| 226 | 
            +
              def test_method_missing_should_call_tag_if_no_tagset_present
         | 
| 227 | 
            +
                Markaby::Builder.set(:tagset, nil)
         | 
| 228 | 
            +
             | 
| 229 | 
            +
                builder = Markaby::Builder.new
         | 
| 230 | 
            +
                builder.something.should == "<something/>"
         | 
| 231 | 
            +
              end
         | 
| 232 | 
            +
            end
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            require 'test/unit'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            unless defined?(RUNNING_RAILS)
         | 
| 4 | 
            +
              MARKABY_ROOT    = File.join(File.dirname(__FILE__), "..", "..", "..")
         | 
| 5 | 
            +
              rails_root      = File.join(MARKABY_ROOT, "..", "..", "..")
         | 
| 6 | 
            +
              RAILS_BOOT_FILE = File.join(rails_root, "config", "boot.rb")
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              RUNNING_RAILS = File.exists?(RAILS_BOOT_FILE) ? true : false
         | 
| 9 | 
            +
            end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            if RUNNING_RAILS
         | 
| 12 | 
            +
              ENV["RAILS_ENV"] ||= "test"
         | 
| 13 | 
            +
              require RAILS_BOOT_FILE
         | 
| 14 | 
            +
              Rails::Initializer.run
         | 
| 15 | 
            +
              require 'action_controller/test_process'
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              $:.unshift MARKABY_ROOT
         | 
| 18 | 
            +
              require 'init'
         | 
| 19 | 
            +
            else
         | 
| 20 | 
            +
              warn "Skipping rails specific tests"
         | 
| 21 | 
            +
            end
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            li author
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            link_to "bar", "/foo"
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            render :partial => "a_partial"
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            hello, from erb
         | 
| 
            File without changes
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            Hello, from erb!
         | 
| @@ -0,0 +1,249 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), 'rails', 'spec_helper')
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            if RUNNING_RAILS
         | 
| 4 | 
            +
              class NonSpecificTestController < ActionController::Base
         | 
| 5 | 
            +
                VIEW_PATH = File.expand_path(File.join(File.dirname(__FILE__), 'rails', 'views'))
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                around_filter :catch_exceptions
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                attr_reader :last_exception
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                def catch_exceptions
         | 
| 12 | 
            +
                  yield
         | 
| 13 | 
            +
                rescue Exception => @last_exception
         | 
| 14 | 
            +
                  raise @last_exception
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              if Markaby::Rails.deprecated_rails_version?
         | 
| 19 | 
            +
                class ActionController::TestCase < Test::Unit::TestCase; end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                class TestController < NonSpecificTestController
         | 
| 22 | 
            +
                  self.template_root = VIEW_PATH
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              else
         | 
| 25 | 
            +
                class TestController < NonSpecificTestController
         | 
| 26 | 
            +
                  append_view_path(VIEW_PATH)
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              class MarkabyController < TestController
         | 
| 31 | 
            +
                def renders_nothing
         | 
| 32 | 
            +
                  render :text => ""
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                def renders_erb_with_explicit_template
         | 
| 36 | 
            +
                  render :template => "markaby/renders_erb"
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                def render_inline_content
         | 
| 40 | 
            +
                  mab_content = mab do
         | 
| 41 | 
            +
                    ul do
         | 
| 42 | 
            +
                      li "Scott"
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  render :inline => mab_content
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                def render_explicit_but_empty_markaby_layout
         | 
| 50 | 
            +
                  render :template => "markaby/render_explicit_but_empty_markaby_layout.mab"
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                def no_values_passed
         | 
| 54 | 
            +
                  render :template => "markaby/no_values_passed"
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                def correct_template_values
         | 
| 58 | 
            +
                  render :template => "markaby/correct_template_values"
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                def render_erb_without_explicit_render_call
         | 
| 62 | 
            +
                end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                def render_mab_without_explicit_render_call
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                def render_with_ivar
         | 
| 68 | 
            +
                  @user = "smtlaissezfaire"
         | 
| 69 | 
            +
                  render :template => "markaby/render_with_ivar"
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                def access_to_helpers
         | 
| 73 | 
            +
                  render :template => "markaby/access_to_helpers"
         | 
| 74 | 
            +
                end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                def renders_partial
         | 
| 77 | 
            +
                  render :template => "markaby/partial_parent"
         | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                def renders_partial_with_locals
         | 
| 81 | 
            +
                  render :template => "markaby/partial_parent_with_locals"
         | 
| 82 | 
            +
                end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                def render_which_raises_error
         | 
| 85 | 
            +
                  render :template => "markaby/broken"
         | 
| 86 | 
            +
                end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                def renders_form_for
         | 
| 89 | 
            +
                  @obj = Object.new
         | 
| 90 | 
            +
                  render :template => "markaby/form_for"
         | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                def render_form_for_with_fields
         | 
| 94 | 
            +
                  @obj = Object.new
         | 
| 95 | 
            +
                  def @obj.foo
         | 
| 96 | 
            +
                    "bar"
         | 
| 97 | 
            +
                  end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                  render :template => "markaby/form_for_with_fields"
         | 
| 100 | 
            +
                end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                def render_form_for_with_multiple_fields
         | 
| 103 | 
            +
                  @obj = Object.new
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                  def @obj.foo
         | 
| 106 | 
            +
                    "bar"
         | 
| 107 | 
            +
                  end
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                  def @obj.baz
         | 
| 110 | 
            +
                    "quxx"
         | 
| 111 | 
            +
                  end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                  render :template => "markaby/form_for_with_multiple_fields"
         | 
| 114 | 
            +
                end
         | 
| 115 | 
            +
              end
         | 
| 116 | 
            +
             | 
| 117 | 
            +
              class MarkabyOnRailsTest < ActionController::TestCase
         | 
| 118 | 
            +
                def setup
         | 
| 119 | 
            +
                  Markaby::Builder.restore_defaults!
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                  @request = ActionController::TestRequest.new
         | 
| 122 | 
            +
                  @response = ActionController::TestResponse.new
         | 
| 123 | 
            +
                  @controller = MarkabyController.new
         | 
| 124 | 
            +
                end
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                def test_renders_nothing
         | 
| 127 | 
            +
                  get :renders_nothing
         | 
| 128 | 
            +
                  assert_response :success
         | 
| 129 | 
            +
                end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                def test_renders_erb_with_explicit_template
         | 
| 132 | 
            +
                  get :renders_erb_with_explicit_template
         | 
| 133 | 
            +
                  assert_response :success
         | 
| 134 | 
            +
                  # TODO: - fix this test environment issue so that assert_template works
         | 
| 135 | 
            +
                  # correctly in these tests
         | 
| 136 | 
            +
                  # assert_template "renders_erb.erb"
         | 
| 137 | 
            +
                end
         | 
| 138 | 
            +
             | 
| 139 | 
            +
                def test_renders_explicit_but_empty_markaby_layout
         | 
| 140 | 
            +
                  get :render_explicit_but_empty_markaby_layout
         | 
| 141 | 
            +
                  assert_response :success
         | 
| 142 | 
            +
             | 
| 143 | 
            +
                  assert_equal "", @response.body
         | 
| 144 | 
            +
                  # TODO:
         | 
| 145 | 
            +
                  # assert_template "markaby/render_explicit_but_empty_markaby_layout"
         | 
| 146 | 
            +
                end
         | 
| 147 | 
            +
             | 
| 148 | 
            +
                def test_renders_inline_markaby_content
         | 
| 149 | 
            +
                  get :render_inline_content
         | 
| 150 | 
            +
                  assert_response :success
         | 
| 151 | 
            +
                  assert_equal "<ul><li>Scott</li></ul>", @response.body
         | 
| 152 | 
            +
                end
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                def test_renders_mab_template_with_no_values_passed
         | 
| 155 | 
            +
                  get :no_values_passed
         | 
| 156 | 
            +
                  assert_response :success
         | 
| 157 | 
            +
                  assert_equal "<ul><li>Scott</li></ul>", @response.body
         | 
| 158 | 
            +
                end
         | 
| 159 | 
            +
             | 
| 160 | 
            +
                def test_renders_mab_template_with_correct_values
         | 
| 161 | 
            +
                  get :correct_template_values
         | 
| 162 | 
            +
                  assert_response :success
         | 
| 163 | 
            +
             | 
| 164 | 
            +
                  assert_equal "<ul><li>smt</li><li>joho</li><li>spox</li></ul>", @response.body
         | 
| 165 | 
            +
                end
         | 
| 166 | 
            +
             | 
| 167 | 
            +
                def test_renders_without_explicit_render_call
         | 
| 168 | 
            +
                  get :render_mab_without_explicit_render_call
         | 
| 169 | 
            +
                  assert_response :success
         | 
| 170 | 
            +
             | 
| 171 | 
            +
                  assert_equal @response.body, "<ul><li>smtlaissezfaire</li></ul>"
         | 
| 172 | 
            +
                end
         | 
| 173 | 
            +
             | 
| 174 | 
            +
                def test_renders_with_ivar
         | 
| 175 | 
            +
                  get :render_with_ivar
         | 
| 176 | 
            +
                  assert_response :success
         | 
| 177 | 
            +
             | 
| 178 | 
            +
                  assert_equal "<ul><li>smtlaissezfaire</li></ul>", @response.body
         | 
| 179 | 
            +
                end
         | 
| 180 | 
            +
             | 
| 181 | 
            +
                def test_access_to_helpers
         | 
| 182 | 
            +
                  get :access_to_helpers
         | 
| 183 | 
            +
                  assert_response :success
         | 
| 184 | 
            +
             | 
| 185 | 
            +
                  assert_equal '<a href="/foo">bar</a>', @response.body
         | 
| 186 | 
            +
                end
         | 
| 187 | 
            +
             | 
| 188 | 
            +
                def test_renders_partial_from_template
         | 
| 189 | 
            +
                  get :renders_partial
         | 
| 190 | 
            +
                  assert_response :success
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                  assert_equal "<ul><li>smtlaissezfaire</li></ul>", @response.body
         | 
| 193 | 
            +
                end
         | 
| 194 | 
            +
             | 
| 195 | 
            +
                def test_renders_partial_with_locals
         | 
| 196 | 
            +
                  get :renders_partial_with_locals
         | 
| 197 | 
            +
                  assert_response :success
         | 
| 198 | 
            +
             | 
| 199 | 
            +
                  assert_equal "<ul><li>smtlaissezfaire</li></ul>", @response.body
         | 
| 200 | 
            +
                end
         | 
| 201 | 
            +
             | 
| 202 | 
            +
                def test_raises_error_when_template_raises_error
         | 
| 203 | 
            +
                  get :render_which_raises_error
         | 
| 204 | 
            +
             | 
| 205 | 
            +
                  assert_response :error
         | 
| 206 | 
            +
             | 
| 207 | 
            +
                  assert_equal ActionView::TemplateError, @controller.last_exception.class
         | 
| 208 | 
            +
                  assert %r(undefined local variable or method `supercalifragilisticexpialidocious' for #<Markaby::.*Builder.*) =~
         | 
| 209 | 
            +
                         @controller.last_exception.message.to_s
         | 
| 210 | 
            +
                end
         | 
| 211 | 
            +
             | 
| 212 | 
            +
                def test_renders_form_for_properly
         | 
| 213 | 
            +
                  get :renders_form_for
         | 
| 214 | 
            +
             | 
| 215 | 
            +
                  assert_response :success
         | 
| 216 | 
            +
             | 
| 217 | 
            +
                  assert %r(<form.*></form>) =~ @response.body
         | 
| 218 | 
            +
                end
         | 
| 219 | 
            +
             | 
| 220 | 
            +
                def test_renders_form_for_with_fields_for
         | 
| 221 | 
            +
                  get :render_form_for_with_fields
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                  assert_response :success
         | 
| 224 | 
            +
             | 
| 225 | 
            +
                  assert_equal "<form action=\"/markaby/render_form_for_with_fields\" method=\"post\"><input id=\"foo_foo\" name=\"foo[foo]\" size=\"30\" type=\"text\" /></form>",
         | 
| 226 | 
            +
                               @response.body
         | 
| 227 | 
            +
                end
         | 
| 228 | 
            +
             | 
| 229 | 
            +
                def test_renders_form_for_with_multiple_fields
         | 
| 230 | 
            +
                  get :render_form_for_with_multiple_fields
         | 
| 231 | 
            +
             | 
| 232 | 
            +
                  assert_response :success
         | 
| 233 | 
            +
             | 
| 234 | 
            +
                  expected_output =  "<form action=\"/markaby/render_form_for_with_multiple_fields\" method=\"post\">"
         | 
| 235 | 
            +
                  expected_output << "<input id=\"foo_foo\" name=\"foo[foo]\" size=\"30\" type=\"text\" />"
         | 
| 236 | 
            +
                  expected_output << "<input id=\"foo_baz\" name=\"foo[baz]\" size=\"30\" type=\"text\" />"
         | 
| 237 | 
            +
                  expected_output << "</form>"
         | 
| 238 | 
            +
             | 
| 239 | 
            +
                  assert_equal expected_output,
         | 
| 240 | 
            +
                               @response.body
         | 
| 241 | 
            +
                end
         | 
| 242 | 
            +
              end
         | 
| 243 | 
            +
             | 
| 244 | 
            +
              describe "rails version" do
         | 
| 245 | 
            +
                it "should support the current rails version" do
         | 
| 246 | 
            +
                  Markaby::Rails::SUPPORTED_RAILS_VERSIONS.should include(::Rails::VERSION::STRING)
         | 
| 247 | 
            +
                end
         | 
| 248 | 
            +
              end
         | 
| 249 | 
            +
            end
         |