summaryrefslogtreecommitdiff
path: root/ext/xmlreader/tests
diff options
context:
space:
mode:
Diffstat (limited to 'ext/xmlreader/tests')
-rw-r--r--ext/xmlreader/tests/002.phpt2
-rw-r--r--ext/xmlreader/tests/003-get-errors.phpt77
-rw-r--r--ext/xmlreader/tests/003-mb.phpt2
-rw-r--r--ext/xmlreader/tests/003-move-errors.phpt76
-rw-r--r--ext/xmlreader/tests/003.phpt12
-rw-r--r--ext/xmlreader/tests/004.phpt2
-rw-r--r--ext/xmlreader/tests/007.phpt4
-rw-r--r--ext/xmlreader/tests/008.phpt4
-rw-r--r--[-rwxr-xr-x]ext/xmlreader/tests/012.dtd0
-rw-r--r--ext/xmlreader/tests/012.phpt6
-rw-r--r--[-rwxr-xr-x]ext/xmlreader/tests/012.xml0
-rw-r--r--ext/xmlreader/tests/013.phpt4
-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
-rw-r--r--ext/xmlreader/tests/bug71805.phpt4
-rw-r--r--ext/xmlreader/tests/next_basic.phpt42
-rw-r--r--ext/xmlreader/tests/open_error.phpt13
-rw-r--r--ext/xmlreader/tests/readString_basic.phpt16
-rw-r--r--ext/xmlreader/tests/schema-empty.xsd0
-rw-r--r--ext/xmlreader/tests/setParserProperty_error.phpt18
-rw-r--r--ext/xmlreader/tests/setSchema_error.phpt29
26 files changed, 505 insertions, 19 deletions
diff --git a/ext/xmlreader/tests/002.phpt b/ext/xmlreader/tests/002.phpt
index 6101d6cc48..b2d50731ee 100644
--- a/ext/xmlreader/tests/002.phpt
+++ b/ext/xmlreader/tests/002.phpt
@@ -4,7 +4,7 @@ XMLReader: libxml2 XML Reader, file data
<?php if (!extension_loaded("xmlreader")) print "skip"; ?>
--FILE--
<?php
-$filename = dirname(__FILE__) . '/_002.xml';
+$filename = __DIR__ . '/_002.xml';
$xmlstring = '<?xml version="1.0" encoding="UTF-8"?>
<books></books>';
file_put_contents($filename, $xmlstring);
diff --git a/ext/xmlreader/tests/003-get-errors.phpt b/ext/xmlreader/tests/003-get-errors.phpt
new file mode 100644
index 0000000000..9e5aa7e38f
--- /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 = __DIR__ . '/003-get-errors.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__.'/003-get-errors.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-mb.phpt b/ext/xmlreader/tests/003-mb.phpt
index 905f8fd03e..6d3282e6a5 100644
--- a/ext/xmlreader/tests/003-mb.phpt
+++ b/ext/xmlreader/tests/003-mb.phpt
@@ -4,7 +4,7 @@ XMLReader: libxml2 XML Reader, attributes test
<?php if (!extension_loaded("xmlreader")) print "skip"; ?>
--FILE--
<?php
-$filename = dirname(__FILE__) . '/私はガラスを食べられます_003.xml';
+$filename = __DIR__ . '/私はガラスを食べられます_003.xml';
$xmlstring = '<?xml version="1.0" encoding="UTF-8"?>
<books><book num="1" idx="2">book1</book></books>';
diff --git a/ext/xmlreader/tests/003-move-errors.phpt b/ext/xmlreader/tests/003-move-errors.phpt
new file mode 100644
index 0000000000..0f21a2747b
--- /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 = __DIR__ . '/003-move-errors.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__.'/003-move-errors.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/003.phpt b/ext/xmlreader/tests/003.phpt
index 3dc8caf55a..ae255220b3 100644
--- a/ext/xmlreader/tests/003.phpt
+++ b/ext/xmlreader/tests/003.phpt
@@ -4,7 +4,7 @@ XMLReader: libxml2 XML Reader, attributes test
<?php if (!extension_loaded("xmlreader")) print "skip"; ?>
--FILE--
<?php
-$filename = dirname(__FILE__) . '/_003.xml';
+$filename = __DIR__ . '/_003.xml';
$xmlstring = '<?xml version="1.0" encoding="UTF-8"?>
<books><book num="1" idx="2">book1</book></books>';
@@ -66,6 +66,9 @@ while ($reader->read()) {
echo $reader->name . ": ";
echo $reader->value . "\n";
+ var_dump($reader->moveToAttributeNo(20));
+ var_dump($reader->moveToAttribute('missing-attribute'));
+ var_dump($reader->moveToAttribute(''));
}
}
}
@@ -73,11 +76,16 @@ $reader->close();
unlink($filename);
?>
===DONE===
---EXPECT--
+--EXPECTF--
num: 1
idx: 2
num: 1
idx: 2
num: 1
idx: 2
+bool(false)
+bool(false)
+
+Warning: XMLReader::moveToAttribute(): Attribute Name is required in %s on line %d
+bool(false)
===DONE===
diff --git a/ext/xmlreader/tests/004.phpt b/ext/xmlreader/tests/004.phpt
index 9298945847..915a14bccf 100644
--- a/ext/xmlreader/tests/004.phpt
+++ b/ext/xmlreader/tests/004.phpt
@@ -4,7 +4,7 @@ XMLReader: libxml2 XML Reader, attributes test
<?php if (!extension_loaded("xmlreader")) print "skip"; ?>
--FILE--
<?php
-$filename = dirname(__FILE__) . '/_004.xml';
+$filename = __DIR__ . '/_004.xml';
$xmlstring = '<?xml version="1.0" encoding="UTF-8"?>
<books><book num="1" idx="2">book1</book></books>';
diff --git a/ext/xmlreader/tests/007.phpt b/ext/xmlreader/tests/007.phpt
index acbb574721..88e8800054 100644
--- a/ext/xmlreader/tests/007.phpt
+++ b/ext/xmlreader/tests/007.phpt
@@ -6,8 +6,8 @@ XMLReader: libxml2 XML Reader, setRelaxNGSchema
<?php
$xmlstring = '<TEI.2>hello</TEI.2>';
-$relaxngfile = dirname(__FILE__) . '/relaxNG.rng';
-$file = dirname(__FILE__) . '/_007.xml';
+$relaxngfile = __DIR__ . '/relaxNG.rng';
+$file = __DIR__ . '/_007.xml';
file_put_contents($file, $xmlstring);
$reader = new XMLReader();
diff --git a/ext/xmlreader/tests/008.phpt b/ext/xmlreader/tests/008.phpt
index fd3da46184..ceb0972376 100644
--- a/ext/xmlreader/tests/008.phpt
+++ b/ext/xmlreader/tests/008.phpt
@@ -21,8 +21,8 @@ $xmlstring = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
</MOVIE>
</LIST>';
-$dtdfile = rawurlencode(dirname(__FILE__)) . '/dtdexample.dtd';
-$file = dirname(__FILE__) . '/_008.xml';
+$dtdfile = rawurlencode(__DIR__) . '/dtdexample.dtd';
+$file = __DIR__ . '/_008.xml';
file_put_contents($file, $xmlstring);
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.phpt b/ext/xmlreader/tests/012.phpt
index 50b761c235..ba4455ade7 100644
--- a/ext/xmlreader/tests/012.phpt
+++ b/ext/xmlreader/tests/012.phpt
@@ -23,7 +23,7 @@ $xmlstring =<<<EOF
<foo bar=""/>
EOF;
-$xmlstring = str_replace('012.dtd', dirname(__FILE__).'/012.dtd', $xmlstring);
+$xmlstring = str_replace('012.dtd', __DIR__.'/012.dtd', $xmlstring);
if (DIRECTORY_SEPARATOR == '\\') {
$xmlstring = str_replace('\\',"/", $xmlstring);
}
@@ -37,7 +37,7 @@ $reader->close();
echo "\nUsing URI:\n";
$reader = new XMLReader();
-$file = dirname(__FILE__) . '/012.xml';
+$file = __DIR__ . '/012.xml';
if (DIRECTORY_SEPARATOR == '\\') {
$file = str_replace('\\',"/", $file);
}
@@ -51,7 +51,7 @@ var_dump($reader->getAttribute('baz'));
$reader->close();
$reader = new XMLReader();
-$reader->open(dirname(__FILE__) . '/012.xml');
+$reader->open(__DIR__ . '/012.xml');
$reader->setParserProperty(XMLReader::DEFAULTATTRS, true);
while($reader->read() && $reader->nodeType != XMLReader::ELEMENT);
var_dump($reader->getAttribute('bar'));
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.phpt b/ext/xmlreader/tests/013.phpt
index 09bef8df0c..bceccced6b 100644
--- a/ext/xmlreader/tests/013.phpt
+++ b/ext/xmlreader/tests/013.phpt
@@ -16,7 +16,7 @@ EOF;
$reader = new XMLReader();
$reader->XML($xml);
-$reader->setSchema(dirname(__FILE__) . '/013.xsd');
+$reader->setSchema(__DIR__ . '/013.xsd');
while($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'item') {
$reader->read();
@@ -36,7 +36,7 @@ EOF;
$reader = new XMLReader();
$reader->XML($xml);
-$reader->setSchema(dirname(__FILE__) . '/013.xsd');
+$reader->setSchema(__DIR__ . '/013.xsd');
while($reader->read() && $reader->nodeType != XMLReader::ELEMENT);
$reader->close();
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..5969da62f2
--- /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 = __DIR__ . '/_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..06f7eef53b
--- /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 = __DIR__ . '/015-get-errors.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__.'/015-get-errors.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..ab2472258f
--- /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 = __DIR__ . '/015-move-errors.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__.'/015-move-errors.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..b60d1395c8
--- /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 = __DIR__ . '/015.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__.'/015.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
diff --git a/ext/xmlreader/tests/bug71805.phpt b/ext/xmlreader/tests/bug71805.phpt
index 3d1713ace5..6f54b1347a 100644
--- a/ext/xmlreader/tests/bug71805.phpt
+++ b/ext/xmlreader/tests/bug71805.phpt
@@ -5,8 +5,8 @@ XMLReader: Bug #71805 XML files can generate UTF-8 error even if they are UTF-8
--FILE--
<?php
-TestXML(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'XMLReaderGood_bug71805.xml');
-TestXML(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'XMLReaderBad_bug71805.xml');
+TestXML(__DIR__ . DIRECTORY_SEPARATOR . 'XMLReaderGood_bug71805.xml');
+TestXML(__DIR__ . DIRECTORY_SEPARATOR . 'XMLReaderBad_bug71805.xml');
function TestXML($file) {
$XR = new XMLReader;
diff --git a/ext/xmlreader/tests/next_basic.phpt b/ext/xmlreader/tests/next_basic.phpt
new file mode 100644
index 0000000000..e0663c23d3
--- /dev/null
+++ b/ext/xmlreader/tests/next_basic.phpt
@@ -0,0 +1,42 @@
+--TEST--
+XMLReader: next basic
+--SKIPIF--
+<?php if (!extension_loaded("xmlreader")) print "skip XMLReader extension required"; ?>
+--FILE--
+<?php
+
+$xml = '<?xml version="1.0" encoding="UTF-8"?><nodes><node1><sub /></node1>
+<node2><sub /></node2><node3><sub /></node3><node4><sub /></node4></nodes>';
+
+$reader = new XMLReader();
+$reader->read();
+$reader->next();
+$reader->close();
+
+$reader->XML($xml);
+$reader->read();
+$reader->read();
+echo $reader->name . PHP_EOL;
+var_dump($reader->next('node3'));
+echo $reader->name . PHP_EOL;
+var_dump($reader->next());
+echo $reader->name . PHP_EOL;
+var_dump($reader->next('node5'));
+echo $reader->name . PHP_EOL;
+var_dump($reader->next());
+echo $reader->name . PHP_EOL;
+$reader->close();
+
+?>
+--EXPECTF--
+Warning: XMLReader::read(): Load Data before trying to read in %s on line %d
+
+Warning: XMLReader::next(): Load Data before trying to read in %s on line %d
+node1
+bool(true)
+node3
+bool(true)
+node4
+bool(false)
+
+bool(false)
diff --git a/ext/xmlreader/tests/open_error.phpt b/ext/xmlreader/tests/open_error.phpt
new file mode 100644
index 0000000000..0199f509b6
--- /dev/null
+++ b/ext/xmlreader/tests/open_error.phpt
@@ -0,0 +1,13 @@
+--TEST--
+XMLReader: open error
+--SKIPIF--
+<?php if (!extension_loaded("xmlreader")) print "skip XMLReader extension required"; ?>
+--FILE--
+<?php
+$reader = new XMLReader();
+var_dump($reader->open(__DIR__.'/missing-file.xml'));
+$reader->close();
+?>
+--EXPECTF--
+Warning: XMLReader::open(): Unable to open source data in %s on line %d
+bool(false)
diff --git a/ext/xmlreader/tests/readString_basic.phpt b/ext/xmlreader/tests/readString_basic.phpt
new file mode 100644
index 0000000000..6f3f51dc02
--- /dev/null
+++ b/ext/xmlreader/tests/readString_basic.phpt
@@ -0,0 +1,16 @@
+--TEST--
+XMLReader: readString basic
+--SKIPIF--
+<?php if (!extension_loaded("xmlreader")) print "skip XMLReader extension required"; ?>
+--FILE--
+<?php
+
+$xml = '<?xml version="1.0" encoding="UTF-8"?><books><book>Book1</book><book>Book2</book></books>';
+
+$reader = new XMLReader();
+$reader->xml($xml);
+$reader->read();
+echo $reader->readString();
+?>
+--EXPECT--
+Book1Book2
diff --git a/ext/xmlreader/tests/schema-empty.xsd b/ext/xmlreader/tests/schema-empty.xsd
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/ext/xmlreader/tests/schema-empty.xsd
diff --git a/ext/xmlreader/tests/setParserProperty_error.phpt b/ext/xmlreader/tests/setParserProperty_error.phpt
new file mode 100644
index 0000000000..755a4e4772
--- /dev/null
+++ b/ext/xmlreader/tests/setParserProperty_error.phpt
@@ -0,0 +1,18 @@
+--TEST--
+XMLReader: setParserProperty Error
+--SKIPIF--
+<?php if (!extension_loaded("xmlreader")) print "skip XMLReader extension required"; ?>
+--FILE--
+<?php
+
+$xml = '<?xml version="1.0" encoding="UTF-8"?><books><book>new book</book></books>';
+
+$invalidProperty = -1;
+$reader = new XMLReader();
+$reader->XML($xml);
+var_dump($reader->setParserProperty(-1, true));
+$reader->close();
+?>
+--EXPECTF--
+Warning: XMLReader::setParserProperty(): Invalid parser property in %s on line %d
+bool(false)
diff --git a/ext/xmlreader/tests/setSchema_error.phpt b/ext/xmlreader/tests/setSchema_error.phpt
new file mode 100644
index 0000000000..31bd4d6e3e
--- /dev/null
+++ b/ext/xmlreader/tests/setSchema_error.phpt
@@ -0,0 +1,29 @@
+--TEST--
+XMLReader: setSchema Error
+--SKIPIF--
+<?php if (!extension_loaded("xmlreader")) print "skip XMLReader extension required"; ?>
+--FILE--
+<?php
+
+$reader = new XMLReader();
+var_dump($reader->setSchema(''));
+$reader->close();
+
+$reader = new XMLReader();
+var_dump($reader->setSchema('schema-missing-file.xsd'));
+$reader->close();
+
+$reader = new XMLReader();
+var_dump($reader->setSchema('schema-empty.xsd'));
+$reader->close();
+?>
+--EXPECTF--
+
+Warning: XMLReader::setSchema(): Schema data source is required in %s on line %d
+bool(false)
+
+Warning: XMLReader::setSchema(): Unable to set schema. This must be set prior to reading or schema contains errors. in %s on line %d
+bool(false)
+
+Warning: XMLReader::setSchema(): Unable to set schema. This must be set prior to reading or schema contains errors. in %s on line %d
+bool(false)