diff options
-rw-r--r-- | ext/xml/tests/001.phpt | 97 | ||||
-rw-r--r-- | ext/xml/tests/002.phpt | 90 | ||||
-rw-r--r-- | ext/xml/tests/003.phpt | 89 | ||||
-rw-r--r-- | ext/xml/tests/004.phpt | 58 | ||||
-rw-r--r-- | ext/xml/tests/006.phpt | 14 | ||||
-rw-r--r-- | ext/xml/tests/inc.ent | 1 | ||||
-rw-r--r-- | ext/xml/tests/skipif.php | 9 | ||||
-rw-r--r-- | ext/xml/tests/xmltest.xml | 20 |
8 files changed, 378 insertions, 0 deletions
diff --git a/ext/xml/tests/001.phpt b/ext/xml/tests/001.phpt new file mode 100644 index 0000000000..ac19312ebf --- /dev/null +++ b/ext/xml/tests/001.phpt @@ -0,0 +1,97 @@ +--TEST-- +XML parser test, function callbacks +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php + + +$xml_parser = xml_parser_create(); +xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1); +xml_set_element_handler($xml_parser, "startElement", "endElement"); +xml_set_character_data_handler($xml_parser, "characterData"); +xml_set_processing_instruction_handler($xml_parser, "PIHandler"); +xml_set_default_handler($xml_parser, "defaultHandler"); +xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler"); + +if (!($fp = @fopen("xmltest.xml", "r"))) { + die("could not open XML input"); +} + +while ($data = fread($fp, 4096)) { + if (!xml_parse($xml_parser, $data, feof($fp))) { + die(sprintf("XML error: %s at line %d\n", + xml_error_string(xml_get_error_code($xml_parser)), + xml_get_current_line_number($xml_parser))); + } +} +print "parse complete\n"; +xml_parser_free($xml_parser); + +function startElement($parser, $name, $attribs) +{ + print "\{$name"; + if (sizeof($attribs)) { + while (list($k, $v) = each($attribs)) { + print " $k=\"$v\""; + } + } + print "}"; +} + +function endElement($parser, $name) +{ + print "\{/$name}"; +} + +function characterData($parser, $data) +{ + print "\{CDATA[$data]}"; +} + +function PIHandler($parser, $target, $data) +{ + print "\{PI[$target,$data]}"; +} + +function defaultHandler($parser, $data) +{ + if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") { + print "\{ENTREF[$data]}"; + } else { + print "\{?[$data]}"; + } +} + +function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId, + $publicId) +{ + print "\{EXTENTREF[$openEntityNames,$base,$systemId,$publicId]}\n"; + return true; +} + +?> +--GET-- +--POST-- +--EXPECT-- +{?[<?xml version="1.0" encoding="ISO-8859-1"?>]}{?[ +]}{?[<!DOCTYPE]}{?[ ]}{?[phptest]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["notfound.dtd"]}{?[ ]}{?[[]}{?[ +]}{?[<!ENTITY]}{?[ ]}{?[%]}{?[ ]}{?[incent]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["inc.ent"]}{?[>]}{?[ +]}{?[%incent;]}{?[ +]}{?[]]}{?[>]}{?[ +]}{ROOT ID="elem1"}{CDATA[ +]}{CDATA[ Plain text.]}{CDATA[ +]}{CDATA[ ]}{ELEM1}{CDATA[ +]}{CDATA[ ]}{?[<!-- comment -->]}{CDATA[ +]}{CDATA[ ]}{ELEM2}{CDATA[ +]}{CDATA[ ]}{?[<![CDATA[]}{CDATA[CDATA block]}{?[]]>]}{CDATA[ +]}{CDATA[ ]}{ELEM3}{CDATA[ +]}{CDATA[ ]}{ENTREF[&included-entity;]}{CDATA[ +]}{CDATA[ ]}{ELEM4}{CDATA[ +]}{CDATA[ ]}{PI[test,processing instruction ]}{CDATA[ +]}{CDATA[ ]}{/ELEM4}{CDATA[ +]}{CDATA[ ]}{/ELEM3}{CDATA[ +]}{CDATA[ ]}{/ELEM2}{CDATA[ +]}{CDATA[ ]}{/ELEM1}{CDATA[ +]}{/ROOT}{?[ +]}parse complete diff --git a/ext/xml/tests/002.phpt b/ext/xml/tests/002.phpt new file mode 100644 index 0000000000..017fe19db6 --- /dev/null +++ b/ext/xml/tests/002.phpt @@ -0,0 +1,90 @@ +--TEST-- +XML parser test, object tuple callbacks +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php + +$xml_parser = xml_parser_create(); +$obj = new myclass; +xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1); +xml_set_element_handler($xml_parser, array($obj,"startElement"), + array($obj, "endElement")); +xml_set_character_data_handler($xml_parser, array($obj, "characterData")); +xml_set_processing_instruction_handler($xml_parser, array($obj, "PIHandler")); +xml_set_default_handler($xml_parser, array($obj, "defaultHandler")); +xml_set_external_entity_ref_handler($xml_parser, + array($obj, "externalEntityRefHandler")); + +if (!($fp = @fopen("xmltest.xml", "r"))) { + die("could not open XML input"); +} + +while ($data = fread($fp, 4096)) { + if (!xml_parse($xml_parser, $data, feof($fp))) { + die(sprintf("XML error: %s at line %d\n", + xml_error_string(xml_get_error_code($xml_parser)), + xml_get_current_line_number($xml_parser))); + } +} +print "parse complete\n"; +xml_parser_free($xml_parser); + +class myclass { + function startElement($parser, $name, $attribs) { + print "\{$name"; + if (sizeof($attribs)) { + while (list($k, $v) = each($attribs)) { + print " $k=\"$v\""; + } + } + print "}"; + } + function endElement($parser, $name) { + print "\{/$name}"; + } + function characterData($parser, $data) { + print "\{CDATA[$data]}"; + } + function PIHandler($parser, $target, $data) { + print "\{PI[$target,$data]}"; + } + function defaultHandler($parser, $data) { + if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") { + print "\{ENTREF[$data]}"; + } else { + print "\{?[$data]}"; + } + } + function externalEntityRefHandler($parser, $openEntityNames, $base, + $systemId, $publicId) { + print "\{EXTENTREF[$openEntityNames,$base,$systemId,$publicId]}\n"; + return true; + } +} + +?> +--GET-- +--POST-- +--EXPECT-- +{?[<?xml version="1.0" encoding="ISO-8859-1"?>]}{?[ +]}{?[<!DOCTYPE]}{?[ ]}{?[phptest]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["notfound.dtd"]}{?[ ]}{?[[]}{?[ +]}{?[<!ENTITY]}{?[ ]}{?[%]}{?[ ]}{?[incent]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["inc.ent"]}{?[>]}{?[ +]}{?[%incent;]}{?[ +]}{?[]]}{?[>]}{?[ +]}{ROOT ID="elem1"}{CDATA[ +]}{CDATA[ Plain text.]}{CDATA[ +]}{CDATA[ ]}{ELEM1}{CDATA[ +]}{CDATA[ ]}{?[<!-- comment -->]}{CDATA[ +]}{CDATA[ ]}{ELEM2}{CDATA[ +]}{CDATA[ ]}{?[<![CDATA[]}{CDATA[CDATA block]}{?[]]>]}{CDATA[ +]}{CDATA[ ]}{ELEM3}{CDATA[ +]}{CDATA[ ]}{ENTREF[&included-entity;]}{CDATA[ +]}{CDATA[ ]}{ELEM4}{CDATA[ +]}{CDATA[ ]}{PI[test,processing instruction ]}{CDATA[ +]}{CDATA[ ]}{/ELEM4}{CDATA[ +]}{CDATA[ ]}{/ELEM3}{CDATA[ +]}{CDATA[ ]}{/ELEM2}{CDATA[ +]}{CDATA[ ]}{/ELEM1}{CDATA[ +]}{/ROOT}{?[ +]}parse complete diff --git a/ext/xml/tests/003.phpt b/ext/xml/tests/003.phpt new file mode 100644 index 0000000000..81b7f9d478 --- /dev/null +++ b/ext/xml/tests/003.phpt @@ -0,0 +1,89 @@ +--TEST-- +XML parser test, xml_set_object callbacks +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php + +$xml_parser = xml_parser_create(); +$obj = new myclass; +xml_set_object($xml_parser, &$obj); +xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1); +xml_set_element_handler($xml_parser, "startElement", "endElement"); +xml_set_character_data_handler($xml_parser, "characterData"); +xml_set_processing_instruction_handler($xml_parser, "PIHandler"); +xml_set_default_handler($xml_parser, "defaultHandler"); +xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler"); + +if (!($fp = @fopen("xmltest.xml", "r"))) { + die("could not open XML input"); +} + +while ($data = fread($fp, 4096)) { + if (!xml_parse($xml_parser, $data, feof($fp))) { + die(sprintf("XML error: %s at line %d\n", + xml_error_string(xml_get_error_code($xml_parser)), + xml_get_current_line_number($xml_parser))); + } +} +print "parse complete\n"; +xml_parser_free($xml_parser); + +class myclass { + function startElement($parser, $name, $attribs) { + print "\{$name"; + if (sizeof($attribs)) { + while (list($k, $v) = each($attribs)) { + print " $k=\"$v\""; + } + } + print "}"; + } + function endElement($parser, $name) { + print "\{/$name}"; + } + function characterData($parser, $data) { + print "\{CDATA[$data]}"; + } + function PIHandler($parser, $target, $data) { + print "\{PI[$target,$data]}"; + } + function defaultHandler($parser, $data) { + if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") { + print "\{ENTREF[$data]}"; + } else { + print "\{?[$data]}"; + } + } + function externalEntityRefHandler($parser, $openEntityNames, $base, + $systemId, $publicId) { + print "\{EXTENTREF[$openEntityNames,$base,$systemId,$publicId]}\n"; + return true; + } +} + +?> +--GET-- +--POST-- +--EXPECT-- +{?[<?xml version="1.0" encoding="ISO-8859-1"?>]}{?[ +]}{?[<!DOCTYPE]}{?[ ]}{?[phptest]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["notfound.dtd"]}{?[ ]}{?[[]}{?[ +]}{?[<!ENTITY]}{?[ ]}{?[%]}{?[ ]}{?[incent]}{?[ ]}{?[SYSTEM]}{?[ ]}{?["inc.ent"]}{?[>]}{?[ +]}{?[%incent;]}{?[ +]}{?[]]}{?[>]}{?[ +]}{ROOT ID="elem1"}{CDATA[ +]}{CDATA[ Plain text.]}{CDATA[ +]}{CDATA[ ]}{ELEM1}{CDATA[ +]}{CDATA[ ]}{?[<!-- comment -->]}{CDATA[ +]}{CDATA[ ]}{ELEM2}{CDATA[ +]}{CDATA[ ]}{?[<![CDATA[]}{CDATA[CDATA block]}{?[]]>]}{CDATA[ +]}{CDATA[ ]}{ELEM3}{CDATA[ +]}{CDATA[ ]}{ENTREF[&included-entity;]}{CDATA[ +]}{CDATA[ ]}{ELEM4}{CDATA[ +]}{CDATA[ ]}{PI[test,processing instruction ]}{CDATA[ +]}{CDATA[ ]}{/ELEM4}{CDATA[ +]}{CDATA[ ]}{/ELEM3}{CDATA[ +]}{CDATA[ ]}{/ELEM2}{CDATA[ +]}{CDATA[ ]}{/ELEM1}{CDATA[ +]}{/ROOT}{?[ +]}parse complete diff --git a/ext/xml/tests/004.phpt b/ext/xml/tests/004.phpt new file mode 100644 index 0000000000..fc07b23407 --- /dev/null +++ b/ext/xml/tests/004.phpt @@ -0,0 +1,58 @@ +--TEST-- +XML parser case folding test +--SKIPIF-- +<?php include("skipif.php"); ?> +--FILE-- +<?php +$xp = xml_parser_create(); +xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, false); +xml_set_element_handler($xp, "start_element", "end_element"); +$fp = fopen("xmltest.xml", "r"); +while ($data = fread($fp, 4096)) { + xml_parse($xp, $data, feof($fp)); +} +xml_parser_free($xp); +$xp = xml_parser_create(); +xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, true); +xml_set_element_handler($xp, "start_element", "end_element"); +$fp = fopen("xmltest.xml", "r"); +while ($data = fread($fp, 4096)) { + xml_parse($xp, $data, feof($fp)); +} +xml_parser_free($xp); +function start_element($xp, $elem, $attribs) { + print "<$elem"; + if (sizeof($attribs)) { + while (list($k, $v) = each($attribs)) { + print " $k=\"$v\""; + } + } + print ">\n"; +} +function end_element($xp, $elem) { + print "</$elem>\n"; +} +?> +--GET-- +--POST-- +--EXPECT-- +<root id="elem1"> +<elem1> +<elem2> +<elem3> +<elem4> +</elem4> +</elem3> +</elem2> +</elem1> +</root> +<ROOT ID="elem1"> +<ELEM1> +<ELEM2> +<ELEM3> +<ELEM4> +</ELEM4> +</ELEM3> +</ELEM2> +</ELEM1> +</ROOT> diff --git a/ext/xml/tests/006.phpt b/ext/xml/tests/006.phpt new file mode 100644 index 0000000000..80c1842fad --- /dev/null +++ b/ext/xml/tests/006.phpt @@ -0,0 +1,14 @@ +--TEST-- +UTF-8<->ISO Latin 1 encoding/decoding test +--SKIPIF-- +<?php include("skipif.php"); ?> +--FILE-- +<?php +printf("%s -> %s\n", urlencode("æ"), urlencode(utf8_encode("æ"))); +printf("%s <- %s\n", urlencode(utf8_decode(urldecode("%C3%A6"))), "%C3%A6"); +?> +--GET-- +--POST-- +--EXPECT-- +%E6 -> %C3%A6 +%E6 <- %C3%A6 diff --git a/ext/xml/tests/inc.ent b/ext/xml/tests/inc.ent new file mode 100644 index 0000000000..8f86465c2a --- /dev/null +++ b/ext/xml/tests/inc.ent @@ -0,0 +1 @@ +<!ENTITY included-entity "This is text included from an entity"> diff --git a/ext/xml/tests/skipif.php b/ext/xml/tests/skipif.php new file mode 100644 index 0000000000..1c33251b76 --- /dev/null +++ b/ext/xml/tests/skipif.php @@ -0,0 +1,9 @@ +<?php +if (!extension_loaded("xml")) { + $dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so"; + @dl("xml$dlext"); +} +if (!extension_loaded("xml")) { + print "skip\n"; +} +?> diff --git a/ext/xml/tests/xmltest.xml b/ext/xml/tests/xmltest.xml new file mode 100644 index 0000000000..c15d6ea1ab --- /dev/null +++ b/ext/xml/tests/xmltest.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE phptest SYSTEM "notfound.dtd" [ +<!ENTITY % incent SYSTEM "inc.ent"> +%incent; +]> +<root id="elem1"> + Plain text. + <elem1> + <!-- comment --> + <elem2> + <![CDATA[CDATA block]]> + <elem3> + &included-entity; + <elem4> + <?test processing instruction ?> + </elem4> + </elem3> + </elem2> + </elem1> +</root> |