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