The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w

use strict;
use Test::More;

use Text::Clevery;
use Text::Clevery::Parser;

my $tc = Text::Clevery->new(verbose => 2);

my @set = (
    [<<'T', { cust_ids => [100, 101, 102], cust_names => [qw(Joe Jack Jane)], customer_id => 100  }, <<'X'],
{html_checkboxes name='id' values=$cust_ids output=$cust_names
   selected=$customer_id  separator='<br />'}
T
<label><input type="checkbox" name="id" value="100" checked="checked" />Joe</label><br />
<label><input type="checkbox" name="id" value="101" />Jack</label><br />
<label><input type="checkbox" name="id" value="102" />Jane</label><br />
X

    [<<'T', { cust_ids => [100, 101, 102], cust_names => [qw(Joe Jack Jane)], customer_id => 101  }, <<'X'],
{html_checkboxes name='id' values=$cust_ids output=$cust_names
   selected=$customer_id  separator='<br />'}
T
<label><input type="checkbox" name="id" value="100" />Joe</label><br />
<label><input type="checkbox" name="id" value="101" checked="checked" />Jack</label><br />
<label><input type="checkbox" name="id" value="102" />Jane</label><br />
X
    [<<'T', { cust_ids => [100, 101, 102], cust_names => [qw(Joe Jack Jane)], customer_id => 102  }, <<'X'],
{html_checkboxes name='id' values=$cust_ids output=$cust_names
   selected=$customer_id  separator='<br />'}
T
<label><input type="checkbox" name="id" value="100" />Joe</label><br />
<label><input type="checkbox" name="id" value="101" />Jack</label><br />
<label><input type="checkbox" name="id" value="102" checked="checked" />Jane</label><br />
X
    [<<'T', { cust_ids => [100, 101, 102], cust_names => [qw(Joe Jack Jane)], customer_id => [101, 102]  }, <<'X', 'multiple selected'],
{html_checkboxes name='id' values=$cust_ids output=$cust_names
   selected=$customer_id  separator='<br />'}
T
<label><input type="checkbox" name="id" value="100" />Joe</label><br />
<label><input type="checkbox" name="id" value="101" checked="checked" />Jack</label><br />
<label><input type="checkbox" name="id" value="102" checked="checked" />Jane</label><br />
X


    [<<'T', { cust_ids => [100, 101, 102], cust_names => [qw(Joe Jack Jane)], customer_id => 101  }, <<'X', 'no selected'],
{html_checkboxes name='id' values=$cust_ids output=$cust_names
    separator='<br />'}
T
<label><input type="checkbox" name="id" value="100" />Joe</label><br />
<label><input type="checkbox" name="id" value="101" />Jack</label><br />
<label><input type="checkbox" name="id" value="102" />Jane</label><br />
X

    [<<'T', { cust_ids => [100, 101, 102], cust_names => [qw(Joe Jack Jane)], customer_id => 101  }, <<'X', 'no separator'],
{html_checkboxes name='id' values=$cust_ids output=$cust_names
   selected=$customer_id }
T
<label><input type="checkbox" name="id" value="100" />Joe</label>
<label><input type="checkbox" name="id" value="101" checked="checked" />Jack</label>
<label><input type="checkbox" name="id" value="102" />Jane</label>
X

    [<<'T', { cust_ids => [100, 101, 102], cust_names => [qw(Joe Jack Jane)], customer_id => 101  }, <<'X', 'labels=false'],
{html_checkboxes name='id' values=$cust_ids output=$cust_names
   selected=$customer_id  separator='<br />' labels=false}
T
<input type="checkbox" name="id" value="100" />Joe<br />
<input type="checkbox" name="id" value="101" checked="checked" />Jack<br />
<input type="checkbox" name="id" value="102" />Jane<br />
X


    [<<'T', { cust => [[100, 'Joe'], [101, 'Jack']], customer_id => 100  }, <<'X', 'options'],
{html_checkboxes name='id' options=$cust selected=$customer_id}
T
<label><input type="checkbox" name="id" value="100" checked="checked" />Joe</label>
<label><input type="checkbox" name="id" value="101" />Jack</label>
X

);

for my $d(@set) {
    my($source, $vars, $expected, $msg) = @{$d};
    is eval { $tc->render_string($source, $vars) }, $expected, $msg
        or do { ($@ && diag $@); diag $source };
}

done_testing;