The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#============================================================= -*-perl-*-
#
# t/file.t
#
# Test the XML::File plugin.
#
# Written by Andy Wardley <abw@cpan.org>
#
# Copyright (C) 1996-2006 Andy Wardley.  All Rights Reserved.
#
# This is free software; you can redistribute it and/or modify it
# under the same terms as Perl itself.
#
# $Id: dom.t,v 2.8 2002/08/12 11:07:14 abw Exp $
# 
#========================================================================

use strict;
use warnings;
use lib qw( ./lib ../lib );
use Template;
use Template::Test;
use Cwd qw( abs_path );

local *FP;
my $dir  = abs_path( -d 't' ? 't/xml' : 'xml' );
my $file = 'example.xml';
my $path = File::Spec->catfile($dir, $file);

open(FP, $path) || die "cannot open $path: $!";

my $vars = { 
    dir       => $dir,
    file      => $file,
    path      => $path,
    debug_on  => sub { $Template::Plugin::XML::File::DEBUG = 1 },
    debug_off => sub { $Template::Plugin::XML::File::DEBUG = 0 },
    handle    => \*FP,   
}; 
test_expect(\*DATA, undef, $vars);

close(FP);

__END__


#------------------------------------------------------------------------
# test the $DEBUG package variable sets debugging on/off by default
# unless overridden by a debug named parameter
#------------------------------------------------------------------------

-- test --
[% CALL debug_on; 
   USE xf = XML.File('foo');
   'debugging is '; xf.debug ? 'on' : 'off'
-%]
-- expect --
debugging is on


-- test --
[% CALL debug_off; 
   USE xf = XML.File('foo');
   'debugging is '; xf.debug ? 'on' : 'off'
-%]
-- expect --
debugging is off


-- test --
[% USE xf = XML.File('foo', debug=1);
   'debugging is '; xf.debug ? 'on' : 'off'
%]
-- expect --
debugging is on


-- test --
[% CALL debug_on;
   USE xf=XML('foo', debug=0);
   'debugging is '; xf.debug ? 'on' : 'off'
%]
-- expect --
debugging is off


#------------------------------------------------------------------------
# test the use of the positional argument to specify file name or handle
#------------------------------------------------------------------------

-- test --
[% USE xf = XML.File(file) -%]
  type: [% xf.type   or 'no type'   %]
  name: [% xf.name   or 'no name'   %]
handle: [% xf.handle or 'no handle' %]
-- expect --
-- process -- 
  type: name
  name: [% file %]
handle: no handle


-- test --
[% USE xf = XML.File(handle) -%]
  type: [% xf.type   or 'no type'   %]
  name: [% xf.name   or 'no name'   %]
handle: [% xf.handle or 'no handle' %]
-- expect --
-- process -- 
  type: handle
  name: no name
handle: [% handle %]


#------------------------------------------------------------------------
# test the use of named parameters for file name
#------------------------------------------------------------------------

-- test --
[% USE xf = XML.File(file=file) -%]
[% xf.type %]: [% xf.name %]
-- expect --
-- process -- 
name: [% file %]

-- test --
[% USE xf = XML.File(name=file) -%]
[% xf.type %]: [% xf.name %]
-- expect --
-- process -- 
name: [% file %]

-- test --
[% USE xf = XML.File(xml_file=file) -%]
[% xf.type %]: [% xf.name %]
-- expect --
-- process -- 
name: [% file %]


#------------------------------------------------------------------------
# test the use of named parameters for file handle
#------------------------------------------------------------------------

-- test --
[% USE xf = XML.File(fh=handle) -%]
[% xf.type %]: [% xf.handle %]
-- expect --
-- process -- 
handle: [% handle %]

-- test --
[% USE xf = XML.File(handle=handle) -%]
[% xf.type %]: [% xf.handle %]
-- expect --
-- process -- 
handle: [% handle %]


-- test --
[% USE xf = XML.File(xml_fh=handle) -%]
[% xf.type %]: [% xf.handle %]
-- expect --
-- process -- 
handle: [% handle %]



#------------------------------------------------------------------------
# test file() method
#------------------------------------------------------------------------

-- test --
[% USE XML;
   file = XML.file(file) 
-%]
file: [% file.name %]
-- expect --
-- process --
file: [% file %]


#------------------------------------------------------------------------
# TODO: dom(), xpath() and other methods.
#------------------------------------------------------------------------