summaryrefslogtreecommitdiff
path: root/ext/xml/tests
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2005-07-17 17:38:16 +0000
committerMarcus Boerger <helly@php.net>2005-07-17 17:38:16 +0000
commitdfeddbe539bd26c28cc6d2c652cddc53012e3856 (patch)
tree8d7646222a54bb4a9d7e508a7d9e049b798c54d5 /ext/xml/tests
parent5d762d93beab2192c8bdba2cac25636fe56f02ab (diff)
downloadphp-git-dfeddbe539bd26c28cc6d2c652cddc53012e3856.tar.gz
- If you ask me both (expat and libxml) are not really accurate about byte
positions and columns...however the line number information is now correct for both so for the moment we live with the situation that they return different byte and column information.
Diffstat (limited to 'ext/xml/tests')
-rw-r--r--ext/xml/tests/bug26614.phpt2
-rwxr-xr-xext/xml/tests/bug26614_libxml.phpt90
2 files changed, 92 insertions, 0 deletions
diff --git a/ext/xml/tests/bug26614.phpt b/ext/xml/tests/bug26614.phpt
index 14a4ea8a9f..a8a91ae876 100644
--- a/ext/xml/tests/bug26614.phpt
+++ b/ext/xml/tests/bug26614.phpt
@@ -1,5 +1,7 @@
--TEST--
Bug #26614 (CDATA sections skipped on line count)
+--SKIPIF--
+<?php if (defined("LIBXML_VERSION")) die('skip expat test'); ?>
--FILE--
<?php
/*
diff --git a/ext/xml/tests/bug26614_libxml.phpt b/ext/xml/tests/bug26614_libxml.phpt
new file mode 100755
index 0000000000..9abf936cd1
--- /dev/null
+++ b/ext/xml/tests/bug26614_libxml.phpt
@@ -0,0 +1,90 @@
+--TEST--
+Bug #26614 (CDATA sections skipped on line count)
+--SKIPIF--
+<?php if (!defined("LIBXML_VERSION")) die('skip libxml2 test'); ?>
+--FILE--
+<?php
+/*
+this test works fine with Expat but fails with libxml
+which we now use as default
+
+further investigation has shown that not only line count
+is skippet on CDATA sections but that libxml does also
+show different column numbers and byte positions depending
+on context and in opposition to what one would expect to
+see and what good old Expat reported just fine ...
+*/
+
+$xmls = array();
+
+// Case 1: CDATA Sections
+$xmls["CDATA"] ='<?xml version="1.0" encoding="iso-8859-1" ?>
+<data>
+<![CDATA[
+multi
+line
+CDATA
+block
+]]>
+</data>';
+
+// Case 2: replace some characters so that we get comments instead
+$xmls["Comment"] ='<?xml version="1.0" encoding="iso-8859-1" ?>
+<data>
+<!-- ATA[
+multi
+line
+CDATA
+block
+-->
+</data>';
+
+// Case 3: replace even more characters so that only textual data is left
+$xmls["Text"] ='<?xml version="1.0" encoding="iso-8859-1" ?>
+<data>
+-!-- ATA[
+multi
+line
+CDATA
+block
+---
+</data>';
+
+function startElement($parser, $name, $attrs) {
+ printf("<$name> at line %d, col %d (byte %d)\n",
+ xml_get_current_line_number($parser),
+ xml_get_current_column_number($parser),
+ xml_get_current_byte_index($parser));
+}
+
+function endElement($parser, $name) {
+ printf("</$name> at line %d, col %d (byte %d)\n",
+ xml_get_current_line_number($parser),
+ xml_get_current_column_number($parser),
+ xml_get_current_byte_index($parser));
+}
+
+function characterData($parser, $data) {
+ // dummy
+}
+
+foreach ($xmls as $desc => $xml) {
+ echo "$desc\n";
+ $xml_parser = xml_parser_create();
+ xml_set_element_handler($xml_parser, "startElement", "endElement");
+ xml_set_character_data_handler($xml_parser, "characterData");
+ if (!xml_parse($xml_parser, $xml, true))
+ echo "Error: ".xml_error_string(xml_get_error_code($xml_parser))."\n";
+ xml_parser_free($xml_parser);
+}
+?>
+--EXPECT--
+CDATA
+<DATA> at line 2, col 6 (byte 9)
+</DATA> at line 9, col 8 (byte 56)
+Comment
+<DATA> at line 2, col 6 (byte 9)
+</DATA> at line 9, col 8 (byte 56)
+Text
+<DATA> at line 2, col 6 (byte 9)
+</DATA> at line 9, col 8 (byte 56)