#!/usr/bin/perl
use strict;
use warnings;
use Test::More;
use Test::Exception;
BEGIN {
require_ok('Positron::Template');
}
# Tests of the loop processing mechanism
my $template = Positron::Template->new();
is_deeply(
$template->process(['b', {}, ['br', {}]], {}),
['b', {}, ['br', {}]],
"Non-template structure works"
);
is_deeply(
$template->process(
['b', { style => '{@loop}'}, ['br', {}]],
{'loop' => [{}, {}]}
), ['b', {}, ['br', {}], ['br', {}]],
"Loop works for simple dom"
);
is_deeply(
[$template->process(
['b', { style => '{@loop}'}, ['br', {}]],
{'loop' => []}
)], [],
"Empty loop"
);
is_deeply(
$template->process(
['b', { style => '{@+loop}'}, ['br', {}]],
{'loop' => [{}, {}]}
), ['b', {}, ['br', {}], ['br', {}]],
"Loop works for simple dom (+ quant)"
);
is_deeply(
[$template->process(
['b', { style => '{@+loop}'}, ['br', {}]],
{'loop' => []}
)], [['b', { }]],
"Empty loop (+ quant)"
);
is_deeply(
[$template->process(
['b', { style => '{@-loop}'}, ['br', {}]],
{'loop' => [{}, {}]}
)], [['br', {}], ['br', {}]],
"Loop works for simple dom (- quant)"
);
is_deeply(
[$template->process(
['b', { style => '{@-loop}'}, ['br', {}]],
{'loop' => []}
)], [],
"Empty loop (- quant)"
);
is_deeply(
[$template->process(
['b', { style => '{@*loop}'}, ['br', {}]],
{'loop' => [{}, {}]}
)], [['b', {}, ['br', {}]], ['b', {}, ['br', {}]]],
"Loop works for simple dom (* quant)"
);
is_deeply(
[$template->process(
['b', { style => '{@*loop}'}, ['br', {}]],
{'loop' => []}
)], [],
"Empty loop (* quant)"
);
# Environment chaining;
is_deeply(
$template->process(
['b', { id => '{$text}', style => '{@loop}'}, ['br', { id => '{$text}'}]],
{text => '0', 'loop' => [{ text => 'a' }, { text => 'b' }]}
), ['b', { id => '0'}, ['br', { id => 'a'}], ['br', {id => 'b'}]],
"Environment chaining"
);
# Complex environments
is_deeply(
$template->process(
['b', { style => '{@ map.list }'}, ['br', {}]],
{'map' => { list => [1, 2], not_list => [] }},
), ['b', {}, ['br', {}], ['br', {}]],
"Loop lookup under hash"
);
is_deeply(
[$template->process(
['b', { style => '{@ map.not_list }'}, ['br', {}]],
{'map' => { list => [1, 2], not_list => [] }},
)], [],
"Empty loop lookup under hash"
);
done_testing;