summaryrefslogtreecommitdiff
path: root/ext/xmlreader/tests
diff options
context:
space:
mode:
Diffstat (limited to 'ext/xmlreader/tests')
-rw-r--r--ext/xmlreader/tests/003-get-errors.phpt77
-rw-r--r--ext/xmlreader/tests/003-move-errors.phpt76
-rw-r--r--[-rwxr-xr-x]ext/xmlreader/tests/012.dtd0
-rw-r--r--[-rwxr-xr-x]ext/xmlreader/tests/012.xml0
-rw-r--r--[-rwxr-xr-x]ext/xmlreader/tests/013.xsd0
-rw-r--r--ext/xmlreader/tests/014.phpt51
-rw-r--r--ext/xmlreader/tests/015-get-errors.phpt49
-rw-r--r--ext/xmlreader/tests/015-move-errors.phpt42
-rw-r--r--ext/xmlreader/tests/015.phpt66
-rw-r--r--ext/xmlreader/tests/bug42139.phpt4
-rw-r--r--ext/xmlreader/tests/bug70309.phpt1
11 files changed, 363 insertions, 3 deletions
diff --git a/ext/xmlreader/tests/003-get-errors.phpt b/ext/xmlreader/tests/003-get-errors.phpt
new file mode 100644
index 0000000000..61addaca15
--- /dev/null
+++ b/ext/xmlreader/tests/003-get-errors.phpt
@@ -0,0 +1,77 @@
+--TEST--
+XMLReader: libxml2 XML Reader, Get an attribute, with invalid arguments
+--CREDITS--
+Mark Baker mark@lange.demon.co.uk at the PHPNW2017 Conference for PHP Testfest 2017
+--SKIPIF--
+<?php if (!extension_loaded("xmlreader")) print "skip"; ?>
+--FILE--
+<?php
+// Set up test data in a new file
+$xmlstring = '<?xml version="1.0" encoding="UTF-8"?>
+<books><book num="1" idx="2">book1</book></books>';
+$filename = dirname(__FILE__) . '/_014.xml';
+file_put_contents($filename, $xmlstring);
+
+// Load test data into a new XML Reader
+$reader = new XMLReader();
+if (!$reader->open($filename)) {
+ exit('XML could not be read');
+}
+
+// Parse the data
+while ($reader->read()) {
+ if ($reader->nodeType != XMLREADER::END_ELEMENT) {
+ // Find the book node
+ if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name == 'book') {
+ echo $reader->name . "\n";
+
+ $attr = $reader->moveToNextAttribute();
+ var_dump($attr);
+ echo $reader->name . ": ";
+ echo $reader->value . "\n";
+
+ // Test for call with an empty string argument
+ $attr = $reader->getAttribute('');
+ var_dump($attr);
+ // Ensure that node pointer has not changed position
+ echo $reader->name . ": ";
+ echo $reader->value . "\n";
+
+ // Test for call by name for an attribute that doesn't exist
+ $attr = $reader->getAttribute('isbn');
+ var_dump($attr); // NULL expected
+ // Ensure that node pointer has not changed position
+ echo $reader->name . ": ";
+ echo $reader->value . "\n";
+
+ // Test for call by number for an attribute that doesn't exist
+ $attr = $reader->getAttributeNo(911);
+ var_dump($attr); // NULL expected
+ // Ensure that node pointer has not changed position
+ echo $reader->name . ": ";
+ echo $reader->value . "\n";
+ }
+ }
+}
+
+// clean up
+$reader->close();
+?>
+===DONE===
+--CLEAN--
+<?php
+unlink(__DIR__.'/_014.xml');
+?>
+--EXPECTF--
+book
+bool(true)
+num: 1
+
+Warning: XMLReader::getAttribute(): Argument cannot be an empty string in %s on line %d
+bool(false)
+num: 1
+NULL
+num: 1
+NULL
+num: 1
+===DONE===
diff --git a/ext/xmlreader/tests/003-move-errors.phpt b/ext/xmlreader/tests/003-move-errors.phpt
new file mode 100644
index 0000000000..641324b54e
--- /dev/null
+++ b/ext/xmlreader/tests/003-move-errors.phpt
@@ -0,0 +1,76 @@
+--TEST--
+XMLReader: libxml2 XML Reader, Move cursor to an attribute, with invalid arguments
+--CREDITS--
+Mark Baker mark@lange.demon.co.uk at the PHPNW2017 Conference for PHP Testfest 2017
+--SKIPIF--
+<?php if (!extension_loaded("xmlreader")) print "skip"; ?>
+--FILE--
+<?php
+// Set up test data in a new file
+$xmlstring = '<?xml version="1.0" encoding="UTF-8"?>
+<books><book num="1" idx="2">book1</book></books>';
+$filename = dirname(__FILE__) . '/_014.xml';
+file_put_contents($filename, $xmlstring);
+
+// Load test data into a new XML Reader
+$reader = new XMLReader();
+if (!$reader->open($filename)) {
+ exit('XML could not be read');
+}
+
+// Parse the data
+while ($reader->read()) {
+ if ($reader->nodeType != XMLREADER::END_ELEMENT) {
+ // Find the book node
+ if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name == 'book') {
+ echo $reader->name . "\n";
+
+ $attr = $reader->moveToNextAttribute();
+ var_dump($attr);
+ echo $reader->name . ": ";
+ echo $reader->value . "\n";
+
+ // Test for call with an empty string argument
+ $attr = $reader->moveToAttribute('');
+ var_dump($attr);
+ // Ensure that node pointer has not changed position
+ echo $reader->name . ": ";
+ echo $reader->value . "\n";
+
+ // Test for call by name for an attribute that doesn't exist
+ $attr = $reader->moveToAttribute('isbn');
+ var_dump($attr);
+ // Ensure that node pointer has not changed position
+ echo $reader->name . ": ";
+ echo $reader->value . "\n";
+
+ // Test for call by number for an attribute that doesn't exist
+ $attr = $reader->moveToAttributeNo(911);
+ var_dump($attr);
+ // Oddly, node pointer moves back to the element in this case
+ echo $reader->name . "\n";
+ }
+ }
+}
+
+// clean up
+$reader->close();
+?>
+===DONE===
+--CLEAN--
+<?php
+unlink(__DIR__.'/_014.xml');
+?>
+--EXPECTF--
+book
+bool(true)
+num: 1
+
+Warning: XMLReader::moveToAttribute(): Attribute Name is required in %s on line %d
+bool(false)
+num: 1
+bool(false)
+num: 1
+bool(false)
+book
+===DONE===
diff --git a/ext/xmlreader/tests/012.dtd b/ext/xmlreader/tests/012.dtd
index b65412af0e..b65412af0e 100755..100644
--- a/ext/xmlreader/tests/012.dtd
+++ b/ext/xmlreader/tests/012.dtd
diff --git a/ext/xmlreader/tests/012.xml b/ext/xmlreader/tests/012.xml
index 5012bd5eff..5012bd5eff 100755..100644
--- a/ext/xmlreader/tests/012.xml
+++ b/ext/xmlreader/tests/012.xml
diff --git a/ext/xmlreader/tests/013.xsd b/ext/xmlreader/tests/013.xsd
index 50b000b6fc..50b000b6fc 100755..100644
--- a/ext/xmlreader/tests/013.xsd
+++ b/ext/xmlreader/tests/013.xsd
diff --git a/ext/xmlreader/tests/014.phpt b/ext/xmlreader/tests/014.phpt
new file mode 100644
index 0000000000..cdc041a38e
--- /dev/null
+++ b/ext/xmlreader/tests/014.phpt
@@ -0,0 +1,51 @@
+--TEST--
+XMLReader: libxml2 XML Reader, read-only element values can not be modified
+--CREDITS--
+Mark Baker mark@lange.demon.co.uk at the PHPNW2017 Conference for PHP Testfest 2017
+--SKIPIF--
+<?php if (!extension_loaded("xmlreader")) print "skip"; ?>
+--FILE--
+<?php
+// Set up test data in a new file
+$xmlstring = '<?xml version="1.0" encoding="UTF-8"?>
+<books><book num="1" idx="2">book1</book></books>';
+$filename = dirname(__FILE__) . '/_014.xml';
+file_put_contents($filename, $xmlstring);
+
+// Load test data into a new XML Reader
+$reader = new XMLReader();
+if (!$reader->open($filename)) {
+ exit('XML could not be read');
+}
+
+// Parse the data
+while ($reader->read()) {
+ if ($reader->nodeType != XMLREADER::END_ELEMENT) {
+ // Find a node to try modifying
+ if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name == 'book') {
+ // Try to set the value of the element from book1 to movie1
+ $reader->value = 'movie1';
+ // Try to set the value of the first "num" attribute from "1" to "num attribute 1"
+ $attr = $reader->moveToFirstAttribute();
+ $reader->value = 'num attribute 1';
+ // Try to set the name of the first attribute from "num" to "number"
+ $reader->name = 'number';
+ }
+ }
+}
+
+// clean up
+$reader->close();
+?>
+===DONE===
+--CLEAN--
+<?php
+unlink(__DIR__.'/_014.xml');
+?>
+--EXPECTF--
+Warning: main(): Cannot write to read-only property in %s on line %d
+
+Warning: main(): Cannot write to read-only property in %s on line %d
+
+Warning: main(): Cannot write to read-only property in %s on line %d
+===DONE===
diff --git a/ext/xmlreader/tests/015-get-errors.phpt b/ext/xmlreader/tests/015-get-errors.phpt
new file mode 100644
index 0000000000..0eeed280da
--- /dev/null
+++ b/ext/xmlreader/tests/015-get-errors.phpt
@@ -0,0 +1,49 @@
+--TEST--
+XMLReader: libxml2 XML Reader, Move cursor to a named attribute within a namespace, with invalid arguments
+--CREDITS--
+Mark Baker mark@lange.demon.co.uk at the PHPNW2017 Conference for PHP Testfest 2017
+--SKIPIF--
+<?php if (!extension_loaded("xmlreader")) print "skip"; ?>
+--FILE--
+<?php
+// Set up test data in a new file
+$xmlstring = '<?xml version="1.0" encoding="UTF-8"?>
+<books xmlns:ns1="http://www.ns1.namespace.org/" xmlns:ns2="http://www.ns2.namespace.org/"><book ns1:num="1" ns2:idx="2" ns1:idx="3" ns2:isbn="4">book1</book></books>';
+$filename = dirname(__FILE__) . '/_014.xml';
+file_put_contents($filename, $xmlstring);
+
+// Load test data into a new XML Reader
+$reader = new XMLReader();
+if (!$reader->open($filename)) {
+ exit('XML could not be read');
+}
+
+// Parse the data
+while ($reader->read()) {
+ if ($reader->nodeType != XMLREADER::END_ELEMENT) {
+ // Find the book node
+ if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name == 'book') {
+ $attr = $reader->moveToNextAttribute();
+
+ // Test for missing namespace argument
+ $attr = $reader->getAttributeNs('idx', null);
+ var_dump($attr);
+ echo $reader->name . ": ";
+ echo $reader->value . "\n";
+ }
+ }
+}
+
+// clean up
+$reader->close();
+?>
+===DONE===
+--CLEAN--
+<?php
+unlink(__DIR__.'/_014.xml');
+?>
+--EXPECTF--
+Warning: XMLReader::getAttributeNs(): Attribute Name and Namespace URI cannot be empty in %s on line %d
+bool(false)
+ns1:num: 1
+===DONE===
diff --git a/ext/xmlreader/tests/015-move-errors.phpt b/ext/xmlreader/tests/015-move-errors.phpt
new file mode 100644
index 0000000000..b54a243070
--- /dev/null
+++ b/ext/xmlreader/tests/015-move-errors.phpt
@@ -0,0 +1,42 @@
+--TEST--
+XMLReader: libxml2 XML Reader, Move cursor to a named attribute within a namespace, with invalid arguments
+--CREDITS--
+Mark Baker mark@lange.demon.co.uk at the PHPNW2017 Conference for PHP Testfest 2017
+--SKIPIF--
+<?php if (!extension_loaded("xmlreader")) print "skip"; ?>
+--FILE--
+<?php
+// Set up test data in a new file
+$xmlstring = '<?xml version="1.0" encoding="UTF-8"?>
+<books xmlns:ns1="http://www.ns1.namespace.org/" xmlns:ns2="http://www.ns2.namespace.org/"><book ns1:num="1" ns2:idx="2" ns1:idx="3" ns2:isbn="4">book1</book></books>';
+$filename = dirname(__FILE__) . '/_014.xml';
+file_put_contents($filename, $xmlstring);
+
+// Load test data into a new XML Reader
+$reader = new XMLReader();
+if (!$reader->open($filename)) {
+ exit('XML could not be read');
+}
+
+// Parse the data
+while ($reader->read()) {
+ if ($reader->nodeType != XMLREADER::END_ELEMENT) {
+ // Find the book node
+ if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name == 'book') {
+ // Test for missing namespace argument
+ $attr = $reader->moveToAttributeNs('idx', null);
+ }
+ }
+}
+
+// clean up
+$reader->close();
+?>
+===DONE===
+--CLEAN--
+<?php
+unlink(__DIR__.'/_014.xml');
+?>
+--EXPECTF--
+Warning: XMLReader::moveToAttributeNs(): Attribute Name and Namespace URI cannot be empty in %s on line %d
+===DONE===
diff --git a/ext/xmlreader/tests/015.phpt b/ext/xmlreader/tests/015.phpt
new file mode 100644
index 0000000000..4945927740
--- /dev/null
+++ b/ext/xmlreader/tests/015.phpt
@@ -0,0 +1,66 @@
+--TEST--
+XMLReader: libxml2 XML Reader, Move cursor to a named attribute within a namespace
+--CREDITS--
+Mark Baker mark@lange.demon.co.uk at the PHPNW2017 Conference for PHP Testfest 2017
+--SKIPIF--
+<?php if (!extension_loaded("xmlreader")) print "skip"; ?>
+--FILE--
+<?php
+// Set up test data in a new file
+$xmlstring = '<?xml version="1.0" encoding="UTF-8"?>
+<books xmlns:ns1="http://www.ns1.namespace.org/" xmlns:ns2="http://www.ns2.namespace.org/"><book ns1:num="1" ns2:idx="2" ns1:idx="3" ns2:isbn="4">book1</book></books>';
+$filename = dirname(__FILE__) . '/_014.xml';
+file_put_contents($filename, $xmlstring);
+
+// Load test data into a new XML Reader
+$reader = new XMLReader();
+if (!$reader->open($filename)) {
+ exit('XML could not be read');
+}
+
+// Parse the data
+while ($reader->read()) {
+ if ($reader->nodeType != XMLREADER::END_ELEMENT) {
+ // Find the book node
+ if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name == 'book') {
+ $attr = $reader->moveToFirstAttribute();
+ $attr = $reader->moveToAttributeNs('idx', 'http://www.ns1.namespace.org/');
+ echo $reader->name . ": ";
+ echo $reader->value . "\n";
+
+ $attr = $reader->moveToAttributeNs('idx', 'http://www.ns2.namespace.org/');
+ echo $reader->name . ": ";
+ echo $reader->value . "\n";
+
+ $attr = $reader->moveToAttributeNs('isbn', 'http://www.ns2.namespace.org/');
+ echo $reader->name . ": ";
+ echo $reader->value . "\n";
+
+ // Try moving to an attribute that doesn't exist
+ $attr = $reader->moveToAttributeNs('elephpant', 'http://www.ns2.namespace.org/');
+ // That move should return a result of false, because there is no elephpant attribute (in any namespace)
+ if (!$attr) {
+ echo "Attribute does not exist\n";
+ }
+ // Node pointer should still be aat the last valid node
+ echo $reader->name . ": ";
+ echo $reader->value . "\n";
+ }
+ }
+}
+
+// clean up
+$reader->close();
+?>
+===DONE===
+--CLEAN--
+<?php
+unlink(__DIR__.'/_014.xml');
+?>
+--EXPECT--
+ns1:idx: 3
+ns2:idx: 2
+ns2:isbn: 4
+Attribute does not exist
+ns2:isbn: 4
+===DONE===
diff --git a/ext/xmlreader/tests/bug42139.phpt b/ext/xmlreader/tests/bug42139.phpt
index 424e8e75c1..a3efb59d0b 100644
--- a/ext/xmlreader/tests/bug42139.phpt
+++ b/ext/xmlreader/tests/bug42139.phpt
@@ -1,9 +1,7 @@
--TEST--
Bug #42139 (XMLReader option constants are broken using XML())
--SKIPIF--
-<?php if (!extension_loaded("xmlreader")) print "skip";
-if (LIBXML_VERSION < 20628) die("skip: libxml2 2.6.28+ required");
-?>
+<?php if (!extension_loaded("xmlreader")) print "skip"; ?>
--FILE--
<?php
diff --git a/ext/xmlreader/tests/bug70309.phpt b/ext/xmlreader/tests/bug70309.phpt
index aa49051593..199ad5df5f 100644
--- a/ext/xmlreader/tests/bug70309.phpt
+++ b/ext/xmlreader/tests/bug70309.phpt
@@ -4,6 +4,7 @@ XMLReader: Bug #70309 XmlReader read generates extra output
<?php if (substr(PHP_OS, 0, 3) != 'WIN') die('skip.. only for Windows'); ?>
<?php if (!extension_loaded("xmlreader")) print "skip"; ?>
<?php if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); ?>
+<?php if (getenv("SKIP_ONLINE_TESTS")) die("skip online test"); ?>
--FILE--
<?php