1#============================================================= -*-perl-*- 2# 3# t/base.t 4# 5# Test the Template::Base.pm module. 6# 7# Written by Andy Wardley <abw@kfs.org> 8# 9# Copyright (C) 1996-2000 Andy Wardley. All Rights Reserved. 10# Copyright (C) 1998-2000 Canon Research Centre Europe Ltd. 11# 12# This is free software; you can redistribute it and/or modify it 13# under the same terms as Perl itself. 14# 15# $Id$ 16# 17#======================================================================== 18 19use strict; 20use lib qw( ./lib ../lib ); 21use Template::Test; 22 23ntests(24); 24 25 26#------------------------------------------------------------------------ 27# a dummy module, derived from Template::Base and destined for failure 28#------------------------------------------------------------------------ 29package Template::Fail; 30use base qw( Template::Base ); 31use vars qw( $ERROR ); 32use Template::Base; 33 34sub _init { 35 my $self = shift; 36 return $self->error('expected failure'); 37} 38 39 40#------------------------------------------------------------------------ 41# another dummy module, expecting a 'name' parameter 42#------------------------------------------------------------------------ 43package Template::Named; 44use base qw( Template::Base ); 45use vars qw( $ERROR ); 46use Template::Base; 47 48sub _init { 49 my ($self, $params) = @_; 50 $self->{ NAME } = $params->{ name } 51 || return $self->error("No name!"); 52 return $self; 53} 54 55sub name { 56 $_[0]->{ NAME }; 57} 58 59 60#------------------------------------------------------------------------ 61# module to test version 62#------------------------------------------------------------------------ 63package Template::Version; 64use Template::Base; 65use base qw( Template::Base ); 66use vars qw( $ERROR $VERSION ); 67$VERSION = 3.14; 68 69 70#------------------------------------------------------------------------ 71# main package, run some tests 72#------------------------------------------------------------------------ 73package main; 74 75my ($mod, $pkg); 76 77# instantiate a base class object and test error reporting/returning 78$mod = Template::Base->new(); 79ok( $mod ); 80$mod->error('barf'); 81ok( $mod->error() eq 'barf' ); 82 83# Template::Fail should never work, but we check it reports errors OK 84ok( ! Template::Fail->new() ); 85ok( Template::Fail->error eq 'expected failure'); 86ok( $Template::Fail::ERROR eq 'expected failure'); 87 88# Template::Named should only work with a 'name'parameters 89$mod = Template::Named->new(); 90ok( ! $mod ); 91ok( $Template::Named::ERROR eq 'No name!' ); 92ok( Template::Named->error() eq 'No name!' ); 93 94# give it what it wants... 95$mod = Template::Named->new({ name => 'foo' }); 96ok( $mod ); 97ok( $mod->name() eq 'foo' ); 98ok( ! $mod->error() ); 99 100# ... in 2 different flavours 101$mod = Template::Named->new(name => 'foo'); 102ok( $mod ); 103ok( $mod->name() eq 'foo' ); 104ok( ! $mod->error() ); 105 106# test the use of error() for setting and retrieving object errors 107ok( ! defined $mod->error('more errors') ); 108ok( $mod->error() eq 'more errors' ); 109 110# check package error is still set, then clear. 111ok( Template::Named->error() eq 'No name!' ); 112$Template::Named::ERROR = ''; 113 114# test via $pkg indirection 115$pkg = 'Template::Named'; 116$mod = $pkg->new(); 117ok( ! $mod ); 118ok( $pkg->error eq 'No name!' ); 119 120$mod = $pkg->new({ name => 'bar' }); 121ok( $mod && $mod->name eq 'bar' ); 122ok( ! $mod->error ); 123 124#------------------------------------------------------------------------ 125# test module_version() method 126#------------------------------------------------------------------------ 127 128$pkg = 'Template::Version'; 129is( $pkg->module_version(), 3.14, 'package version' ); 130 131my $obj = $pkg->new() || die $pkg->error(); 132ok( $obj, 'created a version object' ); 133is( $obj->module_version(), 3.14, 'object version' ); 134 135 136