The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use strict;
use Test::More;
use Test::XML;

use aliased 'XML::Toolkit::Config::Container' => 'XMLTK::App';

my $xml = <<'END_XML';
<?xml version="1.0" encoding="utf-8"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/">
	<trackList>
		<track>
			<album>provider</album>
			<title>Videobox</title>
			<image>playlist/provider.jpg</image>
		</track>

		<track>
			<album>content</album>
			<image>playlist/poster.jpg</image>
			<location>http://server430.files.example.com/e1/hq_flv/321779.flv?h=9d512f72b8b19c863bbee572ad3be219</location>
			<meta rel="thumbvideo">http://server320.files.example.com/e1/preview_flv/321779.flv</meta>
			<meta rel="thumb">http://server320.files.example.com/e1/screenshot2/32/17/321779/321779_preview_{i}.jpg</meta>

			<meta rel="type">flv</meta>
		</track>
	</trackList>
</playlist>

END_XML

my $map = { 'http://xspf.org/ns/0/' => 'XML::XSPF', };

my $builder = XMLTK::App->new( { namespace_map => $map } )->builder;
$builder->parse_string($xml);
my $code = $builder->render();

eval $code;
if ($@) {
    diag "Couldn't EVAL code $@";
    done_testing;
    exit;
}
my $loader = XMLTK::App->new( { namespace_map => $map } )->loader;
$loader->parse_string($xml);
my $root = $loader->root_object;

ok( scalar @{ $root->trackList_collection } > 0, 'have entries' );

my $generator = XMLTK::App->new(
    {
        namespace     => 'http://xspf.org/ns/0/',
        namespace_map => { '' => 'http://xspf.org/ns/0/', }
    }
)->generator;

$generator->render_object($root);

my $out_xml = join '', $generator->output;
is_xml( $out_xml, $xml, 'XML compares' );
done_testing;