Trim falsy value in array attribute

This commit is contained in:
Takashi Kokubun 2015-11-13 22:51:56 +09:00
parent e2b9a20c62
commit 49c0fe2d60
3 changed files with 49 additions and 31 deletions

View File

@ -17,7 +17,7 @@ module Hamlit
end
def build_id(*values)
values.select { |v| v }.join('_')
values.flatten.select { |v| v }.join('_')
end
def build_class(*values)

View File

@ -153,26 +153,33 @@ class EngineTest < Haml::TestCase
end
def test_class_attr_with_array
skip '[INCOMPATIBILITY] Hamlit deletes only boolean attributes'
assert_equal("<p class='a b'>foo</p>\n", render("%p{:class => %w[a b]} foo")) # basic
assert_equal("<p class='a b css'>foo</p>\n", render("%p.css{:class => %w[a b]} foo")) # merge with css
assert_equal("<p class='b css'>foo</p>\n", render("%p.css{:class => %w[css b]} foo")) # merge uniquely
assert_equal("<p class='a b c d'>foo</p>\n", render("%p{:class => [%w[a b], %w[c d]]} foo")) # flatten
assert_equal("<p class='a b'>foo</p>\n", render("%p{:class => [:a, :b] } foo")) # stringify
assert_equal("<p>foo</p>\n", render("%p{:class => [nil, false] } foo")) # strip falsey
# [INCOMPATIBILITY] Hamlit deletes only boolean attributes
# assert_equal("<p>foo</p>\n", render("%p{:class => [nil, false] } foo")) # strip falsey
assert_equal("<p class=''>foo</p>\n", render("%p{:class => [nil, false] } foo")) # strip falsey
assert_equal("<p class='a'>foo</p>\n", render("%p{:class => :a} foo")) # single stringify
assert_equal("<p>foo</p>\n", render("%p{:class => false} foo")) # single falsey
# [INCOMPATIBILITY] Hamlit deletes only boolean attributes
# assert_equal("<p>foo</p>\n", render("%p{:class => false} foo")) # single falsey
assert_equal("<p class=''>foo</p>\n", render("%p{:class => false} foo")) # single falsey
assert_equal("<p class='a b html'>foo</p>\n", render("%p(class='html'){:class => %w[a b]} foo")) # html attrs
end
def test_id_attr_with_array; skip # array attribute
def test_id_attr_with_array
assert_equal("<p id='a_b'>foo</p>\n", render("%p{:id => %w[a b]} foo")) # basic
assert_equal("<p id='css_a_b'>foo</p>\n", render("%p#css{:id => %w[a b]} foo")) # merge with css
assert_equal("<p id='a_b_c_d'>foo</p>\n", render("%p{:id => [%w[a b], %w[c d]]} foo")) # flatten
assert_equal("<p id='a_b'>foo</p>\n", render("%p{:id => [:a, :b] } foo")) # stringify
assert_equal("<p>foo</p>\n", render("%p{:id => [nil, false] } foo")) # strip falsey
# [INCOMPATIBILITY] Hamlit deletes only boolean attributes
# assert_equal("<p>foo</p>\n", render("%p{:id => [nil, false] } foo")) # strip falsey
assert_equal("<p id=''>foo</p>\n", render("%p{:id => [nil, false] } foo")) # strip falsey
assert_equal("<p id='a'>foo</p>\n", render("%p{:id => :a} foo")) # single stringify
assert_equal("<p>foo</p>\n", render("%p{:id => false} foo")) # single falsey
# [INCOMPATIBILITY] Hamlit deletes only boolean attributes
# assert_equal("<p>foo</p>\n", render("%p{:id => false} foo")) # single falsey
assert_equal("<p id=''>foo</p>\n", render("%p{:id => false} foo")) # single falsey
assert_equal("<p id='html_a_b'>foo</p>\n", render("%p(id='html'){:id => %w[a b]} foo")) # html attrs
end

View File

@ -10,30 +10,41 @@ describe Hamlit::Engine do
it { assert_render(%q|%a{ href: "'\"" }|, %Q|<a href='&#39;&quot;'></a>\n|) }
it { assert_inline(%Q|%a{ href: '/search?foo=bar&hoge=<fuga>' }|) }
specify 'id attributes' do
assert_haml(<<-HAML)
#a
#a{ id: [] }
#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: [] }(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 'id attributes' do
specify 'compatilibity' do
assert_haml(<<-HAML)
#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
end
specify 'incompatibility' do
assert_render(%q|#a{ id: [] }|, %Q|<div id='a'></div>\n|)
assert_render(%q|%a{ id: [nil, false] }|, %Q|<a id=''></a>\n|)
assert_render(<<-HAML, <<-HTML)
- id = 'a'
#d#c{ id: [] }(id=id)
HAML
<div id='c_a'></div>
HTML
end
end
specify 'class attributes' do