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

use strict;
use warnings;

use Test::More;
use Test::Exception;

BEGIN {
    use_ok('Positron::DataTemplate');
}

my $template = Positron::DataTemplate->new();

my $data = {
    'one' => 1,
    'list' => [1],
    'empty_list' => [],
    'hash' => { 1 => 2 },
    'empty_hash' => {},
};

is_deeply($template->process( { '?one' => { 1 => 'eins', 2 => 'zwei', 3 => 'drei' }}, $data ), 'eins', "With scalar match");
is_deeply($template->process( { '?one' => { 1 => 'eins', 2 => 'zwei', 3 => 'drei', '?' => 'null' }}, $data ), 'eins', "With scalar match and default");
is_deeply($template->process( [ { '?two' => { 1 => 'eins', 2 => 'zwei', 3 => 'drei' }} ], $data ), [], "With no match and no default");
is_deeply($template->process( { '?two' => { 1 => 'eins', 2 => 'zwei', 3 => 'drei', '?' => 'null' }}, $data ), 'null', "With no match and default");

# TODO: what about list / hash valued keys? Count number of elements?

is_deeply($template->process( { '?one' => { 1 => '&list', 2 => '&empty_list', 3 => 'drei' }}, $data ), [1], "With list match");
is_deeply($template->process( { '?one' => { 1 => ['?one', { a => 'b' }, { c => 'd' }], 2 => '&empty_list'}}, $data ), { a => 'b' }, "With list match and conditional inside");
is_deeply($template->process( { '?two' => { 1 => '&list', '?' => '&hash'}}, $data ), { 1 => 2 }, "With no match and direct inclusion result");
is_deeply($template->process( { '?two' => { 1 => '&list', '?' => ['?one', { a => 'b' }, { c => 'd' }] }}, $data ), { a => 'b' }, "With list match and conditional inside");

done_testing();