From b6b1bd1936ea207c74ecf0993bd3b7c55c71ec57 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 3 Oct 2012 15:05:25 -0500 Subject: make basic lambdas work (not block lambdas yet) --- t/mustache-spec.t | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 't/mustache-spec.t') diff --git a/t/mustache-spec.t b/t/mustache-spec.t index 3713abc..8ee1c10 100644 --- a/t/mustache-spec.t +++ b/t/mustache-spec.t @@ -9,7 +9,6 @@ use Test::Requires 'JSON', 'Path::Class'; for my $file (dir('t', 'mustache-spec', 'specs')->children) { next unless $file =~ /\.json$/; - next if $file->basename =~ /^~/; # for now next if $file->basename =~ /partials/; my $tests = decode_json($file->slurp); note("running " . $file->basename . " tests"); @@ -17,14 +16,36 @@ for my $file (dir('t', 'mustache-spec', 'specs')->children) { local $TODO = "unimplemented" if $file->basename eq 'delimiters.json' && $test->{name} =~ /partial/i; + local ($TODO, $SIG{__WARN__}) = ("unimplemented", sub { }) + if $file->basename eq '~lambdas.json' + && $test->{name} =~ /section/i; render_ok( $test->{template}, - $test->{data}, + fix_data($test->{data}), $test->{expected}, "$test->{name}: $test->{desc}" ); } } +sub fix_data { + my ($data) = @_; + + if (ref($data) eq 'HASH') { + if ($data->{__tag__} && $data->{__tag__} eq 'code') { + return eval $data->{perl}; + } + else { + return { map { $_ => fix_data($data->{$_}) } keys %$data }; + } + } + elsif (ref($data) eq 'ARRAY') { + return [ map { fix_data($_) } @$data ]; + } + else { + return $data; + } +} + done_testing; -- cgit v1.2.3