From bee8338fd1cbd7aad4bf60c2965833343b6ead6f Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Tue, 21 May 2024 15:17:30 +0200 Subject: [PATCH 1/2] Fix test suite with libxml2 2.13.0 --- t/02parse.t | 7 ++++++- t/08findnodes.t | 8 +++++++- t/19die_on_invalid_utf8_rt_58848.t | 2 +- t/25relaxng.t | 4 ++-- t/26schema.t | 4 ++-- t/60error_prev_chain.t | 8 ++++---- 6 files changed, 22 insertions(+), 11 deletions(-) diff --git a/t/02parse.t b/t/02parse.t index b111507..40aa5f1 100644 --- a/t/02parse.t +++ b/t/02parse.t @@ -884,7 +884,12 @@ EOXML eval { $doc2 = $parser->parse_string( $xmldoc ); }; - isnt($@, '', "error parsing $xmldoc"); + # https://gitlab.gnome.org/GNOME/libxml2/-/commit/b717abdd + if (XML::LibXML::LIBXML_RUNTIME_VERSION() < 21300) { + isnt($@, '', "error parsing $xmldoc"); + } else { + is( $doc2->documentElement()->firstChild()->nodeName(), "foo" ); + } $parser->validation(1); diff --git a/t/08findnodes.t b/t/08findnodes.t index 016c85a..e9417bc 100644 --- a/t/08findnodes.t +++ b/t/08findnodes.t @@ -123,7 +123,13 @@ my $docstring = q{ my @ns = $root->findnodes('namespace::*'); # TEST -is(scalar(@ns), 2, ' TODO : Add test name' ); +# https://gitlab.gnome.org/GNOME/libxml2/-/commit/aca16fb3 +# fixed xmlCopyNamespace with XML namespace. +if (XML::LibXML::LIBXML_RUNTIME_VERSION() < 21300) { + is(scalar(@ns), 2, ' TODO : Add test name' ); +} else { + is(scalar(@ns), 3, ' TODO : Add test name' ); +} # bad xpaths # TEST:$badxpath=4; diff --git a/t/19die_on_invalid_utf8_rt_58848.t b/t/19die_on_invalid_utf8_rt_58848.t index aa8ad10..4160cb2 100644 --- a/t/19die_on_invalid_utf8_rt_58848.t +++ b/t/19die_on_invalid_utf8_rt_58848.t @@ -16,7 +16,7 @@ use XML::LibXML; my $err = $@; # TEST - like ("$err", qr{parser error : Input is not proper UTF-8}, + like ("$err", qr{not proper UTF-8|Invalid bytes in character encoding}, 'Parser error.', ); } diff --git a/t/25relaxng.t b/t/25relaxng.t index 93e6188..71383b2 100644 --- a/t/25relaxng.t +++ b/t/25relaxng.t @@ -132,7 +132,7 @@ print "# 6 check that no_network => 1 works\n"; { my $rng = eval { XML::LibXML::RelaxNG->new( location => $netfile, no_network => 1 ) }; # TEST - like( $@, qr{I/O error : Attempt to load network entity}, 'RNG from file location with external import and no_network => 1 throws an exception.' ); + like( $@, qr{Attempt to load network entity}, 'RNG from file location with external import and no_network => 1 throws an exception.' ); # TEST ok( !defined $rng, 'RNG from file location with external import and no_network => 1 is not loaded.' ); } @@ -152,7 +152,7 @@ print "# 6 check that no_network => 1 works\n"; EOF # TEST - like( $@, qr{I/O error : Attempt to load network entity}, 'RNG from buffer with external import and no_network => 1 throws an exception.' ); + like( $@, qr{Attempt to load network entity}, 'RNG from buffer with external import and no_network => 1 throws an exception.' ); # TEST ok( !defined $rng, 'RNG from buffer with external import and no_network => 1 is not loaded.' ); } diff --git a/t/26schema.t b/t/26schema.t index 17f641e..c404ced 100644 --- a/t/26schema.t +++ b/t/26schema.t @@ -117,7 +117,7 @@ EOF { my $schema = eval { XML::LibXML::Schema->new( location => $netfile, no_network => 1 ) }; # TEST - like( $@, qr{I/O error : Attempt to load network entity}, 'Schema from file location with external import and no_network => 1 throws an exception.' ); + like( $@, qr{Attempt to load network entity}, 'Schema from file location with external import and no_network => 1 throws an exception.' ); # TEST ok( !defined $schema, 'Schema from file location with external import and no_network => 1 is not loaded.' ); } @@ -129,7 +129,7 @@ EOF EOF # TEST - like( $@, qr{I/O error : Attempt to load network entity}, 'Schema from buffer with external import and no_network => 1 throws an exception.' ); + like( $@, qr{Attempt to load network entity}, 'Schema from buffer with external import and no_network => 1 throws an exception.' ); # TEST ok( !defined $schema, 'Schema from buffer with external import and no_network => 1 is not loaded.' ); } diff --git a/t/60error_prev_chain.t b/t/60error_prev_chain.t index e48215c..55ac0b2 100644 --- a/t/60error_prev_chain.t +++ b/t/60error_prev_chain.t @@ -16,13 +16,11 @@ use XML::LibXML; { my $parser = XML::LibXML->new(); - $parser->validation(0); - $parser->load_ext_dtd(0); eval { local $^W = 0; - $parser->parse_file('example/JBR-ALLENtrees.htm'); + $parser->parse_string('“ ”'); }; my $err = $@; @@ -31,7 +29,7 @@ use XML::LibXML; if( $err && !ref($err) ) { plan skip_all => 'The local libxml library does not support errors as objects to $@'; } - plan tests => 1; + plan tests => 2; while (defined($err) && $count < 200) { @@ -44,6 +42,8 @@ use XML::LibXML; # TEST ok ((!$err), "Reached the end of the chain."); + # TEST + is ($count, 3, "Correct number of errors reported") } =head1 COPYRIGHT & LICENSE -- 2.48.1 From c9f9c2fe51173b0a00969f01b577399f1098aa47 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Thu, 13 Feb 2025 19:50:35 +0100 Subject: [PATCH 2/2] Fix test suite with libxml2 2.14.0 --- t/16docnodes.t | 7 ++++++- t/49_load_html.t | 8 +++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/t/16docnodes.t b/t/16docnodes.t index db7bc1f..0b0ae00 100644 --- a/t/16docnodes.t +++ b/t/16docnodes.t @@ -60,7 +60,12 @@ for my $time (0 .. 2) { $doc->setDocumentElement($node); # TEST - is( $node->serialize(), '', 'Node serialise works.' ); + # libxml2 2.14 avoids unnecessary escaping of attribute values. + if (XML::LibXML::LIBXML_VERSION() >= 21400) { + is( $node->serialize(), "", 'Node serialise works.' ); + } else { + is( $node->serialize(), '', 'Node serialise works.' ); + } $doc->setEncoding('utf-8'); # Second output diff --git a/t/49_load_html.t b/t/49_load_html.t index 70d2660..3861edf 100644 --- a/t/49_load_html.t +++ b/t/49_load_html.t @@ -52,7 +52,13 @@ use XML::LibXML; EOS - { + SKIP: { + # libxml2 2.14 tokenizes HTML according to HTML5 where + # this isn't an error, see "13.2.5.73 Named character + # reference state". + skip("libxml2 version >= 21400", 1) + if XML::LibXML::LIBXML_VERSION >= 21400; + my $buf = ''; open my $fh, '>', \$buf; # redirect STDERR there -- 2.48.1