[Templates-cvs] cvs commit: TT3/t base.t
cvs@template-toolkit.org
cvs@template-toolkit.org
Wed, 03 Dec 2003 14:04:21 +0000
cvs 03/12/03 14:04:21
Added: t base.t
Log:
added Template::Toolkit::Base and t/base.t
Revision Changes Path
1.1 TT3/t/base.t
Index: base.t
===================================================================
#============================================================= -*-perl-*-
#
# t/base.t
#
# Test the Template::Toolkit::Base.pm module.
#
# 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: base.t,v 1.1 2003/12/03 14:04:21 abw Exp $
#
#========================================================================
use strict;
use warnings;
use lib qw( ./lib ../lib );
use Template::Toolkit::Base;
use Test::More tests => 43;
$Template::Toolkit::Base::DEBUG = grep(/^--?d(ebug)?/, @ARGV);
my ($pkg, $obj);
#------------------------------------------------------------------------
# basic test of constructor
#------------------------------------------------------------------------
# instantiate a base class object and test error reporting/returning
$pkg = 'Template::Toolkit::Base';
$obj = $pkg->new() || die $pkg->error();
ok( $obj, 'created a base class object' );
#------------------------------------------------------------------------
# test the error() method
#------------------------------------------------------------------------
ok( ! defined $obj->error('barf'), 'set object error' );
ok( $obj->error() eq 'barf', 'got object error' );
#------------------------------------------------------------------------
# test the warning() and warnings() object methods
#------------------------------------------------------------------------
ok( ! $obj->warning('first warning'), 'sent first warning' );
my $warnings = $obj->warning() || die "no warnings returned\n";
ok( $warnings, 'got warnings back' );
is( ref $warnings, 'ARRAY', 'warnings is an array ref' );
is( scalar @$warnings, 1, 'has one item' );
is( $warnings->[0], 'first warning', 'first warning correct' );
ok( ! $obj->warning('second ', 'warning'), 'sent second warning' );
is( scalar @$warnings, 2, 'has two items' );
is( $warnings->[0], 'first warning', 'first warning still correct' );
is( $warnings->[1], 'second warning', 'second warning correct' );
ok( ! $obj->warning({ test => 'reference' }), 'sent reference warning' );
is( $warnings->[2]->{ test }, 'reference', 'got reference warning back' );
# warnings() returns list in list context
my @warns = $obj->warnings();
is( $warns[0], 'first warning', 'list warning one' );
is( $warns[1], 'second warning', 'list warning two' );
# warnings() returns list ref in scalar context
my $warns = $obj->warnings();
is( $warns->[0], 'first warning', 'list ref warning one' );
is( $warns->[1], 'second warning', 'list ref warning two' );
# warnings($a, $b, $c) sets several warnings
ok( ! $obj->warnings('foo', 'bar', { ping => 'pong' }), 'set warnings' );
is( $warns->[3], 'foo', 'foo warning' );
is( $warns->[4], 'bar', 'bar warning' );
is( $warns->[5]->{ ping }, 'pong', 'game of ping pong' );
#------------------------------------------------------------------------
# test the warning() and warnings() class methods
#------------------------------------------------------------------------
package Template::Test::Warning;
use base qw( Template::Toolkit::Base );
use vars qw( $WARNING );
package main;
my $wpkg = 'Template::Test::Warning';
is( $wpkg->warning('warning one'), 0, 'sent first pkg warning' );
$warns = $wpkg->warning();
ok( $warns, 'got package warnings back' );
is( ref $warns, 'ARRAY', 'it is an array' );
is( scalar @$warns, '1', 'it has one entry' );
is( $warns->[0], 'warning one', 'package warning is correct' );
is( $wpkg->warning('two'), 0, 'sent second pkg warning' );
is( join(', ', $wpkg->warnings()), 'warning one, two',
'got back both package warnings' );
is( $wpkg->warnings('three', 'four'), 0,
'sent third and fourth pkg warning' );
is( join(', ', $wpkg->warnings()), 'warning one, two, three, four',
'got back all four package warnings' );
#------------------------------------------------------------------------
# Template::Test::Fail always fails, but we check it reports errors OK
#------------------------------------------------------------------------
package Template::Test::Fail;
use base qw( Template::Toolkit::Base );
use vars qw( $ERROR $WARNING );
sub init {
my $self = shift;
return $self->error('expected failure');
}
package main;
# Template::Test::Fail should never work, but we check it reports errors OK
$pkg = 'Template::Test::Fail';
ok( ! $pkg->new(), 'test fail failed' );
is( $pkg->error, 'expected failure', 'got object error' );
is( $Template::Test::Fail::ERROR, 'expected failure', 'got package error' );
#------------------------------------------------------------------------
# Template::Test::Name should only work with a 'name' parameter
#------------------------------------------------------------------------
package Template::Test::Name;
use base qw( Template::Toolkit::Base );
use vars qw( $ERROR );
sub init {
my ($self, $params) = @_;
$self->{ NAME } = $params->{ name }
|| return $self->error("No name!");
return $self;
}
sub name {
$_[0]->{ NAME };
}
package main;
$pkg = 'Template::Test::Name';
$obj = $pkg->new();
ok( ! $obj, 'name test failed' );
is( $Template::Test::Name::ERROR, 'No name!', 'name error variable' );
is( $pkg->error(), 'No name!', 'name error method' );
# give it what it wants...
$obj = $pkg->new({ name => 'foo' }) || die $pkg->error();
ok( $obj, 'created name object' );
ok( ! $obj->error(), 'no error' );
is( $obj->name(), 'foo', 'name matches' );
# ... in 2 different flavours
$obj = $pkg->new(name => 'foo') || die $pkg->error();
ok( $obj, 'got args object' );
ok( ! $obj->error(), 'no args error' );
is( $obj->name(), 'foo', 'args name matches' );
__END__