Compare commits

...

56 Commits

Author SHA1 Message Date
Graham Ollis
6146b1f2f5 set locale "C" in tests
This ensures that the error string is what we expect it to be
2012-12-26 21:22:07 -05:00
Graham Ollis
5116c191f3 update Changes 2012-12-22 15:14:11 -05:00
Graham Ollis
5828f878d8 don't rely on English locale in test 2012-12-22 15:10:59 -05:00
Graham Ollis
f4beaf9864 use non-capturing for performance 2012-12-19 12:33:19 -05:00
Graham Ollis
ce9e1b955e load test to test loading of all .pm files 2012-12-18 11:02:18 -05:00
Graham Ollis
37ee2ee753 support multiple renderer paths 2012-12-18 11:00:47 -05:00
Graham Ollis
cdc31b07be update changes 2012-10-31 11:19:28 -04:00
Graham Ollis
57b9c39b15 specify a minumum perl version. 2012-10-11 11:18:37 -04:00
Graham Ollis
194a9219e9 fix cpanm warning. 2012-10-02 11:42:17 -04:00
Graham Ollis
5505c5d82a utf-8 for perldoc 2012-10-02 11:34:42 -04:00
Graham Ollis
daceb5876f documentation updates. 2012-10-02 11:33:07 -04:00
Graham Ollis
54d13555ef Merge branch 'master' of github.com:abh/mojox-renderer-tt 2012-08-31 08:18:19 -04:00
Graham Ollis
d6d98cc533 fix for win32 2012-08-31 08:18:01 -04:00
Graham Ollis
51af0a7893 return 0 on not found 2012-08-25 07:15:15 -04:00
ollisg
b48b4274db add test case for GH#30 2012-08-24 22:23:37 -04:00
Graham Ollis
e64ce4c484 refactor fetching templates from DATA 2012-08-24 05:47:54 -04:00
Graham Ollis
af61eff483 update email. 2012-08-23 22:27:43 -04:00
Graham Ollis
cf390c5456 update changes 2012-08-23 22:26:09 -04:00
Graham Ollis
20d795cb51 Compatibility with mojo 3.33 2012-08-23 22:20:08 -04:00
Graham Ollis
7455ae1be8 v1.23 2012-08-23 15:27:07 -04:00
Graham Ollis
870d195761 use die instead of render_exception 2012-08-23 15:26:38 -04:00
Graham Ollis
b21db5cf22 v1.22 2012-08-21 20:39:02 -04:00
Graham Ollis
24990483e5 avoid deep recursion
when using a tt template for exceptions, and there is
an exception in the template, don't go into infinite
recursion.
2012-08-21 16:30:19 -04:00
Graham Ollis
4f5d3a0951 update Changes 2012-08-21 15:47:33 -04:00
Graham Ollis
a72ec0e750 ignore cycles that are taken care of in Template::Provider#DESTROY 2012-08-21 15:44:33 -04:00
Graham Ollis
2956335d9e use Test::Memory::Cycle instead of find_cycle 2012-08-21 14:55:28 -04:00
Graham Ollis
7d1ac4eecd tt is private. 2012-08-21 14:49:58 -04:00
Graham Ollis
28ae3d62f8 return 1 on failure 2012-08-21 15:44:10 -03:00
Ask Bjørn Hansen
944fa2ecae Update Changes for v1.21 2012-06-05 16:25:52 -07:00
Ask Bjørn Hansen
3364b8a05a Remove Test::DistManifest Dist::Zilla plugin 2012-06-05 16:23:42 -07:00
Ask Bjørn Hansen
6047db4ef2 Add MYMETA.* to MANIFEST.SKIP 2012-06-05 16:21:43 -07:00
Ask Bjørn Hansen
b37a7639d3 Update dist.ini to use new names for some plugins 2012-06-05 16:12:58 -07:00
Ask Bjørn Hansen
511ee4463b Let Dist::Zilla set VERSION
Closes #17
2012-06-05 16:04:07 -07:00
Ask Bjørn Hansen
bdc9f56452 Use app->renderer->paths to find template directories
Closes #20
2012-06-05 15:53:08 -07:00
Ask Bjørn Hansen
618adbd774 "Manually" install dependencies 2012-06-05 15:19:58 -07:00
Ask Bjørn Hansen
c0b649d55f Add travis-ci configuration 2012-06-05 15:15:21 -07:00
Ask Bjørn Hansen
1e1a9ab835 Merge pull request #23 from mbethke/master
Fix error handling problem

