From 1fd9afb4f28d342dc8c9ab4145908b2beb07d76b Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Sat, 21 Nov 2015 22:17:30 +0900 Subject: [PATCH] Split attributes tests --- test/hamlit/engine/attributes_test.rb | 409 +++++++++++--------------- test/test_helper.rb | 19 +- 2 files changed, 191 insertions(+), 237 deletions(-) diff --git a/test/hamlit/engine/attributes_test.rb b/test/hamlit/engine/attributes_test.rb index 2af79861..d37eda52 100644 --- a/test/hamlit/engine/attributes_test.rb +++ b/test/hamlit/engine/attributes_test.rb @@ -2,218 +2,163 @@ describe Hamlit::Engine do include RenderHelper describe 'id attributes' do - specify 'compatilibity' do - assert_haml(<<-HAML.unindent) - #a - #a{ id: nil } - #a{ id: nil }(id=nil) - #a{ id: false } - #a{ id: 'b' } - #b{ id: 'a' } - - id = 'c' - #a{ id: 'b' }(id=id) - - id = 'b' - #c{ id: a = 'a' }(id=id) - - id = 'a' - #d#c{ id: a = 'b' }(id=id) - #d#c{ id: %w[b e] }(id=id) - - hash = { id: 'a' } - %div{ hash } - #b{ hash } - #b{ hash }(id='c') - - id = 'c' - #b{ hash }(id=id) - HAML + describe 'compatilibity' do + it { assert_haml(%q|#a|) } + it { assert_haml(%q|#a{ id: nil }|) } + it { assert_haml(%q|#a{ id: nil }(id=nil)|) } + it { assert_haml(%q|#a{ id: false }|) } + it { assert_haml(%q|#a{ id: 'b' }|) } + it { assert_haml(%q|#b{ id: 'a' }|) } + + it { assert_haml(%q|#a{ id: 'b' }(id=id)|, locals: { id: 'c' }) } + it { assert_haml(%q|#c{ id: a = 'a' }(id=id)|, locals: { id: 'b' }) } + it { assert_haml(%q|#d#c{ id: a = 'b' }(id=id)|, locals: { id: 'a' }) } + it { assert_haml(%q|#d#c{ id: %w[b e] }(id=id)|, locals: { id: 'a' }) } + + it { assert_haml(%q|%div{ hash }|, locals: { hash: { id: 'a' } }) } + it { assert_haml(%q|#b{ hash }|, locals: { hash: { id: 'a' } }) } + it { assert_haml(%q|#b{ hash }(id='c')|, locals: { hash: { id: 'a' }, id: 'c' }) } + it { assert_haml(%q|#b{ hash }(id=id)|, locals: { hash: { id: 'a' }, id: 'c' }) } end - specify 'incompatibility' do - assert_render(%Q|
\n|, %q|#a{ id: [] }|) - assert_render(%Q|\n|, %q|%a{ id: [nil, false] }|) - assert_render(<<-HTML.unindent, <<-'HAML'.unindent) -
- HTML - - id = 'a' - #d#c{ id: [] }(id=id) - HAML + describe 'incompatibility' do + it { assert_render(%Q|
\n|, %q|#a{ id: [] }|) } + it { assert_render(%Q|\n|, %q|%a{ id: [nil, false] }|) } + it { assert_render(%Q|
\n|, %q|#d#c{ id: [] }(id=id)|, locals: { id: 'a' }) } end end describe 'class attributes' do - specify 'compatibility' do - assert_haml(%q|.bar.foo|) - assert_haml(%q|.foo.bar|) - assert_haml(%Q|%div(class='bar foo')|) - assert_haml(%Q|%div(class='foo bar')|) - assert_haml(%Q|%div{ class: 'bar foo' }|) - assert_haml(<<-HAML.unindent) - - klass = 'b a' - .b.a - .b{ class: 'a' } - .a{ class: 'b a' } - .b.a{ class: 'b a' } - .b{ class: 'b a' } - .a{ class: klass } - .b{ class: klass } - .b.a{ class: klass } - .b{ class: 'c a' } - .b{ class: 'a c' } - .a{ class: [] } - .a{ class: %w[c b] } - %div{ class: 'b a' }(class=klass) - %div(class=klass){ class: 'b a' } - .a.d(class=klass){ class: 'c d' } - .a.d(class=klass) - .a.c(class='b') - - klass = nil - .a{:class => nil} - .a{:class => false} - .a{:class => klass} - .a{:class => nil}(class=klass) - - hash = { class: nil } - .b{ hash, class: 'a' } - .b{ hash, 'class' => 'a' } - - hash = { class: 'd' } - .a{ hash } - .b{ hash, class: 'a' }(class='c') - .b{ hash, class: 'a' }(class=klass) - HAML + describe 'compatibility' do + it { assert_haml(%q|.bar.foo|) } + it { assert_haml(%q|.foo.bar|) } + it { assert_haml(%q|%div(class='bar foo')|) } + it { assert_haml(%q|%div(class='foo bar')|) } + it { assert_haml(%q|%div{ class: 'bar foo' }|) } + + it { assert_haml(%q|.b{ class: 'a' }|) } + it { assert_haml(%q|.a{ class: 'b a' }|) } + it { assert_haml(%q|.b.a{ class: 'b a' }|) } + it { assert_haml(%q|.b{ class: 'b a' }|) } + + it { assert_haml(%q|.a{ class: klass }|, locals: { klass: 'b a' }) } + it { assert_haml(%q|.b{ class: klass }|, locals: { klass: 'b a' }) } + it { assert_haml(%q|.b.a{ class: klass }|, locals: { klass: 'b a' }) } + + it { assert_haml(%q|.b{ class: 'c a' }|) } + it { assert_haml(%q|.b{ class: 'a c' }|) } + it { assert_haml(%q|.a{ class: [] }|) } + it { assert_haml(%q|.a{ class: %w[c b] }|) } + it { assert_haml(%q|.a.c(class='b')|) } + + it { assert_haml(%q|%div{ class: 'b a' }(class=klass)|, locals: { klass: 'b a' }) } + it { assert_haml(%q|%div(class=klass){ class: 'b a' }|, locals: { klass: 'b a' }) } + it { assert_haml(%q|.a.d(class=klass){ class: 'c d' }|, locals: { klass: 'b a' }) } + it { assert_haml(%q|.a.d(class=klass)|, locals: { klass: 'b a' }) } + + it { assert_haml(%q|.a{:class => klass}|, locals: { klass: nil }) } + it { assert_haml(%q|.a{:class => nil}(class=klass)|, locals: { klass: nil }) } + it { assert_haml(%q|.a{:class => nil}|) } + it { assert_haml(%q|.a{:class => false}|) } + + it { assert_haml(%q|.b{ hash, class: 'a' }|, locals: { hash: { class: nil } }) } + it { assert_haml(%q|.b{ hash, :class => 'a' }|, locals: { hash: { class: nil } }) } + it { assert_haml(%q|.b{ hash, 'class' => 'a' }|, locals: { hash: { class: nil } }) } + + it { assert_haml(%q|.a{ hash }|, locals: { hash: { class: 'd' } }) } + it { assert_haml(%q|.b{ hash, class: 'a' }(class='c')|, locals: { hash: { class: 'd' } }) } + it { assert_haml(%q|.b{ hash, class: 'a' }(class=klass)|, locals: { hash: { class: 'd' }, klass: nil }) } end - specify 'incompatibility' do - assert_render(%Q|
\n|, %q|%div{ class: 'b a' }|) - assert_render(<<-HTML.unindent, <<-'HAML'.unindent) -
- HTML - - klass = 'b a' - %div{ class: klass } - HAML + describe 'incompatibility' do + it { assert_render(%Q|
\n|, %q|%div{ class: nil }|) } + it { assert_render(%Q|
\n|, %q|%div{ class: 'b a' }|) } + it { assert_render(%Q|
\n|, %q|%div{ class: klass }|, locals: { klass: 'b a' }) } end end - specify 'data attributes' do - assert_haml(<<-HAML.unindent) - - val = false - #foo.bar{ data: { disabled: val } } - - hash = {:a => {:b => 'c'}} - - hash[:d] = hash - %div{:data => hash} - - hash = { data: hash } - %div{ hash } - %div{:data => {:foo_bar => 'blip', :baz => 'bang'}} - %div{ data: { raw_src: 'foo' } } - %a{ data: { value: [count: 1] } } - %a{ 'data-disabled' => true } - %a{ :'data-disabled' => true } - %a{ data: { nil => 3 } } - %a{ data: 3 } - HAML + describe 'data attributes' do + it { assert_haml(%q|#foo.bar{ data: { disabled: val } }|, locals: { val: false }) } + it { assert_haml(%q|%div{:data => hash}|, locals: { hash: { :a => { :b => 'c' } }.tap { |h| h[:d] = h } }) } + it { assert_haml(%q|%div{ hash }|, locals: { hash: { data: { :a => { :b => 'c' } }.tap { |h| h[:d] = h } } }) } + it { assert_haml(%q|%div{:data => {:foo_bar => 'blip', :baz => 'bang'}}|) } + it { assert_haml(%q|%div{ data: { raw_src: 'foo' } }|) } + it { assert_haml(%q|%a{ data: { value: [count: 1] } }|) } + it { assert_haml(%q|%a{ 'data-disabled' => true }|) } + it { assert_haml(%q|%a{ :'data-disabled' => true }|) } + it { assert_haml(%q|%a{ data: { nil => 3 } }|) } + it { assert_haml(%q|%a{ data: 3 }|) } end - specify 'boolean attributes' do - assert_haml(<<-HAML.unindent) - %input{ disabled: nil } - %input{ disabled: false } - %input{ disabled: true } - %input{ disabled: 'false' } - %input{ disabled: val = nil } - %input{ disabled: val = false } - %input{ disabled: val = true } - %input{ disabled: val = 'false' } - %input{ disabled: nil }(disabled=true) - %input{ disabled: false }(disabled=true) - %input{ disabled: true }(disabled=false) - - hash = { disabled: false } - %a{ hash } - - hash = { disabled: nil } - %a{ hash } - %input(disabled=true){ disabled: nil } - %input(disabled=true){ disabled: false } - %input(disabled=false){ disabled: true } - - val = true - %input(disabled=val){ disabled: false } - - val = false - %input(disabled=val) - %input(disabled=nil) - %input(disabled=false) - %input(disabled=true) - %input(disabled='false') - - val = 'false' - %input(disabled=val) - %input(disabled='false'){ disabled: true } - %input(disabled='false'){ disabled: false } - %input(disabled='false'){ disabled: nil } - %input(disabled=''){ disabled: nil } - HAML + describe 'boolean attributes' do + it { assert_haml(%q|%input{ disabled: nil }|) } + it { assert_haml(%q|%input{ disabled: false }|) } + it { assert_haml(%q|%input{ disabled: true }|) } + it { assert_haml(%q|%input{ disabled: 'false' }|) } - assert_haml(%q|%input(checked=true)|) - assert_haml(%q|%input(checked=true)|, format: :xhtml) + it { assert_haml(%q|%input{ disabled: val = nil }|) } + it { assert_haml(%q|%input{ disabled: val = false }|) } + it { assert_haml(%q|%input{ disabled: val = true }|) } + it { assert_haml(%q|%input{ disabled: val = 'false' }|) } + + it { assert_haml(%q|%input{ disabled: nil }(disabled=true)|) } + it { assert_haml(%q|%input{ disabled: false }(disabled=true)|) } + it { assert_haml(%q|%input{ disabled: true }(disabled=false)|) } + it { assert_haml(%q|%a{ hash }|, locals: { hash: { disabled: false } }) } + it { assert_haml(%q|%a{ hash }|, locals: { hash: { disabled: nil } }) } + + it { assert_haml(%q|input(disabled=true){ disabled: nil }|) } + it { assert_haml(%q|input(disabled=true){ disabled: false }|) } + it { assert_haml(%q|input(disabled=false){ disabled: true }|) } + it { assert_haml(%q|%input(disabled=val){ disabled: false }|, locals: { val: true }) } + it { assert_haml(%q|%input(disabled=val){ disabled: false }|, locals: { val: false }) } + + it { assert_haml(%q|%input(disabled=nil)|) } + it { assert_haml(%q|%input(disabled=false)|) } + it { assert_haml(%q|%input(disabled=true)|) } + it { assert_haml(%q|%input(disabled='false')|) } + it { assert_haml(%q|%input(disabled=val)|, locals: { val: 'false' }) } + + it { assert_haml(%q|%input(disabled='false'){ disabled: true }|) } + it { assert_haml(%q|%input(disabled='false'){ disabled: false }|) } + it { assert_haml(%q|%input(disabled='false'){ disabled: nil }|) } + it { assert_haml(%q|%input(disabled=''){ disabled: nil }|) } + + it { assert_haml(%q|%input(checked=true)|) } + it { assert_haml(%q|%input(checked=true)|, format: :xhtml) } end describe 'common attributes' do - specify 'compatibility' do - assert_haml(%Q|%a{ href: '/search?foo=bar&hoge=' }|) - assert_haml(<<-HAML.unindent) - - new = 'new' - - old = 'old' - %span(foo='new'){ foo: 'old' } - %span{ foo: 'old' }(foo='new') - %span(foo=new){ foo: 'old' } - %span{ foo: 'old' }(foo=new) - %span(foo=new){ foo: old } - %span{ foo: old }(foo=new) - HAML + describe 'compatibility' do + it { assert_haml(%Q|%a{ href: '/search?foo=bar&hoge=' }|) } + it { assert_haml(%q|%span(foo='new'){ foo: 'old' }|, locals: { new: 'new', old: 'old' }) } + it { assert_haml(%q|%span(foo=new){ foo: 'old' }|, locals: { new: 'new', old: 'old' }) } + it { assert_haml(%q|%span(foo=new){ foo: old }|, locals: { new: 'new', old: 'old' }) } + it { assert_haml(%q|%span{ foo: 'old' }(foo='new')|, locals: { new: 'new', old: 'old' }) } + it { assert_haml(%q|%span{ foo: 'old' }(foo=new)|, locals: { new: 'new', old: 'old' }) } + it { assert_haml(%q|%span{ foo: old }(foo=new)|, locals: { new: 'new', old: 'old' }) } end - specify 'incompatibility' do - assert_render(%Q|\n|, %q|%a{ href: "'\"" }|) + describe 'incompatibility' do + it { assert_render(%Q|\n|, %q|%a{ href: "'\"" }|) } end end describe 'object reference' do ::TestObject = Struct.new(:id) unless defined?(::TestObject) - it 'renders object reference' do - assert_render(%Q|\n|, <<-HAML.unindent) - - foo = TestObject.new(10) - %a[foo] - HAML - end - - it 'accepts nil prefix' do - assert_render(%Q|\n|, <<-HAML.unindent) - - foo = TestObject.new(10) - %a[foo, nil] - HAML - end - - it 'accepts nil reference' do - assert_render(%Q|\n|, <<-HAML.unindent) - - foo = TestObject.new(nil) - %a[foo] - HAML - end - - it 'accepts prefix' do - assert_render(%Q|\n|, <<-HAML.unindent) - - foo = TestObject.new(10) - %a[foo, 'pre'] - HAML - end - - it 'accepts with static and dynamic class and ids' do - assert_render(%Q|
\n|, %q|.static#static[TestObject.new(10)]|) - end - - it 'accepts class and id conflicts' do - assert_render(%Q|\n|, <<-HAML.unindent) - - foo = TestObject.new(10) - - dynamic = 'dynamic' - %a.static#static[foo, 'pre']{ id: dynamic, class: dynamic } - HAML - end - - it 'accepts nil reference' do - assert_render(%Q|
\n|, %q|.static#static[nil]|) + it { assert_render(%Q|\n|, %q|%a[foo]|, locals: { foo: TestObject.new(10) }) } + it { assert_render(%Q|\n|, %q|%a[foo, nil]|, locals: { foo: TestObject.new(10) }) } + it { assert_render(%Q|\n|, %q|%a[foo]|, locals: { foo: TestObject.new(nil) }) } + it { assert_render(%Q|\n|, %q|%a[foo, 'pre']|, locals: { foo: TestObject.new(10) }) } + it { assert_render(%Q|
\n|, %q|.static#static[TestObject.new(10)]|) } + it { assert_render(%Q|
\n|, %q|.static#static[nil]|) } + it do + assert_render( + %Q|\n|, + %q|%a.static#static[foo, 'pre']{ id: dynamic, class: dynamic }|, + locals: { foo: TestObject.new(10), dynamic: 'dynamic' }, + ) end end @@ -224,73 +169,73 @@ describe Hamlit::Engine do it { assert_render(%Q|\n|, %q|%a{ href: '/' }|, attr_quote: ?*) } it { assert_render(%Q|\n|, %q|%a{ id: '/' }|, attr_quote: ?") } - it { assert_render(%Q|\n|, %Q|- val = '/'\n%a{ id: val }|, attr_quote: ?") } - it { assert_render(%Q|\n|, %Q|- hash = { id: '/' }\n%a{ hash }|, attr_quote: ?") } + it { assert_render(%Q|\n|, %q|%a{ id: val }|, attr_quote: ?", locals: { val: '/' }) } + it { assert_render(%Q|\n|, %q|%a{ hash }|, attr_quote: ?", locals: { hash: { id: '/' } }) } it { assert_render(%Q|\n|, %q|%a{ class: '/' }|, attr_quote: ?") } - it { assert_render(%Q|\n|, %Q|- val = '/'\n%a{ class: val }|, attr_quote: ?") } - it { assert_render(%Q|\n|, %Q|- hash = { class: '/' }\n%a{ hash }|, attr_quote: ?") } + it { assert_render(%Q|\n|, %q|%a{ class: val }|, attr_quote: ?", locals: { val: '/' }) } + it { assert_render(%Q|\n|, %q|%a{ hash }|, attr_quote: ?", locals: { hash: { class: '/' } }) } - it { assert_render(%Q|\n|, %q|%a{ data: '/' }|, attr_quote: ?") } + it { assert_render(%Q|\n|, %q|%a{ data: '/' }|, attr_quote: ?") } + it { assert_render(%Q|\n|, %q|%a{ data: val }|, attr_quote: ?", locals: { val: '/' }) } it { assert_render(%Q|\n|, %q|%a{ data: { url: '/' } }|, attr_quote: ?") } - it { assert_render(%Q|\n|, %Q|- val = '/'\n%a{ data: val }|, attr_quote: ?") } - it { assert_render(%Q|\n|, %Q|- val = { url: '/' }\n%a{ data: val }|, attr_quote: ?") } - it { assert_render(%Q|\n|, %Q|- hash = { data: { url: '/' } }\n%a{ hash }|, attr_quote: ?") } + it { assert_render(%Q|\n|, %q|%a{ data: val }|, attr_quote: ?", locals: { val: { url: '/' } }) } + it { assert_render(%Q|\n|, %q|%a{ hash }|, attr_quote: ?", locals: { hash: { data: { url: '/' } } }) } - it { assert_render(%Q|\n|, %q|%a{ disabled: '/' }|, attr_quote: ?") } - it { assert_render(%Q|\n|, %Q|- val = '/'\n%a{ disabled: val }|, attr_quote: ?") } - it { assert_render(%Q|\n|, %Q|- hash = { disabled: '/' }\n%a{ hash }|, attr_quote: ?") } - it { assert_render(%Q|\n|, %Q|- hash = { disabled: true }\n%a{ hash }|, attr_quote: ?", format: :xhtml) } + it { assert_render(%Q|\n|, %q|%a{ disabled: '/' }|, attr_quote: ?") } + it { assert_render(%Q|\n|, %Q|%a{ disabled: val }|, attr_quote: ?", locals: { val: '/' }) } + it { assert_render(%Q|\n|, %Q|%a{ hash }|, attr_quote: ?", locals: { hash: { disabled: '/' } }) } + it { assert_render(%Q|\n|, %Q|%a{ hash }|, attr_quote: ?", format: :xhtml, locals: { hash: { disabled: true } }) } it { assert_render(%Q|\n|, %q|%a{ href: '/' }|, attr_quote: ?") } - it { assert_render(%Q|\n|, %Q|- val = '/'\n%a{ href: val }|, attr_quote: ?") } - it { assert_render(%Q|\n|, %Q|- hash = { href: '/' }\n%a{ hash }|, attr_quote: ?") } + it { assert_render(%Q|\n|, %q|%a{ href: val }|, attr_quote: ?", locals: { val: '/' }) } + it { assert_render(%Q|\n|, %q|%a{ hash }|, attr_quote: ?", locals: { hash: { href: '/' } }) } end describe 'escape_attrs' do - it { assert_render(%Q|\n|, %q|%a{ id: '&<>"/' }|, escape_attrs: false) } + it { assert_render(%Q|\n|, %q|%a{ id: '&<>"/' }|, escape_attrs: false) } + it { assert_render(%Q|\n|, %Q|%a{ id: val }|, escape_attrs: false, locals: { val: '&<>"/' }) } + it { assert_render(%Q|\n|, %Q|%a{ hash }|, escape_attrs: false, locals: { hash: { id: '&<>"/' } }) } it { assert_render(%Q|\n|, %q|%a{ id: '&<>"/' }|, escape_attrs: true) } - it { assert_render(%Q|\n|, %Q|- val = '&<>"/'\n%a{ id: val }|, escape_attrs: false) } - it { assert_render(%Q|\n|, %Q|- val = '&<>"/'\n%a{ id: val }|, escape_attrs: true) } - it { assert_render(%Q|\n|, %Q|- hash = { id: '&<>"/' }\n%a{ hash }|, escape_attrs: false) } - it { assert_render(%Q|\n|, %Q|- hash = { id: '&<>"/' }\n%a{ hash }|, escape_attrs: true) } + it { assert_render(%Q|\n|, %Q|%a{ id: val }|, escape_attrs: true, locals: { val: '&<>"/' }) } + it { assert_render(%Q|\n|, %Q|%a{ hash }|, escape_attrs: true, locals: { hash: { id: '&<>"/' } }) } - it { assert_render(%Q|\n|, %q|%a{ id: '&<>"/' }|, escape_attrs: false) } - it { assert_render(%Q|\n|, %q|%a{ id: '&<>"/' }|, escape_attrs: true) } - it { assert_render(%Q|\n|, %Q|- val = '&<>"/'\n%a{ id: val }|, escape_attrs: false) } - it { assert_render(%Q|\n|, %Q|- val = '&<>"/'\n%a{ id: val }|, escape_attrs: true) } - it { assert_render(%Q|\n|, %Q|- hash = { id: '&<>"/' }\n%a{ hash }|, escape_attrs: false) } - it { assert_render(%Q|\n|, %Q|- hash = { id: '&<>"/' }\n%a{ hash }|, escape_attrs: true) } + it { assert_render(%Q|\n|, %q|%a{ class: '&<>"/' }|, escape_attrs: false) } + it { assert_render(%Q|\n|, %Q|%a{ class: val }|, escape_attrs: false, locals: { val: '&<>"/' }) } + it { assert_render(%Q|\n|, %Q|%a{ hash }|, escape_attrs: false, locals: { hash: { class: '&<>"/' } }) } + it { assert_render(%Q|\n|, %q|%a{ class: '&<>"/' }|, escape_attrs: true) } + it { assert_render(%Q|\n|, %Q|%a{ class: val }|, escape_attrs: true, locals: { val: '&<>"/' }) } + it { assert_render(%Q|\n|, %Q|%a{ hash }|, escape_attrs: true, locals: { hash: { class: '&<>"/' } }) } - it { assert_render(%Q|\n|, %q|%a{ data: '&<>"/' }|, escape_attrs: false) } + it { assert_render(%Q|\n|, %q|%a{ data: '&<>"/' }|, escape_attrs: false) } + it { assert_render(%Q|\n|, %Q|%a{ data: val }|, escape_attrs: false, locals: { val: '&<>"/' }) } + it { assert_render(%Q|\n|, %Q|%a{ hash }|, escape_attrs: false, locals: { hash: { data: '&<>"/' } }) } it { assert_render(%Q|\n|, %q|%a{ data: '&<>"/' }|, escape_attrs: true) } - it { assert_render(%Q|\n|, %Q|- val = '&<>"/'\n%a{ data: val }|, escape_attrs: false) } - it { assert_render(%Q|\n|, %Q|- val = '&<>"/'\n%a{ data: val }|, escape_attrs: true) } - it { assert_render(%Q|\n|, %Q|- hash = { data: '&<>"/' }\n%a{ hash }|, escape_attrs: false) } - it { assert_render(%Q|\n|, %Q|- hash = { data: '&<>"/' }\n%a{ hash }|, escape_attrs: true) } + it { assert_render(%Q|\n|, %Q|%a{ data: val }|, escape_attrs: true, locals: { val: '&<>"/' }) } + it { assert_render(%Q|\n|, %Q|%a{ hash }|, escape_attrs: true, locals: { hash: { data: '&<>"/' } }) } - it { assert_render(%Q|\n|, %q|%a{ disabled: '&<>"/' }|, escape_attrs: false) } + it { assert_render(%Q|\n|, %q|%a{ disabled: '&<>"/' }|, escape_attrs: false) } + it { assert_render(%Q|\n|, %Q|%a{ disabled: val }|, escape_attrs: false, locals: { val: '&<>"/' }) } + it { assert_render(%Q|\n|, %Q|%a{ hash }|, escape_attrs: false, locals: { hash: { disabled: '&<>"/' } }) } it { assert_render(%Q|\n|, %q|%a{ disabled: '&<>"/' }|, escape_attrs: true) } - it { assert_render(%Q|\n|, %Q|- val = '&<>"/'\n%a{ disabled: val }|, escape_attrs: false) } - it { assert_render(%Q|\n|, %Q|- val = '&<>"/'\n%a{ disabled: val }|, escape_attrs: true) } - it { assert_render(%Q|\n|, %Q|- hash = { disabled: '&<>"/' }\n%a{ hash }|, escape_attrs: false) } - it { assert_render(%Q|\n|, %Q|- hash = { disabled: '&<>"/' }\n%a{ hash }|, escape_attrs: true) } + it { assert_render(%Q|\n|, %Q|%a{ disabled: val }|, escape_attrs: true, locals: { val: '&<>"/' }) } + it { assert_render(%Q|\n|, %Q|%a{ hash }|, escape_attrs: true, locals: { hash: { disabled: '&<>"/' } }) } - it { assert_render(%Q|\n|, %q|%a{ href: '&<>"/' }|, escape_attrs: false) } + it { assert_render(%Q|\n|, %q|%a{ href: '&<>"/' }|, escape_attrs: false) } + it { assert_render(%Q|\n|, %Q|%a{ href: val }|, escape_attrs: false, locals: { val: '&<>"/' }) } + it { assert_render(%Q|\n|, %Q|%a{ hash }|, escape_attrs: false, locals: { hash: { href: '&<>"/' } }) } it { assert_render(%Q|\n|, %q|%a{ href: '&<>"/' }|, escape_attrs: true) } - it { assert_render(%Q|\n|, %Q|- val = '&<>"/'\n%a{ href: val }|, escape_attrs: false) } - it { assert_render(%Q|\n|, %Q|- val = '&<>"/'\n%a{ href: val }|, escape_attrs: true) } - it { assert_render(%Q|\n|, %Q|- hash = { href: '&<>"/' }\n%a{ hash }|, escape_attrs: false) } - it { assert_render(%Q|\n|, %Q|- hash = { href: '&<>"/' }\n%a{ hash }|, escape_attrs: true) } + it { assert_render(%Q|\n|, %Q|%a{ href: val }|, escape_attrs: true, locals: { val: '&<>"/' }) } + it { assert_render(%Q|\n|, %Q|%a{ hash }|, escape_attrs: true, locals: { hash: { href: '&<>"/' } }) } end describe 'format' do - it { assert_render(%Q|\n|, %q|%a{ disabled: true }|, format: :html) } + it { assert_render(%Q|\n|, %q|%a{ disabled: true }|, format: :html) } + it { assert_render(%Q|\n|, %q|%a{ disabled: val }|, format: :html, locals: { val: true }) } + it { assert_render(%Q|\n|, %q|%a{ hash }|, format: :html, locals: { hash: { disabled: true } }) } it { assert_render(%Q|\n|, %q|%a{ disabled: true }|, format: :xhtml) } - it { assert_render(%Q|\n|, %Q|- val = true\n%a{ disabled: val }|, format: :html) } - it { assert_render(%Q|\n|, %Q|- val = true\n%a{ disabled: val }|, format: :xhtml) } - it { assert_render(%Q|\n|, %Q|- hash = { disabled: true }\n%a{ hash }|, format: :html) } - it { assert_render(%Q|\n|, %Q|- hash = { disabled: true }\n%a{ hash }|, format: :xhtml) } + it { assert_render(%Q|\n|, %q|%a{ disabled: val }|, format: :xhtml, locals: { val: true }) } + it { assert_render(%Q|\n|, %q|%a{ hash }|, format: :xhtml, locals: { hash: { disabled: true } }) } end end end diff --git a/test/test_helper.rb b/test/test_helper.rb index 1c0f5edd..e3d887c0 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -26,17 +26,26 @@ end module RenderHelper def assert_render(expected, haml, options = {}) - actual = render(haml, options) + actual = render_hamlit(haml, options) assert_equal expected, actual end - def render(haml, options = {}) - eval Hamlit::Engine.new(options).call(haml) + def render_haml(haml, options = {}) + options = options.dup + locals = options.delete(:locals) || {} + haml_options = { escape_html: true, escape_attrs: true, ugly: true } + Haml::Engine.new(haml, haml_options.merge(options)).render(Object.new, locals) + end + + def render_hamlit(haml, options = {}) + options = options.dup + locals = options.delete(:locals) || {} + Hamlit::Template.new(options) { haml }.render(Object.new, locals) end def assert_haml(haml, options = {}) - expected = Haml::Engine.new(haml, { escape_html: true, escape_attrs: true, ugly: true }.merge(options)).to_html - actual = render(haml, options) + expected = render_haml(haml, options) + actual = render_hamlit(haml, options) assert_equal expected, actual end end