Mini Shell
#============================================================= -*-perl-*-
#
# t/config.t
#
# Test the Template::Config module.
#
# Written by Andy Wardley <abw@wardley.org>
#
# Copyright (C) 1996-2000 Andy Wardley. All Rights Reserved.
# Copyright (C) 1998-2000 Canon Research Centre Europe Ltd.
#
# This is free software; you can redistribute it and/or modify it
# under the same terms as Perl itself.
#
# $Id$
#
#========================================================================
use strict;
use lib qw( ./lib ../lib );
our $DEBUG;
use Template::Test;
use Template::Config;
ntests(44);
$DEBUG = 0;
$Template::Config::DEBUG = 0;
my $factory = 'Template::Config';
#------------------------------------------------------------------------
# parser
#------------------------------------------------------------------------
print STDERR "Testing parser...\n" if $DEBUG;
my $parser;
$parser = $factory->parser(PRE_CHOMP => 1, INTERPOLATE => 1)
|| print STDERR $factory->error(), "\n";
ok( $parser );
ok( $parser->{ PRE_CHOMP } == 1);
ok( $parser->{ INTERPOLATE } == 1);
$parser = $factory->parser({ POST_CHOMP => 1 })
|| print STDERR $factory->error(), "\n";
ok( $parser );
ok( $parser->{ POST_CHOMP } == 1);
#------------------------------------------------------------------------
# provider
#------------------------------------------------------------------------
print STDERR "Testing provider...\n" if $DEBUG;
my $provider;
$provider = $factory->provider(INCLUDE_PATH => 'here:there',
PARSER => $parser)
|| print STDERR $factory->error(), "\n";
ok( $provider );
ok( join('...', @{ $provider->{ INCLUDE_PATH } }) eq 'here...there' );
ok( $provider->{ PARSER }->{ POST_CHOMP } == 1);
$provider = $factory->provider({
INCLUDE_PATH => 'cat:mat',
ANYCASE => 1,
INTERPOLATE => 1
}) || print STDERR $factory->error(), "\n";
ok( $provider );
ok( join('...', @{ $provider->{ INCLUDE_PATH } }) eq 'cat...mat' );
# force provider to instantiate a parser and check it uses the correct
# parameters.
my $text = 'The cat sat on the mat';
ok( $provider->fetch(\$text) );
ok( $provider->{ PARSER }->{ ANYCASE } == 1);
ok( $provider->{ PARSER }->{ INTERPOLATE } == 1);
#------------------------------------------------------------------------
# plugins
#------------------------------------------------------------------------
print STDERR "Testing plugins...\n" if $DEBUG;
my $plugins;
$plugins = $factory->plugins(PLUGIN_BASE => 'MyPlugins')
|| print STDERR $factory->error(), "\n";
ok( $plugins );
ok( join('+', @{$plugins->{ PLUGIN_BASE }}) eq 'MyPlugins+Template::Plugin' );
$plugins = $factory->plugins({
LOAD_PERL => 1,
PLUGIN_BASE => 'NewPlugins',
}) || print STDERR $factory->error(), "\n";
ok( $plugins );
ok( $plugins->{ LOAD_PERL } == 1 );
ok( join('+', @{$plugins->{ PLUGIN_BASE }}) eq 'NewPlugins+Template::Plugin' );
#------------------------------------------------------------------------
# filters
#------------------------------------------------------------------------
print STDERR "Testing filters...\n" if $DEBUG;
my $filters;
$filters = $factory->filters(TOLERANT => 1)
|| print STDERR $factory->error(), "\n";
ok( $filters );
ok( $filters->{ TOLERANT } == 1);
$filters = $factory->filters({ TOLERANT => 1 })
|| print STDERR $factory->error(), "\n";
ok( $filters );
ok( $filters->{ TOLERANT } == 1);
#------------------------------------------------------------------------
# stash
#------------------------------------------------------------------------
print STDERR "Testing stash...\n" if $DEBUG;
my $stash;
$stash = $factory->stash(foo => 10, bar => 20)
|| print STDERR $factory->error(), "\n";
ok( $stash );
ok( $stash->get('foo') == 10);
ok( $stash->get('bar') == 20);
$stash = $factory->stash({
foo => 30,
bar => sub { 'forty' },
}) || print STDERR $factory->error(), "\n";
ok( $stash );
ok( $stash->get('foo') == 30);
ok( $stash->get('bar') eq 'forty' );
#------------------------------------------------------------------------
# context
#------------------------------------------------------------------------
print STDERR "Testing context...\n" if $DEBUG;
my $context;
$context = $factory->context()
|| print STDERR $factory->error(), "\n";
ok( $context );
$context = $factory->context(INCLUDE_PATH => 'anywhere')
|| print STDERR $factory->error(), "\n";
ok( $context );
ok( $context->{ LOAD_TEMPLATES }->[0]->{ INCLUDE_PATH }->[0] eq 'anywhere' );
$context = $factory->context({
LOAD_TEMPLATES => [ $provider ],
LOAD_PLUGINS => [ $plugins ],
LOAD_FILTERS => [ $filters ],
STASH => $stash,
}) || print STDERR $factory->error(), "\n";
ok( $context );
ok( $context->stash->get('foo') == 30 );
ok( $context->{ LOAD_TEMPLATES }->[0]->{ PARSER }->{ INTERPOLATE } == 1);
ok( $context->{ LOAD_PLUGINS }->[0]->{ LOAD_PERL } == 1 );
ok( $context->{ LOAD_FILTERS }->[0]->{ TOLERANT } == 1 );
#------------------------------------------------------------------------
# service
#------------------------------------------------------------------------
print STDERR "Testing service...\n" if $DEBUG;
my $service;
$service = $factory->service(INCLUDE_PATH => 'amsterdam')
|| print STDERR $factory->error(), "\n";
ok( $service );
ok( $service->{ CONTEXT }->{ LOAD_TEMPLATES }->[0]->{ INCLUDE_PATH }->[0]
eq 'amsterdam' );
#------------------------------------------------------------------------
# iterator
#------------------------------------------------------------------------
print STDERR "Testing iterator...\n" if $DEBUG;
my ($iterator, $value, $error);
$iterator = $factory->iterator([qw(foo bar baz)])
|| print STDERR $factory->error(), "\n";
ok( $iterator );
($value, $error) = $iterator->get_first();
ok( $value eq 'foo' );
($value, $error) = $iterator->get_next();
ok( $value eq 'bar' );
($value, $error) = $iterator->get_next();
ok( $value eq 'baz' );
#------------------------------------------------------------------------
# instdir
#------------------------------------------------------------------------
my $idir = Template::Config->instdir();
if ($Template::Config::INSTDIR) {
ok( $idir eq $Template::Config::INSTDIR );
}
else {
ok( ! defined($idir)
&& $Template::Config::ERROR eq 'no installation directory' );
}
my $tdir = Template::Config->instdir('templates');
if ($Template::Config::INSTDIR) {
ok( $tdir eq "$Template::Config::INSTDIR/templates" );
}
else {
ok( ! defined($tdir)
&& $Template::Config::ERROR eq 'no installation directory' );
}
Zerion Mini Shell 1.0