(closes #22)
2012-06-05 15:08:42 -07:00
Matthias Bethke
96d31d45a0 Added template for render error test 2012-05-18 00:41:21 -06:00
Matthias Bethke
bbfab8db4e Checking HTTP status code for TT render error test 2012-05-18 00:40:50 -06:00
Matthias Bethke
92bb64406b Checking HTTP status code in TT render error test 2012-05-18 00:37:18 -06:00
Matthias Bethke
989ea57cf9 Fixed double TT rendering on error
If a template produced a rendering error in process() but did not produce one
when called without stash variables, the Mojo::Exception would be built
incorrectly, leading to an exception that masked the original error.
2012-05-17 14:00:17 -06:00
Ask Bjørn Hansen
b3c64c75d4 Require Mojolicious 2.51 to avoid memory leak
Closes #19
2012-02-22 08:09:40 -08:00
Ask Bjørn Hansen
a89a9a4344 Merge pull request #21 from marcusramberg/move_cache
Cache templates in tmpdir by default
2012-02-01 01:17:52 -08:00
Marcus Ramberg
78c9d24bc7 Cache templates in tmpdir by default 2012-01-25 15:11:11 +01:00
Ask Bjørn Hansen
859ec53953 Note fixes from Magnus Holm in Changes 2011-10-08 21:05:18 -07:00
Ask Bjørn Hansen
0b0acd510e Document the 'c' stash variable (RT#70866, Matthias Bethke) 2011-10-08 21:04:17 -07:00
Ask Bjørn Hansen
0527eee24a Merge pull request #18 from judofyr/cycles
Fix memory leaks
2011-09-07 09:51:25 -07:00
Magnus Holm
bd48aa5066 Fix cycles 2011-09-07 11:05:55 +02:00
Magnus Holm
77b9531fae Add test case for cycles 2011-09-07 11:04:25 +02:00
Ask Bjørn Hansen
248f13717a Mark 1.20 in Changes 2011-08-01 09:37:07 -07:00
Ask Bjørn Hansen
9f20c780b8 Add Mojolicious-Plugin-TtRenderer-* to .gitignore 2011-08-01 09:35:17 -07:00
Ask Bjørn Hansen
c7c249b51f Update distribution name 2011-08-01 09:34:46 -07:00
Cosimo Streppone
dae8329981 [GH#12] Drop MojoX::* namespace
Renamed MojoX:: namespace to Mojolicious::Plugin::TtRenderer::Engine,
so there's ::Engine, ::Helper and ::Provider.

MojoX:: is deprecated and not to be used, according to @sri.
2011-08-01 11:56:25 +02:00
Ask Bjørn Hansen
5e650027c7 Mark 1.13 in Changes 2011-06-07 17:38:43 -07:00
Ask Bjørn Hansen
698fc48b58 Compatibility with Mojolicious 1.3+ 2011-06-07 17:38:10 -07:00
Ask Bjørn Hansen
49075ebe44 v1.12 2011-02-28 00:45:24 -08:00
21 changed files with 554 additions and 73 deletions

1
.gitignore vendored
View File

@@ -6,6 +6,7 @@ _build*
pm_to_blib*
*.tar.gz
.lwpcookies
Mojolicious-Plugin-TtRenderer-*
MojoX-Renderer-TT-*
cover_db
*~

8
.travis.yml Normal file
View File

@@ -0,0 +1,8 @@
language: perl
install:
- cpanm Mojolicious Template
script: HARNESS_IS_VERBOSE=1 prove -v -Ilib t
perl:
- "5.14"
- "5.12"
- "5.10"

49
Changes
View File

@@ -1,6 +1,53 @@
Revision history for MojoX-Renderer-TT
Revision history for Mojolicious::Plugin::TtRenderer
{{$NEXT}}
- Set locale "C" in tests that rely on it
1.30 December 22, 2012
- Don't rely on English locale in the test t/tt_plugin_lite_app.t
1.29 December 18, 2012
- support multiple renderer paths
1.28 October 11, 2012
- specify minimum perl version
1.27 October 2, 2012
- documentation fixes and updates.
1.26 August 31, 2012
- Windows compatability with Cwd::abs_path
1.25 August 25, 2012
- Return 0 on not found, die on error (GH#30)
1.24 August 23, 2012
- Compatibility with Mojolicious 3.33+
1.23 August 23, 2012
- Use die instead of render_exception (GH#29)
1.22 August 21, 2012
- Compatibility with Mojolicious 3.05+ (GH#24)
- Avoid deep recursion when exception template dies (GH#25,GH26)
- Fixed test failures (GH#27,GH#28)
1.21 June 5, 2012
- Fixed double TT rendering on error (Matthias Bethke (GH#21))
- Cache templates in tmpdir by default (Marcus Ramberg)
- Require Mojolicious 2.51 to avoid memory leaks (GH#19)
- Document the 'c' stash variable (RT#70866, Matthias Bethke)
- Fix memory leaks, add tests for them (GH#18, Magnus Holm)
- Use app->renderer->paths to find template directories (GH#17)
1.20 August 1, 2011
- Drop use of MojoX namespace for Mojolicious::Plugin::TtRenderer::
(GH#12, Cosimo Streppone)
1.13 June 7, 2011
- Compatibility with Mojolicious 1.3+
1.12 February 28, 2011
- Inline wrappers and includes now work on Windows
(GH#13, Christiaan Kras)

View File

@@ -9,6 +9,7 @@
# Avoid Makemaker generated and utility files.
\bMANIFEST\.bak
\bMYMETA.*
\bMakefile$
\bblib/
\bMakeMaker-\d
@@ -41,6 +42,3 @@ t/tmp/ctpl
\.t\.log$
\.prove$
# XS shit
\.(?:bs|c|o)$

89
README.pod Normal file
View File

@@ -0,0 +1,89 @@
=encoding utf-8
=head1 NAME
Mojolicious::Plugin::TtRenderer - Template Renderer Plugin
=head1 SYNOPSIS
# Mojolicious
$self->plugin('tt_renderer');
$self->plugin(tt_renderer => {template_options => {FILTERS => [ ... ]}});
# Mojolicious::Lite
plugin 'tt_renderer';
plugin tt_renderer => {template_options => {FILTERS => [ ... ]}};
=head1 DESCRIPTION
L<Mojolicous::Plugin::TtRenderer> is a simple loader for
L<Mojolicious::Plugin::TtRenderer::Engine>.
=head1 METHODS
L<Mojolicious::Plugin::TtRenderer> inherits all methods from
L<Mojolicious::Plugin> and implements the following new ones.
=head2 C<register>
$plugin->register;
Register renderer in L<Mojolicious> application.
=head1 EXTRA STASH VARIABLES
The current controller instance can be accessed as C<c>.
[% c.req.headers.host %]
=head1 SEE ALSO
L<Mojolicious::Plugin::TtRenderer::Engine>, L<Mojolicious>, L<Mojolicious::Guides>, L<http://mojolicious.org>.
=head1 AUTHOR
Current maintainer: Graham Ollis C<< <plicease@cpan.org> >>
Original author: Ask Bjørn Hansen, C<< <ask at develooper.com> >>
=head1 BUGS
Please report any bugs or feature requests to the project's github issue tracker
L<https://github.com/abh/mojox-renderer-tt/issues?state=open>.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Mojolicious::Plugin::TtRenderer
You can also look for information at:
=over 4
=item * git repository
L<http://git.develooper.com/?p=MojoX-Renderer-TT.git;a=summary>,
L<git://git.develooper.com/MojoX-Renderer-TT.git>
L<http://github.com/abh/mojox-renderer-tt/>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/MojoX-Renderer-TT>
=item * Search CPAN
L<http://search.cpan.org/dist/MojoX-Renderer-TT/>
=back
=head1 COPYRIGHT & LICENSE
Copyright 2008-2010 Ask Bjørn Hansen, all rights reserved.
Copyright 2012 Graham Ollis.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

View File

@@ -1,12 +1,12 @@
name = MojoX-Renderer-TT
author = Ask Bjørn Hansen <ask@develooper.com>
name = Mojolicious-Plugin-TtRenderer
author = Graham Ollis <plicease@cpan.org>
license = Perl_5
copyright_holder = Ask Bjørn Hansen
# copyright_year = 2009
[Prereqs]
Mojolicious = 1.01
Mojolicious = 3.33
Template = 2.18
[Prereqs / TestRequires ]
@@ -35,14 +35,23 @@ version_regexp = ^release/(.*)
[PkgVersion]
[CheckChangeLog]
[CompileTests]
[DistManifestTests]
[Test::Compile]
[HasVersionTests]
[MetaTests]
[ReadmeFromPod]
[PodCoverageTests]
[ReadmeAnyFromPod]
type = text
filename = README
location = build
[ReadmeAnyFromPod / ReadMePodInRoot]
type = pod
filename = README.pod
location = root
[Manifest]
[NextRelease]
format = %-7v %{MMMM d, yyyy}d
[MinimumPerl]

View File

@@ -2,27 +2,30 @@ package Mojolicious::Plugin::TtRenderer;
use strict;
use warnings;
our $VERSION = '0.01';
use v5.10;
use base 'Mojolicious::Plugin';
use MojoX::Renderer::TT;
use Mojolicious::Plugin::TtRenderer::Engine;
sub register {
my ($self, $app, $args) = @_;
$args ||= {};
my $tt = MojoX::Renderer::TT->build(%$args, app => $app);
my $tt = Mojolicious::Plugin::TtRenderer::Engine->build(%$args, app => $app);
# Add "tt" handler
$app->renderer->add_handler(tt => $tt);
}
$Mojolicious::Plugin::TtRenderer::VERSION //= ('devel');
1;
__END__
=encoding utf-8
=head1 NAME
Mojolicious::Plugin::TtRenderer - Template Renderer Plugin
@@ -39,7 +42,8 @@ Mojolicious::Plugin::TtRenderer - Template Renderer Plugin
=head1 DESCRIPTION
L<Mojolicous::Plugin::TtRenderer> is a simple loader for L<MojoX::Renderer::TT>.
L<Mojolicous::Plugin::TtRenderer> is a simple loader for
L<Mojolicious::Plugin::TtRenderer::Engine>.
=head1 METHODS
@@ -52,8 +56,61 @@ L<Mojolicious::Plugin> and implements the following new ones.
Register renderer in L<Mojolicious> application.
=head1 EXTRA STASH VARIABLES
The current controller instance can be accessed as C<c>.
[% c.req.headers.host %]
=head1 SEE ALSO
L<MojoX::Renderer::TT>, L<Mojolicious>, L<Mojolicious::Guides>, L<http://mojolicious.org>.
L<Mojolicious::Plugin::TtRenderer::Engine>, L<Mojolicious>, L<Mojolicious::Guides>, L<http://mojolicious.org>.
=head1 AUTHOR
Current maintainer: Graham Ollis C<< <plicease@cpan.org> >>
Original author: Ask Bjørn Hansen, C<< <ask at develooper.com> >>
=head1 BUGS
Please report any bugs or feature requests to the project's github issue tracker
L<https://github.com/abh/mojox-renderer-tt/issues?state=open>.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Mojolicious::Plugin::TtRenderer
You can also look for information at:
=over 4
=item * git repository
L<http://git.develooper.com/?p=MojoX-Renderer-TT.git;a=summary>,
L<git://git.develooper.com/MojoX-Renderer-TT.git>
L<http://github.com/abh/mojox-renderer-tt/>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/MojoX-Renderer-TT>
=item * Search CPAN
L<http://search.cpan.org/dist/MojoX-Renderer-TT/>
=back
=head1 COPYRIGHT & LICENSE
Copyright 2008-2010 Ask Bjørn Hansen, all rights reserved.
Copyright 2012 Graham Ollis.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut

View File

@@ -1,19 +1,23 @@
package MojoX::Renderer::TT;
package Mojolicious::Plugin::TtRenderer::Engine;
use warnings;
use strict;
use v5.10;
use base 'Mojo::Base';
use Carp ();
use File::Spec ();
use Mojo::ByteStream 'b';
use Template ();
use Cwd qw/abs_path/;
use Scalar::Util 'weaken';
__PACKAGE__->attr('tt');
sub build {
my $self = shift->SUPER::new(@_);
weaken($self->{app});
$self->_init(@_);
return sub { $self->_render(@_) }
}
@@ -24,15 +28,25 @@ sub _init {
#$Template::Parser::DEBUG = 1;
my $dir;
my $app = delete $args{mojo} || delete $args{app};
if($dir=$args{cache_dir}) {
my $dir = $app && $app->home->rel_dir('tmp/ctpl');
if($app && substr($dir,0,1) ne '/') {
$dir=$app->home->rel_dir('tmp/ctpl');
}
}
# TODO
# take and process options :-)
my @renderer_paths = $app ? map { abs_path($_) } grep { -d $_ } @{ $app->renderer->paths } : ();
my %config = (
($app ? (INCLUDE_PATH => abs_path($app->home->rel_dir('templates'))) : ()),
( @renderer_paths > 0
? (INCLUDE_PATH => [@renderer_paths, 'templates'])
: ()
),
COMPILE_EXT => '.ttc',
COMPILE_DIR => ($dir || abs_path(File::Spec->tmpdir)),
UNICODE => 1,
@@ -43,7 +57,7 @@ sub _init {
);
$config{LOAD_TEMPLATES} =
[MojoX::Renderer::TT::Provider->new(%config, renderer => $app->renderer)]
[Mojolicious::Plugin::TtRenderer::Provider->new(%config, renderer => $app->renderer)]
unless $config{LOAD_TEMPLATES};
$self->tt(Template->new(\%config))
@@ -64,36 +78,31 @@ sub _render {
return unless $t;
my $helper = MojoX::Renderer::TT::Helper->new(ctx => $c);
my $helper = Mojolicious::Plugin::TtRenderer::Helper->new(ctx => $c);
# Purge previous result
$$output = '';
my @params = ({%{$c->stash}, c => $c, h => $helper}, $output, {binmode => ':utf8'});
$self->tt->{SERVICE}->{CONTEXT}->{LOAD_TEMPLATES}->[0]->ctx($c);
my $provider = $self->tt->{SERVICE}->{CONTEXT}->{LOAD_TEMPLATES}->[0];
$provider->options($options);
$provider->ctx($c);
$provider->not_found(0);
my $ok = $self->tt->process(defined $inline ? \$inline : $t, @params);
# Error
unless ($ok) {
return 0 if $provider->not_found;
my $e = Mojo::Exception->new(
$self->tt->error.'',
$self->tt->service->process(defined $inline ? \$inline : $t));
$$output = '';
$c->app->log->error(qq/Template error in "$t": $e/);
$c->render_exception($e);
$self->tt->error('');
return 0;
}
# Error
die $self->tt->error unless $ok;
return 1;
}
1; # End of MojoX::Renderer::TT
1; # End of Mojolicious::Plugin::TtRenderer::Engine
package
MojoX::Renderer::TT::Helper;
Mojolicious::Plugin::TtRenderer::Helper;
use strict;
use warnings;
@@ -123,12 +132,13 @@ sub AUTOLOAD {
1;
package
MojoX::Renderer::TT::Provider;
Mojolicious::Plugin::TtRenderer::Provider;
use strict;
use warnings;
use base 'Template::Provider';
use Scalar::Util 'weaken';
sub new {
my $class = shift;
@@ -138,35 +148,55 @@ sub new {
my $self = $class->SUPER::new(%params);
$self->renderer($renderer);
weaken($self->{renderer});
return $self;
}
sub renderer { @_ > 1 ? $_[0]->{renderer} = $_[1] : $_[0]->{renderer} }
sub ctx { @_ > 1 ? $_[0]->{ctx} = $_[1] : $_[0]->{ctx} }
sub options { @_ > 1 ? $_[0]->{options} = $_[1] : $_[0]->{options} }
sub not_found { @_ > 1 ? $_[0]->{not_found} = $_[1] : $_[0]->{not_found} }
sub _template_modified {1}
sub _template_modified {
my($self, $template) = @_;
return 1 if $self->SUPER::_template_modified($template);
return $template =~ /^templates(?:\/|\\)/;
}
sub _template_content {
my $self = shift;
my ($path) = @_;
my $options = delete $self->{options};
# Convert backslashes to forward slashes to make inline templates work on Windows
$path =~ s/\\/\//g;
my ($t) = ($path =~ m{templates\/(.*)$});
if (-r $path) {
return $self->SUPER::_template_content(@_);
}
my $data;
my $error = '';
# Try DATA section
elsif (my $d = $self->renderer->get_inline_template($self->ctx, $t)) {
return wantarray ? ($d, '', time) : $d;
if(defined $options) {
$data = $self->renderer->get_data_template($options);
$self->not_found(1) unless defined $data;
} else {
my $loader = Mojo::Loader->new;
foreach my $class (@{ $self->renderer->classes }) {
$data = $loader->data($class, $t);
last if $data;
}
}
my $data = '';
my $error = "$path: not found";
my $mod_date = time;
return wantarray ? ($data, $error, $mod_date) : $data;
unless($data) {
$data = '';
$error = "$path: not found";
}
return wantarray ? ($data, $error, time) : $data;
}
1;
@@ -177,7 +207,7 @@ __END__
=head1 NAME
MojoX::Renderer::TT - Template Toolkit renderer for Mojo
Mojolicious::Plugin::TtRenderer::Engine - Template Toolkit renderer for Mojo
=head1 SYNOPSIS
@@ -190,9 +220,9 @@ Add the handler:
$self->plugin(tt_renderer => {template_options => {FILTERS => [ ... ]}});
# Or manually
use MojoX::Renderer::TT;
use Mojolicious::Plugin::TtRenderer::Engine;
my $tt = MojoX::Renderer::TT->build(
my $tt = Mojolicious::Plugin::TtRenderer::Engine->build(
mojo => $self,
template_options => {
PROCESS => 'tpl/wrapper',
@@ -240,38 +270,41 @@ Supported parameters are
=item mojo
C<build> currently uses a C<mojo> parameter pointing to the base class (Mojo).
object. When used the INCLUDE_PATH will be set to
object. When used the INCLUDE_PATH will be set to
=item template_options
A hash reference of options that are passed to Template->new().
=item cache_dir
Absolute or relative dir to your app home, to cache processed versions of your
templates. Will default to a temp-dir if not set.
=back
=head1 AUTHOR
Ask Bjørn Hansen, C<< <ask at develooper.com> >>
Current maintainer: Graham Ollis C<< <plicease@cpan.org> >>
Original author: Ask Bjørn Hansen, C<< <ask at develooper.com> >>
=head1 TODO
* Better support non-Mojolicious frameworks
* Move the default template cache directory?
* Better way to pass parameters to the templates? (stash)
* More sophisticated default search path?
=head1 BUGS
Please report any bugs or feature requests to C<bug-mojox-renderer-tt at rt.cpan.org>,
or through the web interface at
L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=MojoX-Renderer-TT>. I will be
notified, and then you'll automatically be notified of progress on your bug as I
make changes.
Please report any bugs or feature requests to the project's github issue tracker
L<https://github.com/abh/mojox-renderer-tt/issues?state=open>.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc MojoX::Renderer::TT
perldoc Mojolicious::Plugin::TtRenderer::Engine
You can also look for information at:
@@ -284,10 +317,6 @@ L<git://git.develooper.com/MojoX-Renderer-TT.git>
L<http://github.com/abh/mojox-renderer-tt/>
=item * RT: CPAN's request tracker
L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=MojoX-Renderer-TT>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/MojoX-Renderer-TT>
@@ -298,13 +327,12 @@ L<http://search.cpan.org/dist/MojoX-Renderer-TT/>
=back
=head1 ACKNOWLEDGEMENTS
=head1 COPYRIGHT & LICENSE
Copyright 2008-2010 Ask Bjørn Hansen, all rights reserved.
Copyright 2012 Graham Ollis.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

View File

@@ -1,9 +1,10 @@
#!perl
use Test::More tests => 1;
use Test::More tests => 2;
BEGIN {
use_ok( 'MojoX::Renderer::TT' );
use_ok( 'Mojolicious::Plugin::TtRenderer' );
use_ok( 'Mojolicious::Plugin::TtRenderer::Engine' );
}
diag( "Testing MojoX::Renderer::TT $MojoX::Renderer::TT::VERSION, Perl $], $^X" );
diag( "Testing Mojolicious::Plugin::TtRenderer::Engine $Mojolicious::Plugin::TtRenderer::Engine::VERSION, Perl $], $^X" );

55
t/deep_recursion.t Normal file
View File

@@ -0,0 +1,55 @@
#!/usr/bin/env perl
use strict;
use warnings;
#BEGIN { $ENV{MOJO_MODE}='testing'; };
use utf8;
use Test::More tests => 3;
use Mojolicious::Lite;
use Test::Mojo;
# Silence
app->log->level('fatal');
plugin 'tt_renderer';
get '/exception' => sub { die };
#say app->mode;
#app->start;
#exit;
my $t = Test::Mojo->new;
$t->app->renderer->default_handler('tt');
my $deep_recursion = 0;
do {
local $SIG{__WARN__} = sub {
my $warning = shift;
if($warning =~ /Deep recursion/) {
$deep_recursion = 1;
die $warning;
}
};
$t->get_ok('/exception')
->status_is(500);
};
ok !$deep_recursion, 'no deep recursion';
__DATA__
@@ exception.development.html.tt
[% 1 + % %]
@@ exception.html.tt
[% 1 + % %]
@@ exception.testing.html.tt
[% 1 + % %]

36
t/default_template.t Normal file
View File

@@ -0,0 +1,36 @@
use strict;
use warnings;
use Test::More tests => 3;
use Test::Mojo;
use Mojolicious::Lite;
# Tell Mojolicious we want to load the TT renderer plugin
app->plugin(
tt_renderer => {
template_options => {
# These options are specific to TT
INCLUDE_PATH => 'templates',
COMPILE_DIR => 'templates_c',
COMPILE_EXT => '.ttc',
# ... anything else to be passed on to TT should go here
},
}
);
app->renderer->default_handler('tt');
get '/' => sub {
die 'foo';
};
my $t = Test::Mojo->new;
$t->get_ok('/')
->status_is(500)
->content_like(qr{foo});
__DATA__
@@ index.html.tt
anything

View File

@@ -7,7 +7,7 @@ BEGIN { $ENV{MOJO_MODE}='testing'; };
use utf8;
use Test::More tests => 31;
use Test::More tests => 39;
use Mojolicious::Lite;
use Mojo::ByteStream 'b';
@@ -16,7 +16,7 @@ use Test::Mojo;
# Silence
app->log->level('fatal');
use_ok('MojoX::Renderer::TT');
use_ok('Mojolicious::Plugin::TtRenderer::Engine');
plugin 'tt_renderer' => {template_options => {PRE_CHOMP => 1, POST_CHOMP => 1, TRIM => 1}};
@@ -26,6 +26,10 @@ get '/with_include' => 'include';
get '/with_wrapper' => 'wrapper';
get '/badinclude' => 'badinclude';
get '/badwrapper' => 'badwrapper';
get '/with_auto_wrapper' => 'auto_wrapper';
get '/inheritance_base' => 'inheritance_base';
@@ -55,6 +59,12 @@ $t->get_ok('/bar/hello')->content_is("hello");
# With include
$t->get_ok('/with_include')->content_is("HelloInclude!Hallo");
# Bad inclde
$t->get_ok('/badinclude')->status_is(500)->content_like(qr/Exception/i)->content_like(qr/bogus\.inc/);
# Bad wrapper
$t->get_ok('/badwrapper')->status_is(500)->content_like(qr/Exception/i)->content_like(qr/layouts\/bogus\.html\.tt/);
# With wrapper
$t->get_ok('/with_wrapper')->content_is("wrapped");
@@ -102,6 +112,10 @@ Hallo
Include!
[% INCLUDE 'includes/sub/include.inc' -%]
@@ badinclude.html.tt
[%- INCLUDE 'bogus.inc' -%]
not here
@@ layouts/layout.html.tt
w[%- content -%]d
@@ -110,6 +124,11 @@ w[%- content -%]d
rappe
[%- END -%]
@@ badwrapper.html.tt
[%- WRAPPER 'layouts/bogus.html.tt' %-]
not here
[%- END -%]
@@ layouts/auto_layout.html.tt
w[%- h.content -%]d

30
t/multiple_paths.t Normal file
View File

@@ -0,0 +1,30 @@
#!/usr/bin/env perl
use strict;
use warnings;
BEGIN { $ENV{MOJO_MODE}='testing'; };
use utf8;
use Test::More tests => 6;
use Mojolicious::Lite;
use Test::Mojo;
# Silence
app->log->level('fatal');
my @paths = map { app->home->rel_dir($_) } "templates/multiple_first", "templates/multiple_second";
app->renderer->paths([@paths]);
plugin 'TtRenderer';
get '/first' => 'first';
get '/second' => 'second';
my $t = Test::Mojo->new;
$t->get_ok('/first')->status_is(200)->content_like(qr/First/);
$t->get_ok('/second')->status_is(200)->content_like(qr/Second/);

View File

@@ -15,4 +15,7 @@ eval "use Pod::Coverage $min_pc";
plan skip_all => "Pod::Coverage $min_pc required for testing POD coverage"
if $@;
all_pod_coverage_ok();
plan tests => 2;
pod_coverage_ok('Mojolicious::Plugin::TtRenderer');
pod_coverage_ok('Mojolicious::Plugin::TtRenderer::Engine', { also_private => [qr{^tt$}] } );

13
t/templates/Foo.pm Normal file
View File

@@ -0,0 +1,13 @@
package
Foo;
1;
__DATA__
@@ include.inc
Hello
@@ includes/sub/include.inc
Hallo
@@ layouts/layout.html.tt
w[%- content -%]d

View File

@@ -0,0 +1,4 @@
foo
[% PROCESS doesnotexist.tt IF do_process %]
bar

View File

@@ -0,0 +1 @@
First

View File

@@ -0,0 +1 @@
Second

View File

@@ -0,0 +1 @@
Second

View File

@@ -5,6 +5,18 @@
use strict;
use warnings;
BEGIN {
#use if $^O ne 'MSWin32', POSIX => qw/setlocale LC_ALL/;
#setlocale(&LC_ALL, 'C') if $^O ne 'MSWin32';
unless($^O eq 'MSWin32') {
eval q{
use POSIX qw( setlocale LC_ALL );
setlocale(LC_ALL, 'C');
};
warn $@ if $@;
}
}
use File::Temp;
use Mojo::IOLoop;
use Test::More;
@@ -15,7 +27,7 @@ BEGIN { $ENV{MOJO_TMPDIR} ||= File::Temp::tempdir }
# Make sure sockets are working
plan skip_all => 'working sockets required for this test!'
unless Mojo::IOLoop->new->generate_port;
plan tests => 3;
plan tests => 6;
# Leela: OK, this has gotta stop. I'm going to remind Fry of his humanity the way only a woman can.
# Farnsworth: You're going to do his laundry?
@@ -30,10 +42,30 @@ plugin 'tt_renderer';
app->log->level('error');
# GET /
get '/' => 'index';
get '/' => 'index';
get '/blow' => sub {
shift->render(template => 'conditional-exception', do_process => 1);
};
my $t = Test::Mojo->new;
# Simple TT template
$t->get_ok('/')->status_is(200)
->content_like(qr/test123456/);
->content_like(qr/test123456/);
$t->get_ok('/blow')->status_is(500)->content_like(qr/file error - doesnotexist\.tt: No such file or directory/);
if(eval q{ use Devel::Cycle; 1 })
{
Devel::Cycle::find_cycle(app, sub {
my $arg = shift;
# Template::Provider (from which M::P::T::Provider inherits) has some cycles which are freed manaully by
# its DESTROY method, so we skip reporting those cycles.
unless(scalar(scalar(grep { ref($_->[2]) eq 'Mojolicious::Plugin::TtRenderer::Provider' && $_->[1] =~ /^(HEAD|TAIL|LOOKUP)$/ } @$arg)) > 0)
{
#use YAML ();
#diag YAML::Dump([ map { [ $_->[0], $_->[1], ref($_->[2]), ref($_->[3]) ] } @$arg ]);
fail('Cycle found')
}
});
};

48
t/two_data.t Normal file
View File

@@ -0,0 +1,48 @@
#!/usr/bin/env perl
use strict;
use warnings;
BEGIN { $ENV{MOJO_MODE} = 'testing' };
use utf8;
use Test::More tests => 7;
use Mojolicious::Lite;
use Test::Mojo;
use File::Temp qw( tempdir );
use FindBin ();
use lib "$FindBin::Bin/templates";
use_ok 'Foo';
push @{app->renderer->classes}, 'Foo';
plugin 'tt_renderer' => {template_options => {PRE_CHOMP => 1, POST_CHOMP => 1, TRIM => 1}};
app->log->level('fatal');
get '/with_include' => 'include';
get '/with_wrapper' => 'wrapper';
my $t = Test::Mojo->new;
# With include
$t->get_ok('/with_include')->status_is(200)->content_is("HelloInclude!Hallo");
# With wrapper
$t->get_ok('/with_wrapper')->status_is(200)->content_is("wrapped");
__DATA__
@@ wrapper.html.tt
[%- WRAPPER 'layouts/layout.html.tt' -%]
rappe
[%- END -%]
@@ include.html.tt
[%- INCLUDE 'include.inc' -%]
Include!
[%- INCLUDE 'includes/sub/include.inc' -%]