#use Test::More qw( no_plan);
use Test::More tests=>11;
use strict;
use warnings;
use Data::Dumper;
BEGIN {
use_ok 'XML::Handler::ExtOn::TieAttrs';
use_ok 'XML::Handler::ExtOn::Context';
use_ok 'XML::Handler::ExtOn::Element';
}
my $t1_element = {
'Prefix' => undef,
'LocalName' => 'p',
'Attributes' => {
'{http://www.w3.org/1999/xlink}attr' => {
'LocalName' => 'attr',
'Prefix' => 'xlink',
'Value' => '1',
'Name' => 'xlink:attr',
'NamespaceURI' => 'http://www.w3.org/1999/xlink'
},
'{}defaulttest' => {
'LocalName' => 'defaulttest',
'Prefix' => undef,
'Value' => '1',
'Name' => 'defaulttest',
'NamespaceURI' => undef
}
},
'Name' => 'p',
'NamespaceURI' => undef
};
my $context1 = new XML::Handler::ExtOn::Context::;
my $element1 = new XML::Handler::ExtOn::Element::
context => $context1,
sax2 => $t1_element;
isa_ok $element1->attributes, 'XML::Handler::ExtOn::Attributes',
'$element1->attributes';
my $stack = $element1->attributes->_a_stack;
is_deeply $stack,
[
{
'LocalName' => 'attr',
'Prefix' => 'xlink',
'Value' => '1',
'Name' => 'xlink:attr',
'NamespaceURI' => 'http://www.w3.org/1999/xlink'
},
{
'LocalName' => 'defaulttest',
'Prefix' => undef,
'Value' => '1',
'Name' => 'defaulttest',
'NamespaceURI' => 'http://www.w3.org/2000/xmlns/'
}
],
'check stack content';
my %attr_by_name = ();
my $obj = tie %attr_by_name, 'XML::Handler::ExtOn::TieAttrs', $stack,
by => 'Prefix',
value => 'xlink',
template => {
Value => '',
NamespaceURI => 'http://www.w3.org/1999/xlink',
Name => '',
LocalName => '',
Prefix => ''
};
is_deeply \%attr_by_name, { 'attr' => '1' }, 'check \%attr_by_name';
$attr_by_name{attr2} = 3;
is_deeply \%attr_by_name,
{
'attr' => '1',
'attr2' => 3
},
'check $attr_by_name{attr2} =3';
$attr_by_name{attr3} = 3;
delete $attr_by_name{attr2};
is_deeply $obj->_orig_hash,
[
{
'LocalName' => 'attr',
'Prefix' => 'xlink',
'Value' => '1',
'Name' => 'xlink:attr',
'NamespaceURI' => 'http://www.w3.org/1999/xlink'
},
{
'LocalName' => 'defaulttest',
'Prefix' => undef,
'Value' => '1',
'Name' => 'defaulttest',
'NamespaceURI' => 'http://www.w3.org/2000/xmlns/'
},
{
'Prefix' => 'xlink',
'LocalName' => 'attr3',
'Value' => 3,
'Name' => 'xlink:attr3',
'NamespaceURI' => 'http://www.w3.org/1999/xlink'
}
],
'check $attr_by_name{attr3} =3;delete $attr_by_name{attr2}';
my %attr_by_name1 = ();
my $obj1 = tie %attr_by_name1, 'XML::Handler::ExtOn::TieAttrs', $stack,
by => 'NamespaceURI',
value => 'http://www.w3.org/2000/xmlns/',
template => {
Value => '',
NamespaceURI => '',
Name => '',
LocalName => '',
Prefix => ''
};
@attr_by_name1{qw/ 123 124/} = ( 1, 3 );
is_deeply \%attr_by_name1,
{
'123' => 1,
'124' => 3,
'defaulttest' => '1'
},
'check @attr_by_name1{qw/ 123 124/ } = (1,3);';
%attr_by_name1 = ();
is_deeply \%attr_by_name1, {}, 'check %attr_by_name1 = ();';
is_deeply $obj->_orig_hash,
[
{
'LocalName' => 'attr',
'Prefix' => 'xlink',
'Value' => '1',
'Name' => 'xlink:attr',
'NamespaceURI' => 'http://www.w3.org/1999/xlink'
},
{
'Prefix' => 'xlink',
'LocalName' => 'attr3',
'Value' => 3,
'Name' => 'xlink:attr3',
'NamespaceURI' => 'http://www.w3.org/1999/xlink'
}
],
'check $obj->_orig_hash';