The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use strict;
use warnings;

use Test::More tests => 9;

use Text::Haml;

my $haml = Text::Haml->new;

# Attributes: {} or ()

my $output = $haml->render(<<'EOF');
%html{xmlns => "http://www.w3.org/1999/xhtml", "xml:lang" => "en", lang => "en"}
EOF
is($output, <<'EOF');
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'></html>
EOF

$output = $haml->render(<<'EOF');
- my $link = 'http://foo.bar';
%a{href => $link} FooBar
EOF
is($output, <<'EOF');
<a href='http://foo.bar'>FooBar</a>
EOF

$output = $haml->render(<<'EOF');
%script{:src  => "javascripts/script.js",
        :type => "text/javascript"}
EOF
is($output, <<'EOF');
<script src='javascripts/script.js' type='text/javascript'></script>
EOF

# HTML-style Attributes: ()
$output = $haml->render(<<'EOF', var => 'bar');
%html(xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en")
  .hello(class=$var)
EOF
is($output, <<'EOF');
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
  <div class='bar hello'></div>
</html>
EOF

# Do not confuse double braces for attributes
$output = $haml->render(<<'EOF');
{{ foo }}
EOF
is($output, <<'EOF');
{{ foo }}
EOF

$output = $haml->render(<<'EOF');
%div{:class => 'foo'}
  {{ bar }}
EOF
is($output, <<'EOF');
<div class='foo'>
  {{ bar }}
</div>
EOF
#
## Attribute Methods
#
##def html_attrs(lang = 'en-US')
##  {:xmlns => "http://www.w3.org/1999/xhtml", 'xml:lang' => lang, :lang => lang}
##end
##
##This can then be used in Text::Haml, like so:
##
##$output = $haml->render(<<'EOF');
##%html{html_attrs('fr-fr')}
##
##This is compiled to:
##
##<html lang='fr-fr' xml:lang='fr-fr' xmlns='http://www.w3.org/1999/xhtml'>
##</html>
#
##You can use as many such attribute methods as you want by separating them with commas, like a Ruby argument list. All the hashes will me merged together, from left to right. For example, if you defined
##
##def hash1
##  {:bread => 'white', :filling => 'peanut butter and jelly'}
##end
##
##def hash2
##  {:bread => 'whole wheat'}
##end
##
##then
##
##$output = $haml->render(<<'EOF');
##%sandwich{hash1, hash2, :delicious => true}/
##
##would compile to:
##
##<sandwich bread='whole wheat' delicious='true' filling='peanut butter and jelly' />
##
#

# Boolean Attributes

# XHTML
$haml->format('xhtml');
$output = $haml->render(<<'EOF');
%input{:selected => true}
EOF
is($output, <<'EOF');
<input selected='selected' />
EOF

# HTML
$haml->format('html');
$output = $haml->render(<<'EOF');
%input{:selected => false}
EOF
is($output, <<'EOF');
<input>
EOF

# HTML
$haml->format('html');
$output = $haml->render(<<'EOF');
%input(selected=true)
EOF
is($output, <<'EOF');
<input selected>
EOF