diff options
Diffstat (limited to 't')
-rw-r--r-- | t/004-helpers.t | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/t/004-helpers.t b/t/004-helpers.t new file mode 100644 index 0000000..3d39755 --- /dev/null +++ b/t/004-helpers.t @@ -0,0 +1,45 @@ +use strict; +use warnings; +use Test::More; +use Text::Xslate; + +my $tx = Text::Xslate->new(syntax => 'Handlebars'); + +# XXX I'm not sure how helpers should be registered in Perl +# in JS, it's global which is crappy +Handlebars->registerHelper(noop => sub { + my ($context, $options) = @_; + return $options->{fn}->($context); +}); + +is( + $tx->render_string( + '<h1>{{title}}</h1><p>{{#noop}}{{body}}{{/noop}}</p>', + { title => 'A', body => 'the first letter' }, + ), + '<h1>A</h1><p>the first letter</p>', +); + +Handlebars->registerHelper(list => sub { + my ($items, $options) = @_; + my $out = "<ul>"; + + for my $item (@$items) { + $out .= "<li>" . $options->{fn}->($item) . "</li>"; + } + + return $out . "</ul>"; +}); + +is( + $tx->render_string( + '{{#list people}}{{firstName}} {{lastName}}{{/list}}', + { people => [ + { firstName => 'Jesse', lastName => 'Luehrs' }, + { firstName => 'Shawn', lastName => 'Moore' }, + { firstName => 'Stevan', lastName => 'Little' }, + ] }, + ), + '<ul><li>Jesse Luehrs</li><li>Shawn Moore</li><li>Stevan Little</li></ul>', +); + |