#============================================================= -*-perl-*- # # t/config.t # # Test the Template::Config module. # # Written by Andy Wardley # # 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 ); use vars qw( $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' ); }