#!/usr/bin/env perl use strict; use warnings; use lib 't/lib'; use Test::More; use Test::Handlebars; # from the mustache(5) man page # http://mustache.github.com/mustache.5.html render_ok( <<'TEMPLATE', Hello {{name}} You have just won ${{value}}! {{#in_ca}} Well, ${{taxed_value}}, after taxes. {{/in_ca}} TEMPLATE { name => 'Chris', value => 10000, taxed_value => 10000 - (10000 * 0.4), in_ca => 1, }, <<'RENDERED', Hello Chris You have just won $10000! Well, $6000, after taxes. RENDERED "synopsis" ); render_ok( <<'TEMPLATE', * {{name}} * {{age}} * {{company}} * {{{company}}} TEMPLATE { name => 'Chris', company => 'GitHub', }, <<'RENDERED', * Chris * * <b>GitHub</b> * GitHub RENDERED "basic test" ); render_ok( <<'TEMPLATE', Shown. {{#nothin}} Never shown! {{/nothin}} TEMPLATE { person => 1, }, <<'RENDERED', Shown. RENDERED "section with no value" ); render_ok( <<'TEMPLATE', {{#repo}} {{name}} {{/repo}} TEMPLATE { repo => [ { name => 'resque' }, { name => 'hub' }, { name => 'rip' }, ], }, <<'RENDERED', resque hub rip RENDERED "section with non-empty list" ); render_ok( <<'TEMPLATE', {{#wrapped}} {{name}} is awesome. {{/wrapped}} TEMPLATE { name => 'Willy', wrapped => sub { my ($text) = @_; chomp($text); return "$text\n"; }, }, <<'RENDERED', Willy is awesome. RENDERED "lambdas" ); render_ok( <<'TEMPLATE', {{#person?}} Hi {{name}}! {{/person?}} TEMPLATE { 'person?' => { 'name' => 'Jon' }, }, <<'RENDERED', Hi Jon! RENDERED "non-false values" ); render_ok( <<'TEMPLATE', {{#repo}} {{name}} {{/repo}} {{^repo}} No repos :( {{/repo}} TEMPLATE { repo => [], }, <<'RENDERED', No repos :( RENDERED "inverted sections" ); render_ok( <<'TEMPLATE',

Today{{! ignore me }}.

TEMPLATE { }, <<'RENDERED',

Today.

RENDERED "comments" ); render_file_ok( { path => ['t/mustache/partials'], suffix => '.mustache' }, 'base.mustache', { names => [ { name => 'Chris' }, { name => 'Willy' }, { name => 'Jon' }, ], }, <<'EXPECTED',

Names

Chris Willy Jon EXPECTED "partials" ); render_ok( <<'TEMPLATE', * {{default_tags}} {{=<% %>=}} * <% erb_style_tags %> <%={{ }}=%> * {{ default_tags_again }} TEMPLATE { default_tags => 'foo', erb_style_tags => 'bar', default_tags_again => 'baz', }, <<'RENDERED', * foo * bar * baz RENDERED "set delimiter" ); done_testing;