The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#============================================================= -*-perl-*-
#
# t/xmlstyle.t
#
# Test the XML::Style plugin.
#
# Written by Andy Wardley <abw@kfs.org>
#
# Copyright (C) 1996-2001 Andy Wardley.  All Rights Reserved.
# Copyright (C) 1998-2001 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: xmlstyle.t,v 1.5 2003/03/17 22:34:14 abw Exp $
# 
#========================================================================

use strict;
use lib qw( ./lib ../lib ../blib/arch );
use Template;
use Template::Test;
use Cwd qw( abs_path );
$^W = 1;

$Template::Test::PRESERVE = 1;

test_expect(\*DATA);

__END__
-- test --
[% USE xmlstyle -%]
[% FILTER xmlstyle -%]
<foo>The foo</foo>
<bar>The bar</bar>
[%- END %]
-- expect --
<foo>The foo</foo>
<bar>The bar</bar>

-- test --
[% USE xmlstyle foo = { element = 'bar' } -%]
[% FILTER xmlstyle -%]
<foo>The foo</foo>
<bar>The bar</bar>
[%- END %]
-- expect --
<bar>The foo</bar>
<bar>The bar</bar>

-- test --
[% USE xmlstyle foo = { element = 'baz' } -%]
[% FILTER xmlstyle -%]
<foo>The foo</foo>
<bar>The bar</bar>
[%- END %]
-- expect --
<baz>The foo</baz>
<bar>The bar</bar>

-- test --
[% USE xmlstyle -%]
[% FILTER xmlstyle foo = { element = 'wiz' } -%]
<foo>The foo</foo>
<bar>The bar</bar>
[%- END %]
-- expect --
<wiz>The foo</wiz>
<bar>The bar</bar>

--  test --
[%    USE xmlstyle foo = { element = 'bar' } -%]
[% FILTER xmlstyle foo = { element = 'baz' } -%]
<foo>The foo</foo>
<bar>The bar</bar>
[%- END %]
-- expect --
<baz>The foo</baz>
<bar>The bar</bar>

-- test --
[%    USE xmlstyle foo = { element = 'oof' } -%]
[% FILTER xmlstyle bar = { element = 'rab' } -%]
<foo>The foo</foo>
<bar>The bar</bar>
[%- END %]
-- expect --
<oof>The foo</oof>
<rab>The bar</rab>

--  test --
[%    USE xmlstyle -%]
[% FILTER xmlstyle foo = { attributes = { wiz = 'waz' } } -%]
<foo>The foo</foo>
[%- END %]
-- expect --
<foo wiz="waz">The foo</foo>

--  test --
[%    USE xmlstyle foo = { attributes = { wiz = 'waz' } }-%]
[% FILTER xmlstyle bar = { attributes = { biz = 'boz' } } -%]
<foo>The foo <bar>blam</bar></foo>
[%- END %]
-- expect --
<foo wiz="waz">The foo <bar biz="boz">blam</bar></foo>

--  test --
[% USE xmlstyle 
       list = {
	   element    = 'ul'
	   pre_start  = "<p>\n"
	   post_start = "\n<!-- list begins -->"
	   pre_end    = "<!-- list ends -->\n"
	   post_end   = "\n</p>"
	   attributes = { class = 'mylist' } 
       }
       item = {
	   element    = 'li'
	   post_start = '<small>'
	   pre_end    = '</small>'
	   post_end   = "\n<br/>"
	   attributes = { class = 'myitem' } 
       }
-%]
[% FILTER xmlstyle -%]
<list>
<item>The First Item</item>
<item>The Second Item</item>
<item>The Third Item</item>
</list>
[%- END %]
-- expect --
<p>
<ul class="mylist">
<!-- list begins -->
<li class="myitem"><small>The First Item</small></li>
<br/>
<li class="myitem"><small>The Second Item</small></li>
<br/>
<li class="myitem"><small>The Third Item</small></li>
<br/>
<!-- list ends -->
</ul>
</p>

#------------------------------------------------------------------------
# test use of plugin filter via variable
#------------------------------------------------------------------------

-- test --
[% USE xmlstyle foo = { element = 'bar' } -%]
[% FILTER $xmlstyle -%]
<foo>The foo</foo>
[%- END %]
-- expect --
<bar>The foo</bar>

-- test --
[% USE xmlstyle foo = { element = 'bar' } -%]
[% FILTER $xmlstyle bar = { element = 'baz' } -%]
<foo>The foo</foo>
<bar>The bar</bar>
[%- END %]
-- expect --
<bar>The foo</bar>
<baz>The bar</baz>

-- test --
[% USE zap = xmlstyle foo = { element = 'bar' } -%]
[% FILTER $zap bar = { element = 'baz' } -%]
<foo>The foo</foo>
<bar>The bar</bar>
[%- END %]
-- expect --
<bar>The foo</bar>
<baz>The bar</baz>

-- test --
[% USE zap = xmlstyle foo = { element = 'bar' } -%]
[% FILTER $zap 'blaml' bar = { element = 'baz' } -%]
<foo>The foo</foo>
<bar>The bar</bar>
[%- END %]
-- expect --
<bar>The foo</bar>
<baz>The bar</baz>

-- test --
[% USE xmlstyle 'zap' -%]
[% FILTER zap bar = { element = 'baz' } -%]
<foo>The foo</foo>
<bar>The bar</bar>
[%- END %]
-- expect --
<foo>The foo</foo>
<baz>The bar</baz>

#------------------------------------------------------------------------
# an example based on one from Tony Bowden posted to the mailing list 
#------------------------------------------------------------------------

-- test --
[% USE xmlstyle
     video = {
       element = 'table'
       attributes = { class='videoTable' },
     }
 
     title = {
       pre_start = "<tr>\n    <td>Title:</td>\n    "
       element    = 'td'
       attributes = { class='videoTitle' }
       post_end  = "\n  </tr>"
     }

     price = {
       pre_start = "<tr>\n    <td>Price:</td>\n    "
       element    = 'td'
       attributes = { class='videoPrice' }
       post_end  = "\n  </tr>"
     }
   ; 
   
   FILTER xmlstyle 
-%]
<video>
  <title>Buffy Series 1</title>
  <price>10.99</price>
</video>
[% END %]
-- expect --
<table class="videoTable">
  <tr>
    <td>Title:</td>
    <td class="videoTitle">Buffy Series 1</td>
  </tr>
  <tr>
    <td>Price:</td>
    <td class="videoPrice">10.99</td>
  </tr>
</table>