The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
package Foo;
sub new { bless {}, shift }
sub bar { 'baz' }

package main;
use strict;
use warnings;

use Text::Haml;

use Test::More tests => 5;

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

my $output = $haml->render(<<'EOF');
%div#things
  %span#rice Chicken Fried
  %p.beans{ :food => 'true' } The magical fruit
  %h1.class.otherclass#id La La La
EOF
is($output, <<'EOF');
<div id='things'>
  <span id='rice'>Chicken Fried</span>
  <p class='beans' food='true'>The magical fruit</p>
  <h1 class='class otherclass' id='id'>La La La</h1>
</div>
EOF

$output = $haml->render(<<'EOF');
#content
  .articles
    .article.title Doogie Howser Comes Out
    .article.date 2006-11-05
    .article.entry
      Neil Patrick Harris would like to dispel any rumors that he is straight
EOF
is($output, <<'EOF');
<div id='content'>
  <div class='articles'>
    <div class='article title'>Doogie Howser Comes Out</div>
    <div class='article date'>2006-11-05</div>
    <div class='article entry'>
      Neil Patrick Harris would like to dispel any rumors that he is straight
    </div>
  </div>
</div>
EOF

$output = $haml->render(<<'EOF');
%foo{id=>'bar'}
%bar#baz{id=>'1'}
EOF
is($output, <<'EOF');
<foo id='bar'></foo>
<bar id='baz_1'></bar>
EOF

$output = $haml->render(<<'EOF', bar => 'bar');
%foo{class=>$bar}
%bar.baz{class=>'bar'}
EOF
is($output, <<'EOF');
<foo class='bar'></foo>
<bar class='bar baz'></bar>
EOF

$output = $haml->render(<<'EOF', foo => Foo->new());
%span.badge{:class => "#{$foo->bar}"}
EOF
is($output, <<'EOF');
<span class='badge baz'></span>
EOF