The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More tests => 4;
use Template::Flute;
use Data::Dumper;

# diag 'All tests will fail if args="tree" is not provided';

my $spec = <<EOF;
<specification>
<list name="items" iterator="items" class="list">
 <param name="received_check" class="received-check" op="toggle" args="tree"/>
 <param name="received" field="code"/>
</list>
</specification>
EOF

my $html = <<EOF;
<ol>
<li class="list">
 <span class="received-check">
  <input type="checkbox" name="received" value="" class="received"/>
 </span>
</li>
</ol>
EOF

my $iter = [{ code => "first",  received_check => '1' },
            { code => "second", received_check => '1' }];

my $flute = Template::Flute->new(template => $html,
                                 specification => $spec,
                                 auto_iterators => 1,
                                 values => { items => $iter });

my $out = $flute->process;
my $expected =<<'OUT';
<li class="list">
<span class="received-check">
<input class="received" name="received" type="checkbox" value="first" />
</span>
</li>
<li class="list">
<span class="received-check">
<input class="received" name="received" type="checkbox" value="second" />
</span>
</li>
OUT
$expected =~ s/\n//g;

like $out, qr/\Q$expected\E/;

$spec = <<EOF;
<specification>
<list name="items" iterator="items" class="list">
 <param name="received" field="code"/>
 <param name="received_check" class="received-check" op="toggle" args="tree"/>
</list>
</specification>
EOF

$flute = Template::Flute->new(template => $html,
                              specification => $spec,
                              auto_iterators => 1,
                              values => { items => $iter });

$out = $flute->process;

like $out, qr/\Q$expected\E/;

$spec = <<EOF;
<specification>
 <value name="received_check" class="received-check" op="toggle" args="tree"/>
 <value name="received" />
</specification>
EOF

$html = <<EOF;
<span class="received-check">
<input class="received" name="received" type="checkbox" value="second" />
</span>
EOF

$flute = Template::Flute->new(template => $html,
                              specification => $spec,
                              auto_iterators => 1,
                              values => { received => 'blabla',
                                          received_check => 1
                                        });

$out = $flute->process;

$expected = <<EOF;
<span class="received-check">
<input class="received" name="received" type="checkbox" value="blabla" />
</span>
EOF

$expected =~ s/\n//g;

like $out, qr/\Q$expected\E/;


$spec = <<EOF;
<specification>
 <value name="received" />
 <value name="received_check" class="received-check" op="toggle" args="tree"/>
</specification>
EOF

$flute = Template::Flute->new(template => $html,
                              specification => $spec,
                              auto_iterators => 1,
                              values => { received => 'blabla',
                                          received_check => 1
                                        });

$out = $flute->process;

like $out, qr/\Q$expected\E/;