From 508668b9f87e30c2d88cb83c23d1759ab63b7fe0 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 2 Oct 2012 11:05:11 -0500 Subject: more tests --- t/mustache.t | 228 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 t/mustache.t (limited to 't') diff --git a/t/mustache.t b/t/mustache.t new file mode 100644 index 0000000..d82ebbf --- /dev/null +++ b/t/mustache.t @@ -0,0 +1,228 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::More; +use Test::Fatal; + +use Text::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 { + return sub { + my ($text) = @_; + return '' + . Text::Handlebars->new->render_string($text) # XXX + . ''; + }; + }, + }, + <<'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'] }, + '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" +); + +sub render_ok { + local $Test::Builder::Level = $Test::Builder::Level + 1; + return _render_ok('render_string', @_); +} + +sub render_file_ok { + local $Test::Builder::Level = $Test::Builder::Level + 1; + return _render_ok('render', @_); +} + +sub _render_ok { + my $render_method = shift; + my $opts = ref($_[0]) && ref($_[0]) eq 'HASH' ? shift : {}; + my ($template, $env, $expected, $desc) = @_; + local $Test::Builder::Level = $Test::Builder::Level + 1; + + my $tx = Text::Handlebars->new(%$opts); + + my $exception = exception { + is($tx->$render_method($template, $env), $expected, $desc); + }; + fail("$desc (threw an exception)") if $exception; + is( + $exception, + undef, + "no exceptions for $desc" + ); +} + +done_testing; -- cgit v1.2.3