# -*- cperl -*- # $Id: 24c14n.t,v 1.1.1.2 2007/10/10 23:04:15 ahuda Exp $ ## # these testcases are for xml canonization interfaces. # use Test; use strict; BEGIN { plan tests => 20 }; use XML::LibXML; use XML::LibXML::Common qw(:libxml); my $parser = XML::LibXML->new; { my $doc = $parser->parse_string( " " ); my $c14n_res = $doc->toStringC14N(); ok( $c14n_res, " " ); $c14n_res = $doc->toStringC14N(1); ok( $c14n_res, " " ); } { my $doc = $parser->parse_string( 'e&f<]]> ' ); my $c14n_res = $doc->toStringC14N(); ok( $c14n_res, ' >e&f< ' ); $c14n_res = $doc->toStringC14N(1); ok( $c14n_res, ' >e&f< ' ); } { my $doc = $parser->parse_string( '' ); my $c14n_res; $c14n_res = $doc->toStringC14N(0); ok( $c14n_res, '' ); } { my $doc = $parser->parse_string( '' ); my $c14n_res; $c14n_res = $doc->toStringC14N(0); ok( $c14n_res, '' ); } # ----------------------------------------------------------------- # # The C14N says: remove unused namespaces, libxml2 just orders them # ----------------------------------------------------------------- # { my $doc = $parser->parse_string( '' ); my $c14n_res; $c14n_res = $doc->toStringC14N(0); ok( $c14n_res, '' ); # would be correct, but will not work. # ok( $c14n_res, '' ); } # ----------------------------------------------------------------- # # The C14N says: remove redundant namespaces # ----------------------------------------------------------------- # { my $doc = $parser->parse_string( '' ); my $c14n_res; $c14n_res = $doc->toStringC14N(0); ok( $c14n_res, '' ); } { my $doc = $parser->parse_string( '' ); my $c14n_res; $c14n_res = $doc->toStringC14N(0); ok( $c14n_res, '' ); } { my $doc = $parser->parse_string( < EOX my $c14n_res; $c14n_res = $doc->toStringC14N(0); ok( $c14n_res, '' ); } print "# canonize with xpath expressions\n"; { my $doc = $parser->parse_string( < EOX my $c14n_res; $c14n_res = $doc->toStringC14N(0, "//d" ); ok( $c14n_res, '' ); } { my $doc = $parser->parse_string( < EOX my $rootnode=$doc->documentElement; my $c14n_res; $c14n_res = $rootnode->toStringC14N(0, "//*[local-name()='d']"); ok( $c14n_res, '' ); ($rootnode) = $doc->findnodes("//*[local-name()='d']"); $c14n_res = $rootnode->toStringC14N(); ok( $c14n_res, '' ); $rootnode = $doc->documentElement->firstChild; $c14n_res = $rootnode->toStringC14N(0); ok( $c14n_res, '' ); } print "# exclusive canonicalization\n"; if (20620 > XML::LibXML::LIBXML_VERSION) { skip("skipping Exclusive C14N tests for libxml2 < 2.6.17") for 15..20; } else { my $xml1 = < EOX my $xml2 = < EOX my $xpath = "(//. | //@* | //namespace::*)[ancestor-or-self::*[name()='n1:elem2']]"; my $result = qq(\n \n ); my $result_n0n2 = qq(\n \n ); my $doc1 = $parser->parse_string( $xml1 ); my $doc2 = $parser->parse_string( $xml2 ); { my $c14n_res = $doc1->toStringEC14N(0, $xpath); ok( $c14n_res, $result); } { my $c14n_res = $doc2->toStringEC14N(0, $xpath); ok( $c14n_res, $result); } { my $c14n_res = $doc1->toStringEC14N(0, $xpath,[]); ok( $c14n_res, $result); } { my $c14n_res = $doc2->toStringEC14N(0, $xpath,[]); ok( $c14n_res, $result); } { my $c14n_res = $doc2->toStringEC14N(0, $xpath,['n1','n3']); ok( $c14n_res, $result); } { my $c14n_res = $doc2->toStringEC14N(0, $xpath,['n0','n2']); ok( $c14n_res, $result_n0n2); } }