#!/usr/bin/perl use warnings; use strict; use Test::More; use Carp::Assert qw( assert ); use Daizu; use Daizu::TTProvider; use Daizu::Test qw( init_tests ); init_tests(26); my $cms = Daizu->new($Daizu::Test::TEST_CONFIG); my $wc = $cms->live_wc; my $homepage_file = $wc->file_at_path('foo.com/_index.html'); my $docidx_file = $wc->file_at_path('foo.com/doc/_index.html'); my $subidx_file = $wc->file_at_path('foo.com/doc/subdir/_index.html'); my $a_file = $wc->file_at_path('foo.com/doc/subdir/a.html'); assert(defined $_) for $homepage_file, $docidx_file, $subidx_file, $a_file; # Daizu::TTProvider->_load() test_load_template($cms, $a_file, 'test1.tt', 'Test template 1, in foo.com/doc'); test_load_template($cms, $subidx_file, 'test1.tt', 'Test template 1, in foo.com/doc'); test_load_template($cms, $docidx_file, 'test1.tt', 'Test template 1, in foo.com/doc'); test_load_template($cms, $homepage_file, 'test1.tt', undef); test_load_template($cms, $a_file, 'test2.tt', 'Test template 2, in foo.com/doc'); test_load_template($cms, $subidx_file, 'test2.tt', 'Test template 2, in foo.com/doc'); test_load_template($cms, $docidx_file, 'test2.tt', 'Test template 2, in foo.com/doc'); test_load_template($cms, $homepage_file, 'test2.tt', 'Test template 2, in foo.com'); test_load_template($cms, $a_file, 'test3.tt', 'Test template 3, in foo.com'); test_load_template($cms, $subidx_file, 'test3.tt', 'Test template 3, in foo.com'); test_load_template($cms, $docidx_file, 'test3.tt', 'Test template 3, in foo.com'); test_load_template($cms, $homepage_file, 'test3.tt', 'Test template 3, in foo.com'); test_load_template($cms, $a_file, 'test4.tt', 'Test template 4, in top level'); test_load_template($cms, $subidx_file, 'test4.tt', 'Test template 4, in top level'); test_load_template($cms, $docidx_file, 'test4.tt', 'Test template 4, in top level'); test_load_template($cms, $homepage_file, 'test4.tt', 'Test template 4, in top level'); test_load_template($cms, $a_file, 'article_meta/pubdatetime.tt', 'Template to override one which is provided with Daizu.'); test_load_template($cms, $subidx_file, 'article_meta/pubdatetime.tt', 'Template to override one which is provided with Daizu.'); test_load_template($cms, $docidx_file, 'article_meta/pubdatetime.tt', 'Template to override one which is provided with Daizu.'); test_load_template($cms, $homepage_file, 'article_meta/pubdatetime.tt', 'Template to override one which is provided with Daizu.'); test_load_template($cms, $wc->file_at_path('example.com/foo.html'), 'article_meta/pubdatetime.tt', '
[% INCLUDE article_pubdatetime.tt datetime = entry.issued_at %]
'); # Check that binary data is preserved. test_load_template($cms, $homepage_file, 'binary-test.tt', "foo\x00\x1B\x7F\x80\xA0\x{FF}bar"); # With template overrides in place. test_load_template($cms, $a_file, 'test1.tt', 'Test template 2, in foo.com/doc', { 'test1.tt' => 'test2.tt' }); test_load_template($cms, $subidx_file, 'test1.tt', 'Test template 2, in foo.com/doc', { 'test1.tt' => 'test2.tt' }); test_load_template($cms, $docidx_file, 'test1.tt', 'Test template 2, in foo.com/doc', { 'test1.tt' => 'test2.tt' }); test_load_template($cms, $homepage_file, 'test1.tt', 'Test template 2, in foo.com', { 'test1.tt' => 'test2.tt' }); sub test_load_template { my ($cms, $file, $template, $expected, $overrides) = @_; my $msg = "TTProvider: $template in $file->{path}"; $msg .= ' with overrides' if defined $overrides && keys %$overrides; my $provider = Daizu::TTProvider->new({ daizu_cms => $cms, daizu_wc_id => $file->{wc_id}, daizu_file_path => $file->directory_path, daizu_template_overrides => $overrides, }); my ($data, $error) = $provider->_load($template); my $text = $data->{text}; # Render 'declined' as undef, so that I can compare it with $expected. # Other errors get reported as such. if ($error && $error == Template::Constants::STATUS_DECLINED) { $text = undef; $error = undef; } if ($error) { fail("$msg: error: $error"); } else { $text =~ s/\n\z// if defined $text; is($text, $expected, $msg); } } # vi:ts=4 sw=4 expandtab filetype=perl