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 lib 't/lib';
use Test::More;
use Test::Handlebars;

render_ok(
    'This is {{#shown}}shown{{/shown}}',
    { shown => 1 },
    'This is shown',
    "true block variable"
);

render_ok(
    'This is {{#shown}}shown{{/shown}}',
    { shown => 0 },
    'This is ',
    "false block variable"
);

render_ok(
    'This is {{#shown}}shown{{/shown}}',
    { shown => [({}) x 3] },
    'This is shownshownshown',
    "array block variable"
);

render_ok(
    'This is {{#shown}}{{content}}{{/shown}}',
    { shown => { content => 'SHOWN' } },
    'This is SHOWN',
    "nested hash block variable"
);

render_ok(
    'This is {{#shown}}{{content}}{{/shown}}',
    {
        shown => [
            { content => '3' },
            { content => '2' },
            { content => '1' },
            { content => 'Shown' },
        ],
    },
    'This is 321Shown',
    "nested array of hashes block variable"
);

render_ok(
    '{{#goodbyes}}{{@index}}. {{text}}! {{/goodbyes}}cruel {{world}}!',
    {
        goodbyes => [
            { text => 'goodbye' },
            { text => 'Goodbye' },
            { text => 'GOODBYE' },
        ],
        world => 'world',
    },
    '0. goodbye! 1. Goodbye! 2. GOODBYE! cruel world!',
    "\@index variable"
);

render_ok(
    '{{#foo}}{{/foo}}bar',
    {
        foo => [ 1, 2, 3 ],
    },
    'bar',
    "empty block"
);

render_ok(
    '{{#people}}{{name}}{{^}}{{none}}{{/people}}',
    {
        none => 'No people',
    },
    'No people',
    "inverted block shorthand"
);

render_ok(
    '{{#people}}{{name}}{{^}}{{none}}{{/people}}',
    {
        none   => 'No people',
        people => [],
    },
    'No people',
    "inverted block shorthand (empty array)"
);

render_ok(
    <<'TEMPLATE',
{{#people}}
{{.}}
{{^}}
{{none}}
{{/people}}
TEMPLATE
    {
        none   => 'No people',
        people => [
            'Jesse Luehrs',
            'Shawn Moore',
            'Stevan Little',
        ],
    },
    <<'RENDERED',
Jesse Luehrs
Shawn Moore
Stevan Little
RENDERED
    "inverted block shorthand (non-empty array)"
);

done_testing;