#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../test_helper'
require 'haml/html'
class Html2HamlTest < Test::Unit::TestCase
def test_empty_render_should_remain_empty
assert_equal '', render('')
end
def test_id_and_class_should_be_removed_from_hash
assert_equal '%span#foo.bar', render('')
end
def test_no_tag_name_for_div_if_class_or_id_is_present
assert_equal '#foo', render('
')
assert_equal '.foo', render('
')
end
def test_multiple_class_names
assert_equal '.foo.bar.baz', render('
')
end
def test_should_have_pretty_attributes
assert_equal('%input{:name => "login", :type => "text"}/',
render(''))
assert_equal('%meta{:content => "text/html", "http-equiv" => "Content-Type"}/',
render(''))
end
def test_interpolation
assert_equal('Foo \#{bar} baz', render('Foo #{bar} baz'))
end
def test_interpolation_in_attrs
assert_equal('%p{:foo => "\#{bar} baz"}', render(''))
end
def test_cdata
assert_equal(<
flop
HAML
flop
]]>
HTML
end
def test_self_closing_tag
assert_equal("%foo/", render(""))
end
def test_inline_text
assert_equal("%p foo", render("
foo
"))
end
def test_inline_comment
assert_equal("/ foo", render(""))
end
def test_non_inline_comment
assert_equal(<
HTML
end
def test_non_inline_text
assert_equal(<
foo
HTML
assert_equal(<
foo
HTML
assert_equal(<foo
HTML
end
def test_script_tag
assert_equal(<
function foo() {
return "12" & "13";
}
HTML
end
def test_script_tag_with_cdata
assert_equal(<
HTML
end
def test_pre
assert_equal(<foo
bar
baz
HTML
end
def test_pre_code
assert_equal(<foo
bar
baz
HTML
end
def test_code_without_pre
assert_equal(<foo
bar
baz
HTML
end
def test_conditional_comment
assert_equal(<
bar
baz
HTML
end
def test_inline_conditional_comment
assert_equal(< bar baz
HTML
end
## ERB
def test_erb
assert_equal '- foo = bar', render_erb('<% foo = bar %>')
assert_equal '- foo = bar', render_erb('<% foo = bar -%>')
assert_equal '= h @item.title', render_erb('<%=h @item.title %>')
assert_equal '= h @item.title', render_erb('<%=h @item.title -%>')
end
def test_inline_erb
assert_equal("%p= foo", render_erb("
<%= foo %>
"))
end
def test_non_inline_erb
assert_equal(<
<%= foo %>
HTML
assert_equal(<
<%= foo %>
HTML
assert_equal(<<%= foo %>
HTML
end
def test_erb_in_cdata
assert_equal(< baz]]>
HTML
end
def test_erb_in_script
assert_equal(<
function foo() {
return <%= foo.to_json %>;
}
HTML
end
def test_erb_in_line
assert_equal 'foo bar #{baz}', render_erb('foo bar <%= baz %>')
assert_equal 'foo bar #{baz}! Bang.', render_erb('foo bar <%= baz %>! Bang.')
end
def test_erb_multi_in_line
assert_equal('foo bar #{baz}! Bang #{bop}.',
render_erb('foo bar <%= baz %>! Bang <%= bop %>.'))
assert_equal('foo bar #{baz}#{bop}!',
render_erb('foo bar <%= baz %><%= bop %>!'))
end
def test_erb_with_html_special_chars
assert_equal '= 3 < 5 ? "OK" : "Your computer is b0rken"',
render_erb('<%= 3 < 5 ? "OK" : "Your computer is b0rken" %>')
end
def test_erb_in_class_attribute
assert_equal "%div{:class => dyna_class} I have a dynamic attribute",
render_erb('
I have a dynamic attribute
')
end
def test_erb_in_id_attribute
assert_equal "%div{:id => dyna_id} I have a dynamic attribute",
render_erb('