Split attributes tests

This commit is contained in:
Takashi Kokubun 2015-11-21 22:17:30 +09:00
parent f46c0a32b3
commit 1fd9afb4f2
2 changed files with 191 additions and 237 deletions

View File

@ -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|<div id='a'></div>\n|, %q|#a{ id: [] }|)
assert_render(%Q|<a id=''></a>\n|, %q|%a{ id: [nil, false] }|)
assert_render(<<-HTML.unindent, <<-'HAML'.unindent)
<div id='c_a'></div>
HTML
- id = 'a'
#d#c{ id: [] }(id=id)
HAML
describe 'incompatibility' do
it { assert_render(%Q|<div id='a'></div>\n|, %q|#a{ id: [] }|) }
it { assert_render(%Q|<a id=''></a>\n|, %q|%a{ id: [nil, false] }|) }
it { assert_render(%Q|<div id='c_a'></div>\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|<div class='a b'></div>\n|, %q|%div{ class: 'b a' }|)
assert_render(<<-HTML.unindent, <<-'HAML'.unindent)
<div class='a b'></div>
HTML
- klass = 'b a'
%div{ class: klass }
HAML
describe 'incompatibility' do
it { assert_render(%Q|<div class=''></div>\n|, %q|%div{ class: nil }|) }
it { assert_render(%Q|<div class='a b'></div>\n|, %q|%div{ class: 'b a' }|) }
it { assert_render(%Q|<div class='a b'></div>\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=<fuga>' }|)
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=<fuga>' }|) }
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|<a href='&#39;&quot;'></a>\n|, %q|%a{ href: "'\"" }|)
describe 'incompatibility' do
it { assert_render(%Q|<a href='&#39;&quot;'></a>\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|<a class='test_object' id='test_object_10'></a>\n|, <<-HAML.unindent)
- foo = TestObject.new(10)
%a[foo]
HAML
end
it 'accepts nil prefix' do
assert_render(%Q|<a class='test_object' id='test_object_10'></a>\n|, <<-HAML.unindent)
- foo = TestObject.new(10)
%a[foo, nil]
HAML
end
it 'accepts nil reference' do
assert_render(%Q|<a class='test_object' id='test_object_new'></a>\n|, <<-HAML.unindent)
- foo = TestObject.new(nil)
%a[foo]
HAML
end
it 'accepts prefix' do
assert_render(%Q|<a class='pre_test_object' id='pre_test_object_10'></a>\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|<div class='static test_object' id='static_test_object_10'></div>\n|, %q|.static#static[TestObject.new(10)]|)
end
it 'accepts class and id conflicts' do
assert_render(%Q|<a class='dynamic pre_test_object static' id='static_dynamic_pre_test_object_10'></a>\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|<div class='static' id='static'></div>\n|, %q|.static#static[nil]|)
it { assert_render(%Q|<a class='test_object' id='test_object_10'></a>\n|, %q|%a[foo]|, locals: { foo: TestObject.new(10) }) }
it { assert_render(%Q|<a class='test_object' id='test_object_10'></a>\n|, %q|%a[foo, nil]|, locals: { foo: TestObject.new(10) }) }
it { assert_render(%Q|<a class='test_object' id='test_object_new'></a>\n|, %q|%a[foo]|, locals: { foo: TestObject.new(nil) }) }
it { assert_render(%Q|<a class='pre_test_object' id='pre_test_object_10'></a>\n|, %q|%a[foo, 'pre']|, locals: { foo: TestObject.new(10) }) }
it { assert_render(%Q|<div class='static test_object' id='static_test_object_10'></div>\n|, %q|.static#static[TestObject.new(10)]|) }
it { assert_render(%Q|<div class='static' id='static'></div>\n|, %q|.static#static[nil]|) }
it do
assert_render(
%Q|<a class='dynamic pre_test_object static' id='static_dynamic_pre_test_object_10'></a>\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|<a href=*/*></a>\n|, %q|%a{ href: '/' }|, attr_quote: ?*) }
it { assert_render(%Q|<a id="/"></a>\n|, %q|%a{ id: '/' }|, attr_quote: ?") }
it { assert_render(%Q|<a id="/"></a>\n|, %Q|- val = '/'\n%a{ id: val }|, attr_quote: ?") }
it { assert_render(%Q|<a id="/"></a>\n|, %Q|- hash = { id: '/' }\n%a{ hash }|, attr_quote: ?") }
it { assert_render(%Q|<a id="/"></a>\n|, %q|%a{ id: val }|, attr_quote: ?", locals: { val: '/' }) }
it { assert_render(%Q|<a id="/"></a>\n|, %q|%a{ hash }|, attr_quote: ?", locals: { hash: { id: '/' } }) }
it { assert_render(%Q|<a class="/"></a>\n|, %q|%a{ class: '/' }|, attr_quote: ?") }
it { assert_render(%Q|<a class="/"></a>\n|, %Q|- val = '/'\n%a{ class: val }|, attr_quote: ?") }
it { assert_render(%Q|<a class="/"></a>\n|, %Q|- hash = { class: '/' }\n%a{ hash }|, attr_quote: ?") }
it { assert_render(%Q|<a class="/"></a>\n|, %q|%a{ class: val }|, attr_quote: ?", locals: { val: '/' }) }
it { assert_render(%Q|<a class="/"></a>\n|, %q|%a{ hash }|, attr_quote: ?", locals: { hash: { class: '/' } }) }
it { assert_render(%Q|<a data="/"></a>\n|, %q|%a{ data: '/' }|, attr_quote: ?") }
it { assert_render(%Q|<a data="/"></a>\n|, %q|%a{ data: val }|, attr_quote: ?", locals: { val: '/' }) }
it { assert_render(%Q|<a data-url="/"></a>\n|, %q|%a{ data: { url: '/' } }|, attr_quote: ?") }
it { assert_render(%Q|<a data="/"></a>\n|, %Q|- val = '/'\n%a{ data: val }|, attr_quote: ?") }
it { assert_render(%Q|<a data-url="/"></a>\n|, %Q|- val = { url: '/' }\n%a{ data: val }|, attr_quote: ?") }
it { assert_render(%Q|<a data-url="/"></a>\n|, %Q|- hash = { data: { url: '/' } }\n%a{ hash }|, attr_quote: ?") }
it { assert_render(%Q|<a data-url="/"></a>\n|, %q|%a{ data: val }|, attr_quote: ?", locals: { val: { url: '/' } }) }
it { assert_render(%Q|<a data-url="/"></a>\n|, %q|%a{ hash }|, attr_quote: ?", locals: { hash: { data: { url: '/' } } }) }
it { assert_render(%Q|<a disabled="/"></a>\n|, %q|%a{ disabled: '/' }|, attr_quote: ?") }
it { assert_render(%Q|<a disabled="/"></a>\n|, %Q|- val = '/'\n%a{ disabled: val }|, attr_quote: ?") }
it { assert_render(%Q|<a disabled="/"></a>\n|, %Q|- hash = { disabled: '/' }\n%a{ hash }|, attr_quote: ?") }
it { assert_render(%Q|<a disabled="disabled"></a>\n|, %Q|- hash = { disabled: true }\n%a{ hash }|, attr_quote: ?", format: :xhtml) }
it { assert_render(%Q|<a disabled="/"></a>\n|, %Q|%a{ disabled: val }|, attr_quote: ?", locals: { val: '/' }) }
it { assert_render(%Q|<a disabled="/"></a>\n|, %Q|%a{ hash }|, attr_quote: ?", locals: { hash: { disabled: '/' } }) }
it { assert_render(%Q|<a disabled="disabled"></a>\n|, %Q|%a{ hash }|, attr_quote: ?", format: :xhtml, locals: { hash: { disabled: true } }) }
it { assert_render(%Q|<a href="/"></a>\n|, %q|%a{ href: '/' }|, attr_quote: ?") }
it { assert_render(%Q|<a href="/"></a>\n|, %Q|- val = '/'\n%a{ href: val }|, attr_quote: ?") }
it { assert_render(%Q|<a href="/"></a>\n|, %Q|- hash = { href: '/' }\n%a{ hash }|, attr_quote: ?") }
it { assert_render(%Q|<a href="/"></a>\n|, %q|%a{ href: val }|, attr_quote: ?", locals: { val: '/' }) }
it { assert_render(%Q|<a href="/"></a>\n|, %q|%a{ hash }|, attr_quote: ?", locals: { hash: { href: '/' } }) }
end
describe 'escape_attrs' do
it { assert_render(%Q|<a id='&<>"/'></a>\n|, %q|%a{ id: '&<>"/' }|, escape_attrs: false) }
it { assert_render(%Q|<a id='&<>"/'></a>\n|, %Q|%a{ id: val }|, escape_attrs: false, locals: { val: '&<>"/' }) }
it { assert_render(%Q|<a id='&<>"/'></a>\n|, %Q|%a{ hash }|, escape_attrs: false, locals: { hash: { id: '&<>"/' } }) }
it { assert_render(%Q|<a id='&amp;&lt;&gt;&quot;/'></a>\n|, %q|%a{ id: '&<>"/' }|, escape_attrs: true) }
it { assert_render(%Q|<a id='&<>"/'></a>\n|, %Q|- val = '&<>"/'\n%a{ id: val }|, escape_attrs: false) }
it { assert_render(%Q|<a id='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|- val = '&<>"/'\n%a{ id: val }|, escape_attrs: true) }
it { assert_render(%Q|<a id='&<>"/'></a>\n|, %Q|- hash = { id: '&<>"/' }\n%a{ hash }|, escape_attrs: false) }
it { assert_render(%Q|<a id='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|- hash = { id: '&<>"/' }\n%a{ hash }|, escape_attrs: true) }
it { assert_render(%Q|<a id='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|%a{ id: val }|, escape_attrs: true, locals: { val: '&<>"/' }) }
it { assert_render(%Q|<a id='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|%a{ hash }|, escape_attrs: true, locals: { hash: { id: '&<>"/' } }) }
it { assert_render(%Q|<a id='&<>"/'></a>\n|, %q|%a{ id: '&<>"/' }|, escape_attrs: false) }
it { assert_render(%Q|<a id='&amp;&lt;&gt;&quot;/'></a>\n|, %q|%a{ id: '&<>"/' }|, escape_attrs: true) }
it { assert_render(%Q|<a id='&<>"/'></a>\n|, %Q|- val = '&<>"/'\n%a{ id: val }|, escape_attrs: false) }
it { assert_render(%Q|<a id='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|- val = '&<>"/'\n%a{ id: val }|, escape_attrs: true) }
it { assert_render(%Q|<a id='&<>"/'></a>\n|, %Q|- hash = { id: '&<>"/' }\n%a{ hash }|, escape_attrs: false) }
it { assert_render(%Q|<a id='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|- hash = { id: '&<>"/' }\n%a{ hash }|, escape_attrs: true) }
it { assert_render(%Q|<a class='&<>"/'></a>\n|, %q|%a{ class: '&<>"/' }|, escape_attrs: false) }
it { assert_render(%Q|<a class='&<>"/'></a>\n|, %Q|%a{ class: val }|, escape_attrs: false, locals: { val: '&<>"/' }) }
it { assert_render(%Q|<a class='&<>"/'></a>\n|, %Q|%a{ hash }|, escape_attrs: false, locals: { hash: { class: '&<>"/' } }) }
it { assert_render(%Q|<a class='&amp;&lt;&gt;&quot;/'></a>\n|, %q|%a{ class: '&<>"/' }|, escape_attrs: true) }
it { assert_render(%Q|<a class='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|%a{ class: val }|, escape_attrs: true, locals: { val: '&<>"/' }) }
it { assert_render(%Q|<a class='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|%a{ hash }|, escape_attrs: true, locals: { hash: { class: '&<>"/' } }) }
it { assert_render(%Q|<a data='&<>"/'></a>\n|, %q|%a{ data: '&<>"/' }|, escape_attrs: false) }
it { assert_render(%Q|<a data='&<>"/'></a>\n|, %Q|%a{ data: val }|, escape_attrs: false, locals: { val: '&<>"/' }) }
it { assert_render(%Q|<a data='&<>"/'></a>\n|, %Q|%a{ hash }|, escape_attrs: false, locals: { hash: { data: '&<>"/' } }) }
it { assert_render(%Q|<a data='&amp;&lt;&gt;&quot;/'></a>\n|, %q|%a{ data: '&<>"/' }|, escape_attrs: true) }
it { assert_render(%Q|<a data='&<>"/'></a>\n|, %Q|- val = '&<>"/'\n%a{ data: val }|, escape_attrs: false) }
it { assert_render(%Q|<a data='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|- val = '&<>"/'\n%a{ data: val }|, escape_attrs: true) }
it { assert_render(%Q|<a data='&<>"/'></a>\n|, %Q|- hash = { data: '&<>"/' }\n%a{ hash }|, escape_attrs: false) }
it { assert_render(%Q|<a data='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|- hash = { data: '&<>"/' }\n%a{ hash }|, escape_attrs: true) }
it { assert_render(%Q|<a data='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|%a{ data: val }|, escape_attrs: true, locals: { val: '&<>"/' }) }
it { assert_render(%Q|<a data='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|%a{ hash }|, escape_attrs: true, locals: { hash: { data: '&<>"/' } }) }
it { assert_render(%Q|<a disabled='&<>"/'></a>\n|, %q|%a{ disabled: '&<>"/' }|, escape_attrs: false) }
it { assert_render(%Q|<a disabled='&<>"/'></a>\n|, %Q|%a{ disabled: val }|, escape_attrs: false, locals: { val: '&<>"/' }) }
it { assert_render(%Q|<a disabled='&<>"/'></a>\n|, %Q|%a{ hash }|, escape_attrs: false, locals: { hash: { disabled: '&<>"/' } }) }
it { assert_render(%Q|<a disabled='&amp;&lt;&gt;&quot;/'></a>\n|, %q|%a{ disabled: '&<>"/' }|, escape_attrs: true) }
it { assert_render(%Q|<a disabled='&<>"/'></a>\n|, %Q|- val = '&<>"/'\n%a{ disabled: val }|, escape_attrs: false) }
it { assert_render(%Q|<a disabled='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|- val = '&<>"/'\n%a{ disabled: val }|, escape_attrs: true) }
it { assert_render(%Q|<a disabled='&<>"/'></a>\n|, %Q|- hash = { disabled: '&<>"/' }\n%a{ hash }|, escape_attrs: false) }
it { assert_render(%Q|<a disabled='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|- hash = { disabled: '&<>"/' }\n%a{ hash }|, escape_attrs: true) }
it { assert_render(%Q|<a disabled='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|%a{ disabled: val }|, escape_attrs: true, locals: { val: '&<>"/' }) }
it { assert_render(%Q|<a disabled='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|%a{ hash }|, escape_attrs: true, locals: { hash: { disabled: '&<>"/' } }) }
it { assert_render(%Q|<a href='&<>"/'></a>\n|, %q|%a{ href: '&<>"/' }|, escape_attrs: false) }
it { assert_render(%Q|<a href='&<>"/'></a>\n|, %Q|%a{ href: val }|, escape_attrs: false, locals: { val: '&<>"/' }) }
it { assert_render(%Q|<a href='&<>"/'></a>\n|, %Q|%a{ hash }|, escape_attrs: false, locals: { hash: { href: '&<>"/' } }) }
it { assert_render(%Q|<a href='&amp;&lt;&gt;&quot;/'></a>\n|, %q|%a{ href: '&<>"/' }|, escape_attrs: true) }
it { assert_render(%Q|<a href='&<>"/'></a>\n|, %Q|- val = '&<>"/'\n%a{ href: val }|, escape_attrs: false) }
it { assert_render(%Q|<a href='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|- val = '&<>"/'\n%a{ href: val }|, escape_attrs: true) }
it { assert_render(%Q|<a href='&<>"/'></a>\n|, %Q|- hash = { href: '&<>"/' }\n%a{ hash }|, escape_attrs: false) }
it { assert_render(%Q|<a href='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|- hash = { href: '&<>"/' }\n%a{ hash }|, escape_attrs: true) }
it { assert_render(%Q|<a href='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|%a{ href: val }|, escape_attrs: true, locals: { val: '&<>"/' }) }
it { assert_render(%Q|<a href='&amp;&lt;&gt;&quot;/'></a>\n|, %Q|%a{ hash }|, escape_attrs: true, locals: { hash: { href: '&<>"/' } }) }
end
describe 'format' do
it { assert_render(%Q|<a disabled></a>\n|, %q|%a{ disabled: true }|, format: :html) }
it { assert_render(%Q|<a disabled></a>\n|, %q|%a{ disabled: val }|, format: :html, locals: { val: true }) }
it { assert_render(%Q|<a disabled></a>\n|, %q|%a{ hash }|, format: :html, locals: { hash: { disabled: true } }) }
it { assert_render(%Q|<a disabled='disabled'></a>\n|, %q|%a{ disabled: true }|, format: :xhtml) }
it { assert_render(%Q|<a disabled></a>\n|, %Q|- val = true\n%a{ disabled: val }|, format: :html) }
it { assert_render(%Q|<a disabled='disabled'></a>\n|, %Q|- val = true\n%a{ disabled: val }|, format: :xhtml) }
it { assert_render(%Q|<a disabled></a>\n|, %Q|- hash = { disabled: true }\n%a{ hash }|, format: :html) }
it { assert_render(%Q|<a disabled='disabled'></a>\n|, %Q|- hash = { disabled: true }\n%a{ hash }|, format: :xhtml) }
it { assert_render(%Q|<a disabled='disabled'></a>\n|, %q|%a{ disabled: val }|, format: :xhtml, locals: { val: true }) }
it { assert_render(%Q|<a disabled='disabled'></a>\n|, %q|%a{ hash }|, format: :xhtml, locals: { hash: { disabled: true } }) }
end
end
end

View File

@ -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