The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#============================================================= -*-perl-*-
#
# t/directive.t
#
# Test basic directive layout and processing options.
#
# 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 );
use Template::Test;
$^W = 1;

my $ttobjs = [ 
    tt   => Template->new(),
    pre  => Template->new( PRE_CHOMP => 1 ),
    post => Template->new( POST_CHOMP => 1 ),
    trim => Template->new( INCLUDE_PATH => -d 't' ? 't/test/lib' : 'test/lib',
			   TRIM => 1 ),
];

test_expect(\*DATA, $ttobjs, callsign);

__DATA__
#------------------------------------------------------------------------
# basic directives
#------------------------------------------------------------------------
-- test --
[% a %]
[%a%]
-- expect --
alpha
alpha

-- test --
pre [% a %]
pre[% a %]
-- expect --
pre alpha
prealpha

-- test --
[% a %] post
[% a %]post
-- expect --
alpha post
alphapost

-- test --
pre [% a %] post
pre[% a %]post
-- expect --
pre alpha post
prealphapost

-- test --
[% a %][%b%][% c %]
-- expect --
alphabravocharlie

-- test --
[% 
a %][%b
%][%
c
%][%
         d
%]
-- expect --
alphabravocharliedelta

#------------------------------------------------------------------------
# comments
#------------------------------------------------------------------------
-- test --
[%# this is a comment which should
    be ignored in totality
%]hello world
-- expect --
hello world

-- test -- 
[% # this is a one-line comment
   a
%]
-- expect --
alpha

-- test -- 
[% # this is a two-line comment
   a =
   # here's the next line
   b
-%]
[% a %]
-- expect --
bravo

-- test --
[% a = c   # this is a comment on the end of the line
   b = d   # so is this
-%]
a: [% a %]
b: [% b %]
-- expect --
a: charlie
b: delta

#------------------------------------------------------------------------
# manual chomping
#------------------------------------------------------------------------

-- test --
[% a %]
[% b %]
-- expect --
alpha
bravo

-- test --
[% a -%]
[% b %]
-- expect --
alphabravo

-- test --
[% a -%]
     [% b %]
-- expect --
alpha     bravo

-- test --
[% a %]
[%- b %]
-- expect --
alphabravo

-- test --
[% a %]
     [%- b %]
-- expect --
alphabravo

-- test --
start
[% a %]
[% b %]
end
-- expect --
start
alpha
bravo
end

-- test --
start
[%- a %]
[% b -%]
end
-- expect --
startalpha
bravoend

-- test --
start
[%- a -%]
[% b -%]
end
-- expect --
startalphabravoend

-- test --
start
[%- a %]
[%- b -%]
end
-- expect --
startalphabravoend

#------------------------------------------------------------------------
# PRE_CHOMP enabled 
#------------------------------------------------------------------------

-- test --
-- use pre --
start
[% a %]
mid
[% b %]
end
-- expect --
startalpha
midbravo
end

-- test --
start
     [% a %]
mid
	[% b %]
end
-- expect --
startalpha
midbravo
end

-- test --
start
[%+ a %]
mid
[% b %]
end
-- expect --
start
alpha
midbravo
end

-- test --
start
   [%+ a %]
mid
[% b %]
end
-- expect --
start
   alpha
midbravo
end

-- test --
start
   [%- a %]
mid
   [%- b %]
end
-- expect --
startalpha
midbravo
end

#------------------------------------------------------------------------
# POST_CHOMP enabled 
#------------------------------------------------------------------------

-- test --
-- use post --
start
[% a %]
mid
[% b %]
end
-- expect --
start
alphamid
bravoend

-- test --
start
     [% a %]
mid
	[% b %]        
end
-- expect --
start
     alphamid
	bravoend

-- test --
start
[% a +%]
mid
[% b %]
end
-- expect --
start
alpha
mid
bravoend

-- test --
start
[% a +%]   
[% b +%]
end
-- expect --
start
alpha   
bravo
end

-- test --
start
[% a -%]
mid
[% b -%]
end
-- expect --
start
alphamid
bravoend


#------------------------------------------------------------------------
# TRIM enabled
#------------------------------------------------------------------------
-- test --
-- use trim --

[% INCLUDE trimme %]


-- expect --
I am a template element file which will get TRIMmed


-- test --
[% BLOCK foo %]

this is block foo

[% END -%]

[% BLOCK bar %]

this is block bar

[% END %]

[% INCLUDE foo %]
[% INCLUDE bar %]
end
-- expect --
this is block foo
this is block bar
end


-- test --
<foo>[% PROCESS foo %]</foo>
<bar>[% PROCESS bar %]</bar>
[% BLOCK foo %]

this is block foo

[% END -%]
[% BLOCK bar %]

this is block bar

[% END -%]
end
-- expect --
<foo>this is block foo</foo>
<bar>this is block bar</bar>
end


-- test --
[% r; r = s; "-"; r %].
-- expect --
romeo-sierra.

-- test --
[% IF a; b; ELSIF c; d; ELSE; s; END %]
-- expect --
bravo