230 lines
5.3 KiB
Perl
230 lines
5.3 KiB
Perl
# -*- cperl -*-
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Test::More tests => 291;
|
|
|
|
use XML::LibXML;
|
|
|
|
# TEST:$all=23
|
|
my @all = qw(
|
|
recover
|
|
expand_entities
|
|
load_ext_dtd
|
|
complete_attributes
|
|
validation
|
|
suppress_errors
|
|
suppress_warnings
|
|
pedantic_parser
|
|
no_blanks
|
|
expand_xinclude
|
|
xinclude
|
|
no_network
|
|
clean_namespaces
|
|
no_cdata
|
|
no_xinclude_nodes
|
|
old10
|
|
no_base_fix
|
|
huge
|
|
oldsax
|
|
line_numbers
|
|
URI
|
|
base_uri
|
|
gdome
|
|
);
|
|
|
|
# TEST:$old=8
|
|
my %old = map { $_=> 1 } qw(
|
|
recover
|
|
pedantic_parser
|
|
line_numbers
|
|
load_ext_dtd
|
|
complete_attributes
|
|
expand_xinclude
|
|
clean_namespaces
|
|
no_network
|
|
);
|
|
|
|
|
|
{
|
|
my $p = XML::LibXML->new();
|
|
for my $opt (@all) {
|
|
my $ret = 0;
|
|
# TEST*$all
|
|
ok(
|
|
($p->get_option($opt)||0) == $ret
|
|
,
|
|
"Testing option $opt",
|
|
);
|
|
}
|
|
# TEST
|
|
ok(! $p->option_exists('foo'), ' TODO : Add test name');
|
|
|
|
# TEST
|
|
ok( $p->keep_blanks() == 1, ' TODO : Add test name' );
|
|
# TEST
|
|
ok( $p->set_option(no_blanks => 1) == 1, ' TODO : Add test name');
|
|
# TEST
|
|
ok( ! $p->keep_blanks(), ' TODO : Add test name' );
|
|
# TEST
|
|
ok( $p->keep_blanks(1) == 1, ' TODO : Add test name' );
|
|
# TEST
|
|
ok( ! $p->get_option('no_blanks'), ' TODO : Add test name' );
|
|
|
|
my $uri = 'http://foo/bar';
|
|
|
|
# TEST
|
|
ok( $p->set_option(URI => $uri) eq $uri, ' TODO : Add test name');
|
|
# TEST
|
|
ok ($p->base_uri() eq $uri, ' TODO : Add test name');
|
|
# TEST
|
|
ok ($p->base_uri($uri.'2') eq $uri.'2', ' TODO : Add test name');
|
|
# TEST
|
|
ok( $p->get_option('URI') eq $uri.'2', ' TODO : Add test name');
|
|
# TEST
|
|
ok( $p->get_option('base_uri') eq $uri.'2', ' TODO : Add test name');
|
|
# TEST
|
|
ok( $p->set_option(base_uri => $uri) eq $uri, ' TODO : Add test name');
|
|
# TEST
|
|
ok( $p->set_option(URI => $uri) eq $uri, ' TODO : Add test name');
|
|
# TEST
|
|
ok ($p->base_uri() eq $uri, ' TODO : Add test name');
|
|
|
|
# TEST
|
|
ok( ! $p->recover_silently(), ' TODO : Add test name' );
|
|
$p->set_option(recover => 1);
|
|
|
|
# TEST
|
|
ok( $p->recover_silently() == 0, ' TODO : Add test name' );
|
|
$p->set_option(recover => 2);
|
|
# TEST
|
|
ok( $p->recover_silently() == 1, ' TODO : Add test name' );
|
|
# TEST
|
|
ok( $p->recover_silently(0) == 0, ' TODO : Add test name' );
|
|
# TEST
|
|
ok( $p->get_option('recover') == 0, ' TODO : Add test name' );
|
|
# TEST
|
|
ok( $p->recover_silently(1) == 1, ' TODO : Add test name' );
|
|
# TEST
|
|
ok( $p->get_option('recover') == 2, ' TODO : Add test name' );
|
|
|
|
# TEST
|
|
ok( $p->expand_entities() == 0, 'expand_entities should default to false' );
|
|
# TEST
|
|
ok( $p->load_ext_dtd() == 0, 'load_ext_dtd should default to false' );
|
|
$p->load_ext_dtd(1);
|
|
# TEST
|
|
ok( $p->load_ext_dtd() == 1, 'load_ext_dtd should be true after being set to true' );
|
|
$p->load_ext_dtd(0);
|
|
$p->expand_entities(1);
|
|
# TEST
|
|
ok( $p->expand_entities() == 1, 'expand_entities should be true after being set to true' );
|
|
# TEST
|
|
ok( $p->load_ext_dtd() == 1, 'load_ext_dtd should be true after expand_entities is set to true' );
|
|
$p->expand_entities(0);
|
|
# TEST
|
|
ok( $p->expand_entities() == 0, 'expand_entities should be false after being set to false' );
|
|
}
|
|
|
|
{
|
|
my $XML = <<'EOT';
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE title [ <!ELEMENT title ANY >
|
|
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
|
|
<rss version="2.0">
|
|
<channel>
|
|
<link>example.com</link>
|
|
<description>XXE</description>
|
|
<item>
|
|
<title>&xxe;</title>
|
|
<link>example.com</link>
|
|
<description>XXE here</description>
|
|
</item>
|
|
</channel>
|
|
</rss>
|
|
EOT
|
|
|
|
my $sys_line = <<'EOT';
|
|
<title>&xxe;</title>
|
|
EOT
|
|
|
|
chomp ($sys_line);
|
|
|
|
my $parser = XML::LibXML->new(
|
|
expand_entities => 0,
|
|
load_ext_dtd => 0,
|
|
no_network => 1,
|
|
expand_xinclude => 0,
|
|
);
|
|
my $XML_DOC = $parser->load_xml( string => $XML, );
|
|
|
|
# TEST
|
|
ok (scalar($XML_DOC->toString() =~ m{\Q$sys_line\E}),
|
|
"expand_entities is preserved after _clone()/etc."
|
|
);
|
|
}
|
|
|
|
{
|
|
my $p = XML::LibXML->new(map { $_=>1 } @all);
|
|
for my $opt (@all) {
|
|
# TEST*$all
|
|
ok($p->get_option($opt)==1, ' TODO : Add test name');
|
|
# TEST*$old
|
|
if ($old{$opt})
|
|
{
|
|
ok($p->$opt()==1, ' TODO : Add test name')
|
|
}
|
|
}
|
|
|
|
for my $opt (@all) {
|
|
# TEST*$all
|
|
ok($p->option_exists($opt), ' TODO : Add test name');
|
|
# TEST*$all
|
|
ok($p->set_option($opt,0)==0, ' TODO : Add test name');
|
|
# TEST*$all
|
|
ok($p->get_option($opt)==0, ' TODO : Add test name');
|
|
# TEST*$all
|
|
ok($p->set_option($opt,1)==1, ' TODO : Add test name');
|
|
# TEST*$all
|
|
ok($p->get_option($opt)==1, ' TODO : Add test name');
|
|
if ($old{$opt}) {
|
|
# TEST*$old
|
|
ok($p->$opt()==1, ' TODO : Add test name');
|
|
# TEST*$old
|
|
ok($p->$opt(0)==0, ' TODO : Add test name');
|
|
# TEST*$old
|
|
ok($p->$opt()==0, ' TODO : Add test name');
|
|
# TEST*$old
|
|
ok($p->$opt(1)==1, ' TODO : Add test name');
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
{
|
|
my $p = XML::LibXML->new(map { $_=>0 } @all);
|
|
for my $opt (@all) {
|
|
# TEST*$all
|
|
ok($p->get_option($opt)==0, ' TODO : Add test name');
|
|
# TEST*$old
|
|
if ($old{$opt})
|
|
{
|
|
ok($p->$opt()==0, ' TODO : Add test name');
|
|
}
|
|
}
|
|
}
|
|
|
|
{
|
|
my $p = XML::LibXML->new({map { $_=>1 } @all});
|
|
for my $opt (@all) {
|
|
# TEST*$all
|
|
ok($p->get_option($opt)==1, ' TODO : Add test name');
|
|
# TEST*$old
|
|
if ($old{$opt})
|
|
{
|
|
ok($p->$opt()==1, ' TODO : Add test name');
|
|
}
|
|
}
|
|
}
|