use Test; BEGIN { plan tests => 19 } use XML::LibXML; ok(1); my $dtdstr; { local $/; local *DTD; open(DTD, 'example/test.dtd') || die $!; $dtdstr = ; $dtdstr =~ s/\r//g; $dtdstr =~ s/[\r\n]*$//; close DTD; } ok($dtdstr); { # parse a DTD from a SYSTEM ID my $dtd = XML::LibXML::Dtd->new('ignore', 'example/test.dtd'); ok($dtd); my $newstr = $dtd->toString(); $newstr =~ s/\r//g; $newstr =~ s/^.*?\n//; $newstr =~ s/\n^.*\Z//m; ok($newstr, $dtdstr); } { # parse a DTD from a string my $dtd = XML::LibXML::Dtd->parse_string($dtdstr); ok($dtd); } { # parse a DTD with a different encoding # my $dtd = XML::LibXML::Dtd->parse_string($dtdstr, "ISO-8859-1"); # ok($dtd); 1; } { # validate with the DTD my $dtd = XML::LibXML::Dtd->parse_string($dtdstr); ok($dtd); my $xml = XML::LibXML->new->parse_file('example/article.xml'); ok($xml); ok($xml->is_valid($dtd)); eval { $xml->validate($dtd) }; # throws exception ok( !$@ ); } { # validate a bad document my $dtd = XML::LibXML::Dtd->parse_string($dtdstr); ok($dtd); my $xml = XML::LibXML->new->parse_file('example/article_bad.xml'); ok(!$xml->is_valid($dtd)); eval { $xml->validate($dtd); }; print $@, "\n"; ok($@); my $parser = XML::LibXML->new(); ok($parser->validation(1)); # this one is OK as it's well formed (no DTD) eval{ $parser->parse_file('example/article_bad.xml'); }; ok($@); eval { $parser->parse_file('example/article_internal_bad.xml'); }; print $@, "\n"; ok($@); } # this test fails under XML-LibXML-1.00 with a segfault because the # underlying DTD element in the C libxml library was freed twice my $parser = XML::LibXML->new(); my $doc = $parser->parse_file('example/dtd.xml'); my @a = $doc->getChildnodes; ok(scalar(@a),2); undef @a; undef $doc; ok(1); ## # Tests for ticket 2021 { my $dtd = XML::LibXML::Dtd->new("",""); ok( $dtd, undef ); } { my $dtd = XML::LibXML::Dtd->new('', 'example/test.dtd'); ok($dtd); }