[Templates-cvs] cvs commit: TT3/t/parser assign.t
cvs@template-toolkit.org
cvs@template-toolkit.org
Thu, 02 Dec 2004 18:25:33 +0000
cvs 04/12/02 18:25:33
Added: t/parser assign.t
Log:
* added tests in t/parser/assign.t to test the various parser methods
that parse assignments
Revision Changes Path
1.1 TT3/t/parser/assign.t
Index: assign.t
===================================================================
#============================================================= -*-perl-*-
#
# t/parser/assign.t
#
# Test the Template::Parser module and the various methods to parse
# assignments.
#
# Written by Andy Wardley <abw@wardley.org>
#
# This is free software; you can redistribute it and/or modify it
# under the same terms as Perl itself.
#
# $Id: assign.t,v 1.1 2004/12/02 18:25:32 abw Exp $
#
#========================================================================
use strict;
use warnings;
use lib qw( ./lib ../lib ../../lib );
use Template::Parser;
use Template::Generator::Debug;
use Template::Test tests => 25, import => ':all';
our $DEBUG =
$Template::Parser::DEBUG =
grep(/^--?d(ebug)?/, @ARGV);
my $ppkg = 'Template::Parser';
my $gpkg = 'Template::Generator::Debug';
my $parser = $ppkg->new()
|| die $ppkg->error();
ok( $parser, "created a parser" );
my $method = 'parse_assign_expr';
my $required = 0;
my $generator = $gpkg->new()
|| die $gpkg->error();
ok( $generator, "created a generator" );
test_expect({
handler => \&parse,
ok => \&ok
});
sub parse {
my $test = shift;
my $input = $test->{ input };
my $result = '';
if (my $new_method = (grep(/^parse_/, @{ $test->{ inflags } }))[0]) {
if (UNIVERSAL::can($parser, $new_method)) {
$method = $new_method;
}
else {
die "invalid parser method: $new_method\n";
}
}
if ($test->{ inflag }->{ required }) {
$required = 1;
}
elsif ($test->{ inflag }->{ not_required }) {
$required = 0;
}
my $expr = eval {
$parser->$method(\$input, required => $required);
};
if ($expr) {
$expr = $generator->generate($expr);
die "generator failed: ", $generator->error()
unless defined $expr;
}
elsif ($@) {
my $error = ref($@) ? $@->info() : $@;
$expr = "<ERROR:$error>";
}
else {
$expr = '<DECLINED:' . $parser->error() . '>';
}
return $expr;
}
__END__
#------------------------------------------------------------------------
# parse_assign_expr()
#------------------------------------------------------------------------
-- test assign expression --
-- parse_assign_expr --
=10
-- expect --
<number:10>
-- test assign with whitespace --
=
20
-- expect --
<number:20>
-- test arrow assign --
=> 30
-- expect --
<number:30>
-- test assign expression with comments --
# comment before
= # comment between
40 # comment after
-- expect --
<number:40>
-- test missing expression --
=
-- expect --
<ERROR:missing expression after '='>
-- test bad expression --
= &
-- expect --
<ERROR:missing expression after '=' (got '&')>
#------------------------------------------------------------------------
# parse_ident_assign_expr()
#------------------------------------------------------------------------
-- test ident assign expression --
-- parse_ident_assign_expr --
foo=100
-- expect --
<foo:
<number:100>
>
-- test missing assignment after ident --
bar
-- expect --
<DECLINED:not an assignment>
-- test missing expression after ident --
bar=
-- expect --
<ERROR:missing expression after '='>
-- test strings not allowed as idents --
'foo' = 200
-- expect --
<DECLINED:not an identifier>
-- test dotted variables are not allowed as idents --
foo.bar = 205
-- expect --
<DECLINED:not an assignment>
-- test missing assignment after ident required --
-- required --
bar
-- expect --
<ERROR:missing assignment after identifier 'bar'>
-- test dotted variables are not allowed as idents req --
foo.bar = 205
-- expect --
<ERROR:missing assignment after identifier 'foo' (got '.bar')>
#------------------------------------------------------------------------
# parse_key_assign_expr()
#------------------------------------------------------------------------
-- test key assign expression --
-- parse_key_assign_expr --
foo=210
-- expect --
[
<ident:foo>
<number:210>
]
-- test single quoted strings are allowed as keys --
'foo' = 220
-- expect --
[
<squote:foo>
<number:220>
]
-- test double quoted strings are allowed as keys --
"foo" = 230
-- expect --
[
<dquote:
<text:foo>
>
<number:230>
]
-- test dotted variables are not allowed as keys --
-- not_required --
bar.baz = 240
-- expect --
<DECLINED:not an assignment>
-- test missing assignment after key --
bar
-- expect --
<DECLINED:not an assignment>
-- test missing expression after key --
bar=
-- expect --
<ERROR:missing expression after '='>
-- test dotted variables are not allowed as keys req --
-- required --
bar.baz = 240
-- expect --
<ERROR:missing assignment after key 'bar' (got '.baz')>
-- test required assignment after key --
bar
-- expect --
<ERROR:missing assignment after key 'bar'>
-- test required assignment after single quoted key --
'bar'
-- expect --
<ERROR:missing assignment after key 'bar'>
-- test required assignment after double quoted key --
"bar$baz"
-- expect --
<ERROR:missing assignment after key "bar$baz">
__END__
# Local Variables:
# mode: perl
# perl-indent-level: 4
# indent-tabs-mode: nil
# End:
#
# vim: expandtab shiftwidth=4: