File: 07-file.t

package info (click to toggle)
libtext-microtemplate-perl 0.18-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 272 kB
  • sloc: perl: 1,563; makefile: 2
file content (107 lines) | stat: -rw-r--r-- 3,687 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
use strict;
use warnings;
use Test::More tests => 25;
use Cwd qw(abs_path);
use File::Temp qw(tempdir);

BEGIN {
    use_ok('Text::MicroTemplate::File');
};

# simple test
do {
    my $mtf = Text::MicroTemplate::File->new(
        include_path => 't/07-file',
    );
    is $mtf->render_file('hello.mt', 'John')->as_string, "Hello, John\n";
    is $mtf->render_file('include.mt', 'John')->as_string, "head\nHello, John\n\nfoot\n";
    is $mtf->render_file('package.mt')->as_string, "main\n", 'default package';
    is $mtf->render_file('wrapped.mt')->as_string, "abc\nheader\ndef\n\nfooter\nghi\n", 'wrapper';
    is $mtf->render_file('wrapped2.mt')->as_string, "abc\nheader\ndef\nheader\nghi\n\nfooter\njkl\n\nfooter\nmno\n", 'wrapper';
    is $mtf->render_file('wrapped_escape.mt')->as_string, "abc\nheader\n<def>\n\nfooter\nghi\n", 'wrapper';
    is $mtf->render_file('pod.mt')->as_string, "0\n", 'pod';
};

# accessor
do {
    my $mtf = Text::MicroTemplate::File->new(
        include_path => 't/07-file',
    );
    is_deeply $mtf->include_path, ['t/07-file'];
    is $mtf->open_layer, ':utf8';
    is $mtf->use_cache, '0';
    is $mtf->package_name, 'main';
};

# absolute path
do {
    my $mtf = Text::MicroTemplate::File->new();
    my $filepath = abs_path('t/07-file/hello.mt');
    is $mtf->render_file($filepath, 'John')->as_string, "Hello, John\n";
};

# package name
do {
    my $mtf = Text::MicroTemplate::File->new(
        include_path => 't/07-file',
        package_name => 'foo',
    );
    is $mtf->render_file('hello.mt', 'John')->as_string, "Hello, John\n";
    is $mtf->render_file('include.mt', 'John')->as_string, "head\nHello, John\n\nfoot\n";
    is $mtf->render_file('package.mt')->as_string, "foo\n", 'package';
};

# cache
do {
    my $dir = tempdir(CLEANUP => 1);
    my $rewrite = sub {
        open my $fh, '>', "$dir/t.mt"
            or die "cannot open $dir/t.mt:$!";
        print $fh @_;
        close $fh;
    };
    my $mtf =Text::MicroTemplate::File->new(
        include_path => $dir,
        use_cache    => 1,
    );
    $rewrite->(1);
    is $mtf->render_file('t.mt')->as_string, '1', 'cache=1 read';
    is $mtf->render_file('t.mt')->as_string, '1', 'cache=1 retry';
    sleep 2;
    $rewrite->(2);
    is $mtf->render_file('t.mt')->as_string, '2', 'cache=1 update';
    is $mtf->render_file('t.mt')->as_string, '2', 'cache=1 update retry';
    # set mode to 2 and remove
    $mtf->use_cache(2);
    unlink "$dir/t.mt"
        or die "failed to remove $dir/t.mt:$!";
    is $mtf->render_file('t.mt')->as_string, '2', 'cache=2 read after cached';
};

# open_layer (default=:utf8)
do {
    use utf8;
    my $mtf = Text::MicroTemplate::File->new(
        include_path => 't/07-file',
    );

    my $output = $mtf->render_file('konnitiwa.mt', '世界')->as_string;
    is $output, 'こんにちは、世界', 'utf8 flagged render ok';
    ok utf8::is_utf8($output), 'utf8 flagged output ok';
};

SKIP: {
    skip "Perl < 5.8.3 has bug around join.see perl583delta.pod", 2 if $] < 5.008003;
    # perl583delta.pod says
    # > join() could return garbage when the same join() statement was used to process 8 bit data having earlier processed UTF8 data, due to the flags on that statement's temporary workspace not being reset correctly. This is now fixed.
    # We hope, this is not critical issue in real world.
    no utf8;
    my $mtf = Text::MicroTemplate::File->new(
        include_path => 't/07-file',
        open_layer   => '',
    );

    my $output = $mtf->render_file('konnitiwa.mt', '世界')->as_string;
    is $output, 'こんにちは、世界', 'utf8 bytes render ok';
    ok !utf8::is_utf8($output), 'utf8 bytes output ok';
};