XML-Twig
view release on metacpan or search on metacpan
t/test_3_50.t view on Meta::CPAN
open( my $out_fh, '>', \$out);
my $t= XML::Twig->new ( twig_handlers => { 'd' => sub { $_->flush( $out_fh); } });
$t->parse( $doc);
#is( $out, $doc, 'flush with handler on the root');
}
{ # test notations
my $doc=q{<?xml version="1.0"?>
<!DOCTYPE d [
<!ELEMENT d (code+)>
<!ELEMENT code (#PCDATA)>
<!NOTATION vrml PUBLIC "VRML 1.0">
<!NOTATION perl PUBLIC "Perl 22.4" "/usr/bin/perl">
<!ATTLIST code lang NOTATION (vrml|perl) #REQUIRED>
]>
<d>
<code lang="vrml">DirectionalLight { direction 0 -1 0 }</code>
<code lang="perl">XML::Twig->parse( 'file.xml');</code>
</d>
};
my $t= XML::Twig->parse( $doc);
my $n= $t->notation_list;
is( join( ':', sort $t->notation_names), 'perl:vrml', 'notation_names');
is( join( ':', sort map { $_->name } $n->list), 'perl:vrml', 'notation_list (names)');
is( join( ':', sort map { $_->pubid } $n->list), 'Perl 22.4:VRML 1.0', 'notation_list (pubid)');
is( join( ':', sort map { $_->sysid || '' } $n->list), ':/usr/bin/perl', 'notation_list (pubid)');
is( $n->notation( 'perl')->pubid, 'Perl 22.4', 'individual notation pubid');
is( $n->notation( 'vrml')->base, undef, 'individual notation base');
is( $n->text, qq{<!NOTATION perl PUBLIC "Perl 22.4" "/usr/bin/perl">\n<!NOTATION vrml PUBLIC "VRML 1.0">}, 'all notations');
my $notations= () = ( $t->sprint() =~ m{<!NOTATION}g);
is( $notations, 2, 'count notations (unchanged)');
$notations= () = ( $t->sprint( update_DTD => 1) =~ m{<!NOTATION}g);
is( $notations, 2, 'count notations (unchanged, with update_DTD)');
$n->delete( 'perl');
$notations= () = ( $t->sprint( update_DTD => 1) =~ m{<!NOTATION}g);
is( $notations, 1, 'count notations (updated)');
is( $t->notation( 'vrml')->pubid(), 'VRML 1.0', 'notation method');
$n->add_new_notation( 'svg', '', 'image/svg', 'SVG');
is( $n->notation( 'svg')->text, qq{<!NOTATION svg PUBLIC "SVG" "image/svg">}, 'new notation');
}
{ # somehow these were never tested (they are inlined within the module)
my $t= XML::Twig->parse( '<d><e2/></d>');
my $d= $t->root;
my $e2= $t->first_elt( 'e2');
my $e1= XML::Twig::Elt->new( 'e1');
$d->set_first_child( $e1);
$e2->set_prev_sibling( $e1);
$e1->set_next_sibling( $e2);
is( $t->sprint, '<d><e1/><e2/></d>', 'set_first_child');
my $e3= XML::Twig::Elt->new( 'e3');
$d->set_last_child( $e3);
$e2->set_next_sibling( $e3);
$e3->set_prev_sibling( $e2);
is( $t->sprint, '<d><e1/><e2/><e3/></d>', 'set_last_child');
$e2->insert_new_elt( first_child => '#PCDATA')->_set_pcdata( 'foo');
is( $t->sprint, '<d><e1/><e2>foo</e2><e3/></d>', '_set_pcdata');
$e1->insert_new_elt( first_child => '#CDATA')->_set_cdata( 'bar');
is( $t->sprint, '<d><e1><![CDATA[bar]]></e1><e2>foo</e2><e3/></d>', '_set_cdata');
}
exit;
( run in 1.702 second using v1.01-cache-2.11-cpan-39bf76dae61 )