]> git.imager.perl.org - bse.git/blob - t/020-templater/050-error.t
allow hypens in formlink form name values
[bse.git] / t / 020-templater / 050-error.t
1 #!perl -w
2 use strict;
3
4 # error handling tests
5 use Squirrel::Template;
6 use Test::More;
7 use Carp qw(confess);
8 use Data::Dumper;
9
10 my @tests =
11   (
12    {
13     name => "missing : in ?:",
14     template => "<:= foo ? bar :>",
15     errors =>
16     [
17      [ error => '', 1, 'test.tmpl', "Expected : for ? : operator but found eof" ],
18     ],
19     result => q/* Expected : for ? : operator but found eof */,
20    },
21    {
22     name => "unrecognized junk after expr",
23     template => "<:= foo ; :>",
24     errors =>
25     [
26      [ error => '', 1, 'test.tmpl', "Expected eof but found op;" ],
27     ],
28     result => q/* Expected eof but found op; */,
29    },
30    {
31     name => "ranges chained",
32     template => "<:= [ 1...3...4 ] :>",
33     errors =>
34     [
35      [ error => '', 1, 'test.tmpl', "Can't use a range as the start of a range" ],
36     ],
37     result => q/* Can't use a range as the start of a range */,
38    },
39    {
40     name => "name.junk",
41     template => "<:= name.; :>",
42     errors =>
43     [
44      [ error => '', 1, 'test.tmpl', q(Expected a method name or $var after '.' but found ;) ],
45     ],
46     result => q/* Expected a method name or $var after '.' but found ; */,
47    },
48    {
49     name => "name.\$junk",
50     template => "<:= name.\$; :>",
51     errors =>
52     [
53      [ error => '', 1, 'test.tmpl', "Expected an identifier after .\$ but found ;" ],
54     ],
55     result => q/* Expected an identifier after .$ but found ; */,
56    },
57    {
58     name => "unterminated list",
59     template => "<:= [ 1 :>",
60     errors =>
61     [
62      [ error => '', 1, 'test.tmpl', "Expected list end ']' but got eof" ],
63     ],
64     result => q/* Expected list end ']' but got eof */,
65    },
66    {
67     name => "unterminated subscript",
68     template => "<:= name[1 :>",
69     errors =>
70     [
71      [ error => '', 1, 'test.tmpl', "Expected closing ']' but got eof" ],
72     ],
73     result => q/* Expected closing ']' but got eof */,
74    },
75   );
76
77 plan tests => 3 * scalar(@tests);
78
79 my %acts = ();
80
81 my %vars = ();
82
83 # the following ensures the code isolates evals from __DIE__handlers
84 $SIG{__DIE__} = sub { confess @_ };
85
86 for my $test (@tests) {
87   my ($name, $template, $want_errors, $want_result) =
88     @$test{qw/name template errors result/};
89
90   my $t = Squirrel::Template->new;
91   my $result;
92   my $good = eval {
93     $result = $t->replace_template($template, \%acts, undef, 'test.tmpl', \%vars);
94     1;
95   };
96   ok($good, "$name: compile and run template");
97   is($result, $want_result, "$name: expected template result");
98   is_deeply([ $t->errors ], $want_errors, "$name: expected errors")
99     or note Dumper([$t->errors]);
100 }