summaryrefslogtreecommitdiff
path: root/ext/xmlwriter/tests
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2013-03-14 05:42:27 +0000
committer <>2013-04-03 16:25:08 +0000
commitc4dd7a1a684490673e25aaf4fabec5df138854c4 (patch)
tree4d57c44caae4480efff02b90b9be86f44bf25409 /ext/xmlwriter/tests
downloadphp2-master.tar.gz
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
Diffstat (limited to 'ext/xmlwriter/tests')
-rw-r--r--ext/xmlwriter/tests/001.phpt25
-rw-r--r--ext/xmlwriter/tests/002.phpt22
-rw-r--r--ext/xmlwriter/tests/003.phpt35
-rw-r--r--ext/xmlwriter/tests/004.phpt36
-rw-r--r--ext/xmlwriter/tests/005.phpt33
-rw-r--r--ext/xmlwriter/tests/006.phpt26
-rw-r--r--ext/xmlwriter/tests/007.phpt38
-rw-r--r--ext/xmlwriter/tests/008.phpt40
-rw-r--r--ext/xmlwriter/tests/009.phpt45
-rw-r--r--ext/xmlwriter/tests/010.phpt45
-rw-r--r--ext/xmlwriter/tests/OO_001.phpt26
-rw-r--r--ext/xmlwriter/tests/OO_002.phpt22
-rw-r--r--ext/xmlwriter/tests/OO_003.phpt37
-rw-r--r--ext/xmlwriter/tests/OO_004.phpt37
-rw-r--r--ext/xmlwriter/tests/OO_005.phpt33
-rw-r--r--ext/xmlwriter/tests/OO_006.phpt27
-rw-r--r--ext/xmlwriter/tests/OO_007.phpt39
-rw-r--r--ext/xmlwriter/tests/OO_008.phpt35
-rw-r--r--ext/xmlwriter/tests/OO_009.phpt45
-rw-r--r--ext/xmlwriter/tests/bug39504.phpt36
-rw-r--r--ext/xmlwriter/tests/bug41287.phpt47
-rw-r--r--ext/xmlwriter/tests/bug41326.phpt56
-rw-r--r--ext/xmlwriter/tests/bug48204.phpt17
-rw-r--r--ext/xmlwriter/tests/xmlwriter_open_uri_error_001.phpt16
-rw-r--r--ext/xmlwriter/tests/xmlwriter_open_uri_error_002.phpt16
-rw-r--r--ext/xmlwriter/tests/xmlwriter_open_uri_error_003.phpt16
-rw-r--r--ext/xmlwriter/tests/xmlwriter_open_uri_error_004.phpt16
-rw-r--r--ext/xmlwriter/tests/xmlwriter_open_uri_error_005.phpt16
-rw-r--r--ext/xmlwriter/tests/xmlwriter_set_indent_string_basic_001.phpt24
-rw-r--r--ext/xmlwriter/tests/xmlwriter_set_indent_string_error_001.phpt24
-rw-r--r--ext/xmlwriter/tests/xmlwriter_write_attribute_ns_basic_001.phpt28
-rw-r--r--ext/xmlwriter/tests/xmlwriter_write_attribute_ns_error_001.phpt34
-rw-r--r--ext/xmlwriter/tests/xmlwriter_write_dtd_basic_001.phpt22
-rw-r--r--ext/xmlwriter/tests/xmlwriter_write_dtd_error_001.phpt15
34 files changed, 1029 insertions, 0 deletions
diff --git a/ext/xmlwriter/tests/001.phpt b/ext/xmlwriter/tests/001.phpt
new file mode 100644
index 0000000..a9349d2
--- /dev/null
+++ b/ext/xmlwriter/tests/001.phpt
@@ -0,0 +1,25 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, file buffer, flush
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+/* $Id$ */
+
+$doc_dest = '001.xml';
+$xw = xmlwriter_open_uri($doc_dest);
+xmlwriter_start_document($xw, '1.0', 'UTF-8');
+xmlwriter_start_element($xw, "tag1");
+xmlwriter_end_document($xw);
+
+// Force to write and empty the buffer
+$output_bytes = xmlwriter_flush($xw, true);
+echo file_get_contents($doc_dest);
+unset($xw);
+unlink('001.xml');
+?>
+===DONE===
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<tag1/>
+===DONE===
diff --git a/ext/xmlwriter/tests/002.phpt b/ext/xmlwriter/tests/002.phpt
new file mode 100644
index 0000000..f2537a4
--- /dev/null
+++ b/ext/xmlwriter/tests/002.phpt
@@ -0,0 +1,22 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, membuffer, flush
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+/* $Id$ */
+
+$doc_dest = '001.xml';
+$xw = xmlwriter_open_memory($doc_dest);
+xmlwriter_start_document($xw, '1.0', 'UTF-8');
+xmlwriter_start_element($xw, "tag1");
+xmlwriter_end_document($xw);
+
+// Force to write and empty the buffer
+echo xmlwriter_flush($xw, true);
+?>
+===DONE===
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<tag1/>
+===DONE===
diff --git a/ext/xmlwriter/tests/003.phpt b/ext/xmlwriter/tests/003.phpt
new file mode 100644
index 0000000..5415797
--- /dev/null
+++ b/ext/xmlwriter/tests/003.phpt
@@ -0,0 +1,35 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, membuffer, flush, attribute
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+/* $Id$ */
+
+$doc_dest = '001.xml';
+$xw = xmlwriter_open_memory($doc_dest);
+xmlwriter_start_document($xw, '1.0', 'UTF-8');
+xmlwriter_start_element($xw, "tag1");
+
+
+$res = xmlwriter_start_attribute($xw, 'attr1');
+xmlwriter_text($xw, "attr1_value");
+xmlwriter_end_attribute($xw);
+
+xmlwriter_write_attribute($xw, "att2", "att2_value");
+xmlwriter_text($xw, "Test text for tag1");
+$res = xmlwriter_start_element($xw, 'tag2');
+if ($res < 1) {
+ echo "StartElement context validation failed\n";
+ exit();
+}
+xmlwriter_end_document($xw);
+
+// Force to write and empty the buffer
+echo xmlwriter_flush($xw, true);
+?>
+===DONE===
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<tag1 attr1="attr1_value" att2="att2_value">Test text for tag1<tag2/></tag1>
+===DONE===
diff --git a/ext/xmlwriter/tests/004.phpt b/ext/xmlwriter/tests/004.phpt
new file mode 100644
index 0000000..2d3e858
--- /dev/null
+++ b/ext/xmlwriter/tests/004.phpt
@@ -0,0 +1,36 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, file buffer, flush
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+/* $Id$ */
+
+$doc_dest = '001.xml';
+$xw = xmlwriter_open_uri($doc_dest);
+xmlwriter_start_document($xw, '1.0', 'UTF-8');
+xmlwriter_start_element($xw, "tag1");
+
+xmlwriter_start_pi($xw, "PHP");
+xmlwriter_text($xw, 'echo $a;');
+xmlwriter_end_pi($xw);
+xmlwriter_end_document($xw);
+
+// Force to write and empty the buffer
+$output_bytes = xmlwriter_flush($xw, true);
+$md5_out = md5_file($doc_dest);
+$md5_res = md5('<?xml version="1.0" encoding="UTF-8"?>
+<tag1><?PHP echo $a;?></tag1>
+');
+unset($xw);
+unlink('001.xml');
+if ($md5_out != $md5_res) {
+ echo "failed: $md5_res != $md5_out\n";
+} else {
+ echo "ok.\n";
+}
+?>
+===DONE===
+--EXPECT--
+ok.
+===DONE===
diff --git a/ext/xmlwriter/tests/005.phpt b/ext/xmlwriter/tests/005.phpt
new file mode 100644
index 0000000..ab933c6
--- /dev/null
+++ b/ext/xmlwriter/tests/005.phpt
@@ -0,0 +1,33 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, comments
+--SKIPIF--
+<?php
+if (!extension_loaded("xmlwriter")) die("skip");
+if (!function_exists("xmlwriter_start_comment")) die("skip: libxml2 2.6.7+ required");
+?>
+--FILE--
+<?php
+/* $Id$ */
+
+$doc_dest = '001.xml';
+$xw = xmlwriter_open_uri($doc_dest);
+xmlwriter_start_document($xw, '1.0', 'UTF-8');
+xmlwriter_start_element($xw, "tag1");
+
+xmlwriter_start_comment($xw);
+xmlwriter_text($xw, 'comment');
+xmlwriter_end_comment($xw);
+xmlwriter_write_comment($xw, "comment #2");
+xmlwriter_end_document($xw);
+
+// Force to write and empty the buffer
+$output_bytes = xmlwriter_flush($xw, true);
+echo file_get_contents($doc_dest);
+unset($xw);
+unlink('001.xml');
+?>
+===DONE===
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<tag1><!--comment--><!--comment #2--></tag1>
+===DONE===
diff --git a/ext/xmlwriter/tests/006.phpt b/ext/xmlwriter/tests/006.phpt
new file mode 100644
index 0000000..48eb299
--- /dev/null
+++ b/ext/xmlwriter/tests/006.phpt
@@ -0,0 +1,26 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, startDTD/writeElementNS
+--SKIPIF--
+<?php
+if (!extension_loaded("xmlwriter")) die("skip");
+?>
+--FILE--
+<?php
+/* $Id$ */
+
+$doc_dest = '001.xml';
+$xw = xmlwriter_open_uri($doc_dest);
+xmlwriter_start_dtd($xw, 'foo', NULL, 'urn:bar');
+xmlwriter_end_dtd($xw);
+xmlwriter_start_element($xw, 'foo');
+xmlwriter_write_element_ns($xw, 'foo', 'bar', 'urn:foo', 'dummy content');
+xmlwriter_end_element($xw);
+
+// Force to write and empty the buffer
+$output_bytes = xmlwriter_flush($xw, true);
+echo file_get_contents($doc_dest);
+unset($xw);
+unlink('001.xml');
+?>
+--EXPECT--
+<!DOCTYPE foo SYSTEM "urn:bar"><foo><foo:bar xmlns:foo="urn:foo">dummy content</foo:bar></foo>
diff --git a/ext/xmlwriter/tests/007.phpt b/ext/xmlwriter/tests/007.phpt
new file mode 100644
index 0000000..47965c7
--- /dev/null
+++ b/ext/xmlwriter/tests/007.phpt
@@ -0,0 +1,38 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, Elements & Attributes
+--SKIPIF--
+<?php
+if (!extension_loaded("xmlwriter")) die("skip");
+if (LIBXML_VERSION < 20629) die("skip: libxml2 2.6.29+ required");
+?>
+--FILE--
+<?php
+/* $Id$ */
+
+$xw = xmlwriter_open_memory();
+xmlwriter_set_indent($xw, TRUE);
+xmlwriter_set_indent_string($xw, ' ');
+xmlwriter_start_document($xw, '1.0', "UTF-8");
+xmlwriter_start_element($xw, 'root');
+xmlwriter_start_element_ns($xw, 'ns1', 'child1', 'urn:ns1');
+xmlwriter_start_attribute_ns($xw, 'ns1', 'att1', 'urn:ns1');
+xmlwriter_text($xw, 'a&b');
+xmlwriter_end_attribute($xw);
+xmlwriter_write_attribute($xw, 'att2', "double\" single'");
+xmlwriter_start_attribute_ns($xw, 'ns1', 'att2', 'urn:ns1');
+xmlwriter_text($xw, "<>\"'&");
+xmlwriter_end_attribute($xw);
+xmlwriter_write_element($xw, 'chars', "special characters: <>\"'&");
+xmlwriter_end_element($xw);
+xmlwriter_end_document($xw);
+// Force to write and empty the buffer
+$output = xmlwriter_flush($xw, true);
+print $output;
+?>
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+ <ns1:child1 ns1:att1="a&amp;b" att2="double&quot; single'" ns1:att2="&lt;&gt;&quot;'&amp;" xmlns:ns1="urn:ns1">
+ <chars>special characters: &lt;&gt;&quot;'&amp;</chars>
+ </ns1:child1>
+</root>
diff --git a/ext/xmlwriter/tests/008.phpt b/ext/xmlwriter/tests/008.phpt
new file mode 100644
index 0000000..88768b1
--- /dev/null
+++ b/ext/xmlwriter/tests/008.phpt
@@ -0,0 +1,40 @@
+--TEST--
+XMLWriter: libxml2 XML Writer DTD Element & Attlist
+--SKIPIF--
+<?php
+if (!extension_loaded("xmlwriter")) die("skip");
+?>
+--FILE--
+<?php
+/* $Id$ */
+
+$xw = xmlwriter_open_memory();
+xmlwriter_set_indent($xw, TRUE);
+xmlwriter_start_document($xw, NULL, "UTF-8");
+xmlwriter_start_dtd_entity($xw, "ent", false);
+xmlwriter_text($xw, "val");
+xmlwriter_end_dtd_entity($xw);
+xmlwriter_write_dtd_entity($xw, "ent2", "val2");
+xmlwriter_write_dtd_element($xw, 'sxe', '(elem1+, elem11, elem22*)');
+xmlwriter_write_dtd_attlist($xw, 'sxe', 'id CDATA #implied');
+xmlwriter_start_dtd_element($xw, 'elem1');
+xmlwriter_text($xw, 'elem2*');
+xmlwriter_end_dtd_element($xw);
+xmlwriter_start_dtd_attlist($xw, 'elem1');
+xmlwriter_text($xw, "attr1 CDATA #required\n");
+xmlwriter_text($xw, 'attr2 CDATA #implied');
+xmlwriter_end_dtd_attlist($xw);
+xmlwriter_end_document($xw);
+// Force to write and empty the buffer
+$output = xmlwriter_flush($xw, true);
+print $output;
+?>
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<!ENTITY ent "val">
+<!ENTITY ent2 "val2">
+<!ELEMENT sxe (elem1+, elem11, elem22*)>
+<!ATTLIST sxe id CDATA #implied>
+<!ELEMENT elem1 elem2*>
+<!ATTLIST elem1 attr1 CDATA #required
+attr2 CDATA #implied>
diff --git a/ext/xmlwriter/tests/009.phpt b/ext/xmlwriter/tests/009.phpt
new file mode 100644
index 0000000..002916f
--- /dev/null
+++ b/ext/xmlwriter/tests/009.phpt
@@ -0,0 +1,45 @@
+--TEST--
+XMLWriter: PI, Comment, CDATA
+--SKIPIF--
+<?php
+if (!extension_loaded("xmlwriter")) die("skip");
+if (!function_exists("xmlwriter_start_comment")) die("skip: libxml2 2.6.7+ required");
+?>
+--FILE--
+<?php
+/* $Id$ */
+/*
+Libxml 2.6.24 and up adds a new line after a processing instruction (PI)
+*/
+$xw = xmlwriter_open_memory();
+xmlwriter_set_indent($xw, TRUE);
+xmlwriter_start_document($xw, NULL, "UTF-8");
+xmlwriter_start_element($xw, 'root');
+xmlwriter_write_attribute($xw, 'id', 'elem1');
+xmlwriter_start_element($xw, 'elem1');
+xmlwriter_write_attribute($xw, 'attr1', 'first');
+xmlwriter_write_comment($xw, 'start PI');
+xmlwriter_start_element($xw, 'pi');
+xmlwriter_write_pi($xw, 'php', 'echo "hello world"; ');
+xmlwriter_end_element($xw);
+xmlwriter_start_element($xw, 'cdata');
+xmlwriter_start_cdata($xw);
+xmlwriter_text($xw, '<>&"');
+xmlwriter_end_cdata($xw);
+xmlwriter_end_element($xw);
+xmlwriter_end_element($xw);
+xmlwriter_end_element($xw);
+xmlwriter_end_document($xw);
+// Force to write and empty the buffer
+$output = xmlwriter_flush($xw, true);
+print $output;
+?>
+--EXPECTF--
+<?xml version="1.0" encoding="UTF-8"?>
+<root id="elem1">
+ <elem1 attr1="first">
+ <!--start PI-->
+ <pi><?php echo "hello world"; ?>%w</pi>
+ <cdata><![CDATA[<>&"]]></cdata>
+ </elem1>
+</root>
diff --git a/ext/xmlwriter/tests/010.phpt b/ext/xmlwriter/tests/010.phpt
new file mode 100644
index 0000000..9f066a7
--- /dev/null
+++ b/ext/xmlwriter/tests/010.phpt
@@ -0,0 +1,45 @@
+--TEST--
+xmlwriter_start/end_attribute()
+--SKIPIF--
+<?php
+if (!extension_loaded("xmlwriter")) die("skip");
+?>
+--FILE--
+<?php
+
+$file = dirname(__FILE__).'/010.tmp';
+
+$xw = xmlwriter_open_uri($file);
+
+var_dump(xmlwriter_start_element($xw, "tag"));
+var_dump(xmlwriter_start_attribute($xw, "attr"));
+var_dump(xmlwriter_end_attribute($xw));
+var_dump(xmlwriter_start_attribute($xw, "-1"));
+var_dump(xmlwriter_end_attribute($xw));
+var_dump(xmlwriter_start_attribute($xw, "\""));
+var_dump(xmlwriter_end_attribute($xw));
+var_dump(xmlwriter_end_element($xw));
+
+unset($xw);
+
+var_dump(file_get_contents($file));
+
+@unlink($file);
+
+echo "Done\n";
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+bool(true)
+
+Warning: xmlwriter_start_attribute(): Invalid Attribute Name in %s on line %d
+bool(false)
+bool(false)
+
+Warning: xmlwriter_start_attribute(): Invalid Attribute Name in %s on line %d
+bool(false)
+bool(false)
+bool(true)
+string(14) "<tag attr=""/>"
+Done
diff --git a/ext/xmlwriter/tests/OO_001.phpt b/ext/xmlwriter/tests/OO_001.phpt
new file mode 100644
index 0000000..be448b9
--- /dev/null
+++ b/ext/xmlwriter/tests/OO_001.phpt
@@ -0,0 +1,26 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, file buffer, flush
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+/* $Id$ */
+
+$doc_dest = '001.xml';
+$xw = new XMLWriter();
+$xw->openUri($doc_dest);
+$xw->startDocument('1.0', 'UTF-8', 'standalonearg');
+$xw->startElement("tag1");
+$xw->endDocument();
+
+// Force to write and empty the buffer
+$output_bytes = $xw->flush(true);
+echo file_get_contents($doc_dest);
+unset($xw);
+unlink('001.xml');
+?>
+===DONE===
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8" standalone="standalonearg"?>
+<tag1/>
+===DONE===
diff --git a/ext/xmlwriter/tests/OO_002.phpt b/ext/xmlwriter/tests/OO_002.phpt
new file mode 100644
index 0000000..ec605f5
--- /dev/null
+++ b/ext/xmlwriter/tests/OO_002.phpt
@@ -0,0 +1,22 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, membuffer, flush
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+/* $Id$ */
+
+$xw = new XMLWriter();
+$xw->openMemory();
+$xw->startDocument('1.0', 'UTF-8', 'standalone');
+$xw->startElement("tag1");
+$xw->endDocument();
+
+// Force to write and empty the buffer
+echo $xw->flush(true);
+?>
+===DONE===
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8" standalone="standalone"?>
+<tag1/>
+===DONE===
diff --git a/ext/xmlwriter/tests/OO_003.phpt b/ext/xmlwriter/tests/OO_003.phpt
new file mode 100644
index 0000000..7fb4791
--- /dev/null
+++ b/ext/xmlwriter/tests/OO_003.phpt
@@ -0,0 +1,37 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, membuffer, flush, text, attribute
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+/* $Id$ */
+
+$xw = new XMLWriter();
+$xw->openMemory();
+$xw->startDocument('1.0', 'UTF-8');
+$xw->startElement("tag1");
+
+$res = $xw->startAttribute('attr1');
+$xw->text("attr1_value");
+$xw->endAttribute();
+
+$res = $xw->startAttribute('attr2');
+$xw->text("attr2_value");
+$xw->endAttribute();
+
+$xw->text("Test text for tag1");
+$res = $xw->startElement('tag2');
+if ($res < 1) {
+ echo "StartElement context validation failed\n";
+ exit();
+}
+$xw->endDocument();
+
+// Force to write and empty the buffer
+echo $xw->flush(true);
+?>
+===DONE===
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<tag1 attr1="attr1_value" attr2="attr2_value">Test text for tag1<tag2/></tag1>
+===DONE===
diff --git a/ext/xmlwriter/tests/OO_004.phpt b/ext/xmlwriter/tests/OO_004.phpt
new file mode 100644
index 0000000..08b423c
--- /dev/null
+++ b/ext/xmlwriter/tests/OO_004.phpt
@@ -0,0 +1,37 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, file buffer, flush
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+/* $Id$ */
+
+$doc_dest = '001.xml';
+$xw = new XMLWriter();
+$xw->openUri($doc_dest);
+$xw->startDocument('1.0', 'UTF-8');
+$xw->startElement("tag1");
+
+$xw->startPi("PHP");
+$xw->text('echo $a;');
+$xw->endPi();
+$xw->endDocument();
+
+// Force to write and empty the buffer
+$xw->flush(true);
+$md5_out = md5_file($doc_dest);
+$md5_res = md5('<?xml version="1.0" encoding="UTF-8"?>
+<tag1><?PHP echo $a;?></tag1>
+');
+unset($xw);
+unlink('001.xml');
+if ($md5_out != $md5_res) {
+ echo "failed: $md5_res != $md5_out\n";
+} else {
+ echo "ok.\n";
+}
+?>
+===DONE===
+--EXPECT--
+ok.
+===DONE===
diff --git a/ext/xmlwriter/tests/OO_005.phpt b/ext/xmlwriter/tests/OO_005.phpt
new file mode 100644
index 0000000..2c6d2f4
--- /dev/null
+++ b/ext/xmlwriter/tests/OO_005.phpt
@@ -0,0 +1,33 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, comments
+--SKIPIF--
+<?php
+if (!extension_loaded("xmlwriter")) die("skip");
+if (!function_exists("xmlwriter_start_comment")) die("skip: libxml2 2.6.7+ required");
+?>
+--FILE--
+<?php
+/* $Id$ */
+
+$doc_dest = '001.xml';
+$xw = new XMLWriter();
+$xw->openUri($doc_dest);
+$xw->startDocument('1.0', 'UTF-8');
+$xw->startElement("tag1");
+$xw->startComment();
+$xw->text('comment');
+$xw->endComment();
+$xw->writeComment("comment #2");
+$xw->endDocument();
+
+// Force to write and empty the buffer
+$output_bytes = $xw->flush(true);
+echo file_get_contents($doc_dest);
+unset($xw);
+unlink('001.xml');
+?>
+===DONE===
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<tag1><!--comment--><!--comment #2--></tag1>
+===DONE===
diff --git a/ext/xmlwriter/tests/OO_006.phpt b/ext/xmlwriter/tests/OO_006.phpt
new file mode 100644
index 0000000..465a725
--- /dev/null
+++ b/ext/xmlwriter/tests/OO_006.phpt
@@ -0,0 +1,27 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, startDTD/writeElementNS
+--SKIPIF--
+<?php
+if (!extension_loaded("xmlwriter")) die("skip");
+?>
+--FILE--
+<?php
+/* $Id$ */
+
+$doc_dest = '001.xml';
+$xw = new XMLWriter();
+$xw->openUri($doc_dest);
+$xw->startDtd('foo', NULL, 'urn:bar');
+$xw->endDtd();
+$xw->startElement('foo');
+$xw->writeElementNS('foo', 'bar', 'urn:foo', 'dummy content');
+$xw->endElement();
+
+// Force to write and empty the buffer
+$output_bytes = $xw->flush(true);
+echo file_get_contents($doc_dest);
+unset($xw);
+unlink('001.xml');
+?>
+--EXPECT--
+<!DOCTYPE foo SYSTEM "urn:bar"><foo><foo:bar xmlns:foo="urn:foo">dummy content</foo:bar></foo>
diff --git a/ext/xmlwriter/tests/OO_007.phpt b/ext/xmlwriter/tests/OO_007.phpt
new file mode 100644
index 0000000..257a5cd
--- /dev/null
+++ b/ext/xmlwriter/tests/OO_007.phpt
@@ -0,0 +1,39 @@
+--TEST--
+XMLWriter: libxml2 XML Writer, Elements & Attributes
+--SKIPIF--
+<?php
+if (!extension_loaded("xmlwriter")) die("skip");
+if (LIBXML_VERSION < 20629) die("skip: libxml2 2.6.29+ required");
+?>
+--FILE--
+<?php
+/* $Id$ */
+
+$xw = new XMLWriter();
+$xw->openMemory();
+$xw->setIndent(TRUE);
+$xw->setIndentString(' ');
+$xw->startDocument('1.0', "UTF-8");
+$xw->startElement('root');
+$xw->startElementNS('ns1', 'child1', 'urn:ns1');
+$xw->startAttributeNS('ns1', 'att1', 'urn:ns1');
+$xw->text('a&b');
+$xw->endAttribute();
+$xw->writeAttribute('att2', "double\" single'");
+$xw->startAttributeNS('ns1', 'att2', 'urn:ns1');
+$xw->text("<>\"'&");
+$xw->endAttribute();
+$xw->writeElement('chars', "special characters: <>\"'&");
+$xw->endElement();
+$xw->endDocument();
+// Force to write and empty the buffer
+$output = $xw->flush(true);
+print $output;
+?>
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+ <ns1:child1 ns1:att1="a&amp;b" att2="double&quot; single'" ns1:att2="&lt;&gt;&quot;'&amp;" xmlns:ns1="urn:ns1">
+ <chars>special characters: &lt;&gt;&quot;'&amp;</chars>
+ </ns1:child1>
+</root>
diff --git a/ext/xmlwriter/tests/OO_008.phpt b/ext/xmlwriter/tests/OO_008.phpt
new file mode 100644
index 0000000..fe127ce
--- /dev/null
+++ b/ext/xmlwriter/tests/OO_008.phpt
@@ -0,0 +1,35 @@
+--TEST--
+XMLWriter: libxml2 XML Writer DTD Element & Attlist
+--SKIPIF--
+<?php
+if (!extension_loaded("xmlwriter")) die("skip");
+?>
+--FILE--
+<?php
+/* $Id$ */
+
+$xw = new XMLWriter();
+$xw->openMemory();
+$xw->setIndent(TRUE);
+$xw->startDocument(NULL, "UTF-8");
+$xw->writeDtdElement('sxe', '(elem1+, elem11, elem22*)');
+$xw->writeDtdAttlist('sxe', 'id CDATA #implied');
+$xw->startDtdElement('elem1');
+$xw->text('elem2*');
+$xw->endDtdElement();
+$xw->startDtdAttlist('elem1');
+$xw->text("attr1 CDATA #required\n");
+$xw->text('attr2 CDATA #implied');
+$xw->endDtdAttlist();
+$xw->endDocument();
+// Force to write and empty the buffer
+$output = $xw->flush(true);
+print $output;
+?>
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<!ELEMENT sxe (elem1+, elem11, elem22*)>
+<!ATTLIST sxe id CDATA #implied>
+<!ELEMENT elem1 elem2*>
+<!ATTLIST elem1 attr1 CDATA #required
+attr2 CDATA #implied>
diff --git a/ext/xmlwriter/tests/OO_009.phpt b/ext/xmlwriter/tests/OO_009.phpt
new file mode 100644
index 0000000..c874f3e
--- /dev/null
+++ b/ext/xmlwriter/tests/OO_009.phpt
@@ -0,0 +1,45 @@
+--TEST--
+XMLWriter: PI, Comment, CDATA
+--SKIPIF--
+<?php
+if (!extension_loaded("xmlwriter")) die("skip");
+?>
+--FILE--
+<?php
+/* $Id$ */
+/*
+Libxml 2.6.24 and up adds a new line after a processing instruction (PI)
+*/
+$xw = new XMLWriter();
+$xw->openMemory();
+$xw->setIndent(TRUE);
+$xw->startDocument("1.0", "UTF-8");
+$xw->startElement('root');
+$xw->writeAttribute('id', 'elem1');
+$xw->startElement('elem1');
+$xw->writeAttribute('attr1', 'first');
+$xw->writeComment('start PI');
+$xw->startElement('pi');
+$xw->writePi('php', 'echo "hello world"; ');
+$xw->endElement();
+$xw->startElement('cdata');
+$xw->startCdata();
+$xw->text('<>&"');
+$xw->endCdata();
+$xw->endElement();
+$xw->endElement();
+$xw->endElement();
+$xw->endDocument();
+// Force to write and empty the buffer
+$output = $xw->flush(true);
+print $output;
+?>
+--EXPECTF--
+<?xml version="1.0" encoding="UTF-8"?>
+<root id="elem1">
+ <elem1 attr1="first">
+ <!--start PI-->
+ <pi><?php echo "hello world"; ?>%w</pi>
+ <cdata><![CDATA[<>&"]]></cdata>
+ </elem1>
+</root>
diff --git a/ext/xmlwriter/tests/bug39504.phpt b/ext/xmlwriter/tests/bug39504.phpt
new file mode 100644
index 0000000..af97f81
--- /dev/null
+++ b/ext/xmlwriter/tests/bug39504.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Bug #39504 (xmlwriter_write_dtd_entity() creates Attlist tag, not enity)
+--SKIPIF--
+<?php
+if (!extension_loaded("xmlwriter")) die("skip");
+?>
+--FILE--
+<?php
+
+$xw = xmlwriter_open_memory();
+xmlwriter_start_document($xw, NULL, "UTF-8");
+xmlwriter_start_dtd($xw, "root");
+xmlwriter_write_dtd_entity($xw, "ent2", "val2");
+xmlwriter_end_dtd($xw);
+xmlwriter_start_element($xw, "root");
+xmlwriter_end_document($xw);
+print xmlwriter_flush($xw, true);
+print "\n";
+
+$xw = new XMLWriter();
+$xw->openMemory();
+$xw->startDocument(NULL, "UTF-8");
+$xw->startDtd("root");
+$xw->writeDtdEntity("c", NULL, 0, "-//W3C//TEXT copyright//EN", "http://www.w3.org/xmlspec/copyright.xml");
+$xw->endDtd();
+$xw->startElement("root");
+$xw->endDocument();
+print $xw->flush(true);
+
+?>
+--EXPECTF--
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE root [<!ENTITY ent2 "val2">]><root/>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE root [<!ENTITY c PUBLIC "-//W3C//TEXT copyright//EN" "http://www.w3.org/xmlspec/copyright.xml">]><root/>
diff --git a/ext/xmlwriter/tests/bug41287.phpt b/ext/xmlwriter/tests/bug41287.phpt
new file mode 100644
index 0000000..0612b21
--- /dev/null
+++ b/ext/xmlwriter/tests/bug41287.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Bug #41287 (Namespace functions don't allow xmlns defintion to be optional)
+--SKIPIF--
+<?php
+if (!extension_loaded("xmlwriter")) die("skip");
+?>
+--FILE--
+<?php
+
+$xw = xmlwriter_open_memory();
+xmlwriter_set_indent($xw, true);
+xmlwriter_start_document($xw);
+xmlwriter_start_element_ns($xw, 'test', 'test', 'urn:x-test:');
+xmlwriter_write_element_ns($xw, 'test', 'foo', null, '');
+xmlwriter_write_element_ns($xw, null, 'bar', 'urn:x-test:', '');
+xmlwriter_write_element_ns($xw, null, 'bar', '', '');
+xmlwriter_end_element($xw);
+xmlwriter_end_document($xw);
+print xmlwriter_flush($xw, true);
+print "\n";
+
+$xw = new XMLWriter();
+$xw->openMemory();
+$xw->setIndent(true);
+$xw->startDocument();
+$xw->startElementNS('test', 'test', 'urn:x-test:');
+$xw->writeElementNS('test', 'foo', null, '');
+$xw->writeElementNS(null, 'bar', 'urn:x-test:', '');
+$xw->writeElementNS(null, 'bar', '', '');
+$xw->endElement();
+$xw->endDocument();
+print $xw->flush(true);
+?>
+--EXPECTF--
+<?xml version="1.0"?>
+<test:test xmlns:test="urn:x-test:">
+ <test:foo></test:foo>
+ <bar xmlns="urn:x-test:"></bar>
+ <bar xmlns=""></bar>
+</test:test>
+
+<?xml version="1.0"?>
+<test:test xmlns:test="urn:x-test:">
+ <test:foo></test:foo>
+ <bar xmlns="urn:x-test:"></bar>
+ <bar xmlns=""></bar>
+</test:test>
diff --git a/ext/xmlwriter/tests/bug41326.phpt b/ext/xmlwriter/tests/bug41326.phpt
new file mode 100644
index 0000000..c69cab1
--- /dev/null
+++ b/ext/xmlwriter/tests/bug41326.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Bug #41287 (Writing empty tags with Xmlwriter::WriteElement[ns])
+--SKIPIF--
+<?php
+if (!extension_loaded("xmlwriter")) die("skip");
+?>
+--FILE--
+<?php
+$xml = new XmlWriter();
+$xml->openMemory();
+$xml->setIndent(true);
+$xml->startDocument();
+$xml->startElement('test');
+$xml->writeElement('foo', null);
+$xml->writeElement('foo2', "");
+$xml->writeElement('foo3');
+$xml->startElement('bar');
+$xml->endElement('bar');
+$xml->endElement();
+$xml->endElement();
+print $xml->flush(true);
+
+print "\n";
+
+$xw = new XMLWriter();
+$xw->openMemory();
+$xw->setIndent(true);
+$xw->startDocument();
+$xw->startElementNS('test', 'test', 'urn:x-test:');
+$xw->writeElementNS('test', 'foo', null, '');
+$xw->writeElementNS(null, 'bar', 'urn:x-test:', '');
+$xw->writeElementNS(null, 'bar', 'urn:x-test:', NULL);
+$xw->writeElementNS(null, 'bar', 'urn:x-test:');
+$xw->writeElementNS(null, 'bar', '', '');
+$xw->endElement();
+$xw->endDocument();
+print $xw->flush(true);
+?>
+--EXPECTF--
+Warning: XMLWriter::endElement() expects exactly 0 parameters, 1 given in %s on line %d
+<?xml version="1.0"?>
+<test>
+ <foo/>
+ <foo2></foo2>
+ <foo3/>
+ <bar/>
+</test>
+
+<?xml version="1.0"?>
+<test:test xmlns:test="urn:x-test:">
+ <test:foo></test:foo>
+ <bar xmlns="urn:x-test:"></bar>
+ <bar xmlns="urn:x-test:"/>
+ <bar xmlns="urn:x-test:"/>
+ <bar xmlns=""></bar>
+</test:test>
diff --git a/ext/xmlwriter/tests/bug48204.phpt b/ext/xmlwriter/tests/bug48204.phpt
new file mode 100644
index 0000000..638512b
--- /dev/null
+++ b/ext/xmlwriter/tests/bug48204.phpt
@@ -0,0 +1,17 @@
+--TEST--
+xmlwriter_open_uri with PHP_MAXPATHLEN + 1
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+$path = str_repeat('a', PHP_MAXPATHLEN + 1);
+var_dump(xmlwriter_open_uri('file:///' . $path));
+?>
+--CREDITS--
+Koen Kuipers koenk82@gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri(): Unable to resolve file path in %s on line %d
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_open_uri_error_001.phpt b/ext/xmlwriter/tests/xmlwriter_open_uri_error_001.phpt
new file mode 100644
index 0000000..fb7602b
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_open_uri_error_001.phpt
@@ -0,0 +1,16 @@
+--TEST--
+xmlwriter_open_uri with empty string as parameter
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(xmlwriter_open_uri(''));
+?>
+--CREDITS--
+Koen Kuipers koenk82@gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri(): Empty string as source in %s on line %d
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_open_uri_error_002.phpt b/ext/xmlwriter/tests/xmlwriter_open_uri_error_002.phpt
new file mode 100644
index 0000000..9cd33f7
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_open_uri_error_002.phpt
@@ -0,0 +1,16 @@
+--TEST--
+xmlwriter_open_uri without parameter
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(xmlwriter_open_uri());
+?>
+--CREDITS--
+Koen Kuipers koenk82@gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri() expects exactly %d parameter, %d given in %s on line %d
+NULL
diff --git a/ext/xmlwriter/tests/xmlwriter_open_uri_error_003.phpt b/ext/xmlwriter/tests/xmlwriter_open_uri_error_003.phpt
new file mode 100644
index 0000000..0e56d89
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_open_uri_error_003.phpt
@@ -0,0 +1,16 @@
+--TEST--
+xmlwriter_open_uri with non existing file
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(xmlwriter_open_uri('foo/bar.tmp'));
+?>
+--CREDITS--
+Koen Kuipers koenk82@gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri(): Unable to resolve file path in %s on line %d
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_open_uri_error_004.phpt b/ext/xmlwriter/tests/xmlwriter_open_uri_error_004.phpt
new file mode 100644
index 0000000..6970c0e
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_open_uri_error_004.phpt
@@ -0,0 +1,16 @@
+--TEST--
+xmlwriter_open_uri with file:///
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(xmlwriter_open_uri('file:///'));
+?>
+--CREDITS--
+Koen Kuipers koenk82@gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri(): Unable to resolve file path in %s on line %d
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_open_uri_error_005.phpt b/ext/xmlwriter/tests/xmlwriter_open_uri_error_005.phpt
new file mode 100644
index 0000000..9d08716
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_open_uri_error_005.phpt
@@ -0,0 +1,16 @@
+--TEST--
+xmlwriter_open_uri with file://localhost/
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(xmlwriter_open_uri('file://localhost/'));
+?>
+--CREDITS--
+Koen Kuipers koenk82@gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri(): Unable to resolve file path in %s on line %d
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_set_indent_string_basic_001.phpt b/ext/xmlwriter/tests/xmlwriter_set_indent_string_basic_001.phpt
new file mode 100644
index 0000000..8c3e7d9
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_set_indent_string_basic_001.phpt
@@ -0,0 +1,24 @@
+--TEST--
+xmlwriter_set_indent_string passing xmlwriter resource
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+$temp_filename = dirname(__FILE__)."/xmlwriter_set_indent_string.tmp";
+ $fp = fopen($temp_filename, "w");
+ fwrite ($fp, "Hi");
+ fclose($fp);
+$resource = xmlwriter_open_uri($temp_filename);
+var_dump(xmlwriter_set_indent_string($resource, ' '));
+?>
+--CLEAN--
+<?php
+$temp_filename = dirname(__FILE__)."/xmlwriter_set_indent_string.tmp";
+unlink($temp_filename);
+?>
+--CREDITS--
+Koen Kuipers koenk82@gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECT--
+bool(true)
diff --git a/ext/xmlwriter/tests/xmlwriter_set_indent_string_error_001.phpt b/ext/xmlwriter/tests/xmlwriter_set_indent_string_error_001.phpt
new file mode 100644
index 0000000..5bb9ef8
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_set_indent_string_error_001.phpt
@@ -0,0 +1,24 @@
+--TEST--
+xmlwriter_set_indent_string with missing param(s)
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+$temp_filename = dirname(__FILE__)."/xmlwriter_set_indent_string_error.tmp";
+ $fp = fopen($temp_filename, "w");
+ fwrite ($fp, "Hi");
+ fclose($fp);
+$resource = xmlwriter_open_uri($temp_filename);
+var_dump(xmlwriter_set_indent_string($resource));
+?>
+--CLEAN--
+<?php
+$temp_filename = dirname(__FILE__)."/xmlwriter_set_indent_string_error.tmp";
+unlink($temp_filename);
+?>
+--CREDITS--
+Koen Kuipers koenk82@gmail.com
+--EXPECTF--
+
+Warning: xmlwriter_set_indent_string() expects exactly %d parameters, %d given in %s on line %d
+NULL
diff --git a/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_basic_001.phpt b/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_basic_001.phpt
new file mode 100644
index 0000000..f248049
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_basic_001.phpt
@@ -0,0 +1,28 @@
+--TEST--
+xmlwriter_write_attribute_ns basic function tests
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+$xw = xmlwriter_open_memory();
+xmlwriter_set_indent($xw, TRUE);
+xmlwriter_start_document($xw, NULL, "UTF-8");
+xmlwriter_start_element($xw, 'root');
+xmlwriter_write_attribute_ns($xw, 'prefix', 'id', 'http://www.php.net/uri', 'elem1');
+xmlwriter_start_element($xw, 'elem1');
+xmlwriter_write_attribute($xw, 'attr1', 'first');
+xmlwriter_end_element($xw);
+xmlwriter_full_end_element($xw);
+xmlwriter_end_document($xw);
+
+$output = xmlwriter_flush($xw, true);
+print $output;
+?>
+--CREDITS--
+Koen Kuipers koenk82@gmail.com
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<root prefix:id="elem1" xmlns:prefix="http://www.php.net/uri">
+ <elem1 attr1="first"/>
+</root>
+
diff --git a/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_error_001.phpt b/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_error_001.phpt
new file mode 100644
index 0000000..7f1cd0c
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_error_001.phpt
@@ -0,0 +1,34 @@
+--TEST--
+xmlwriter_write_attribute_ns with missing param
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+$xw = xmlwriter_open_memory();
+xmlwriter_set_indent($xw, TRUE);
+xmlwriter_start_document($xw, NULL, "UTF-8");
+xmlwriter_start_element($xw, 'root');
+xmlwriter_write_attribute_ns($xw, 'prefix', '', 'http://www.php.net/uri');
+xmlwriter_start_element($xw, 'elem1');
+xmlwriter_write_attribute($xw, 'attr1', 'first');
+xmlwriter_end_element($xw);
+xmlwriter_full_end_element($xw);
+xmlwriter_end_document($xw);
+
+$output = xmlwriter_flush($xw, true);
+print $output;
+
+// write attribute_ns without start_element first
+$xw = xmlwriter_open_memory();
+var_dump(xmlwriter_write_attribute_ns($xw, 'prefix', 'id', 'http://www.php.net/uri', 'elem1'));
+print xmlwriter_output_memory($xw);
+?>
+--CREDITS--
+Koen Kuipers koenk82@gmail.com
+--EXPECTF--
+
+Warning: xmlwriter_write_attribute_ns() expects exactly %d parameters, %d given in %s on line %d
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+ <elem1 attr1="first"/>
+</root>%wbool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_write_dtd_basic_001.phpt b/ext/xmlwriter/tests/xmlwriter_write_dtd_basic_001.phpt
new file mode 100644
index 0000000..af3dce6
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_write_dtd_basic_001.phpt
@@ -0,0 +1,22 @@
+--TEST--
+xmlwriter_write_dtd basic function tests
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+
+$xmlwriter = xmlwriter_open_memory();
+var_dump(xmlwriter_write_dtd($xmlwriter, 'bla1', 'bla2', 'bla3', 'bla4'));
+$output = xmlwriter_flush($xmlwriter, true);
+print $output . PHP_EOL;
+
+var_dump(xmlwriter_write_dtd($xmlwriter, '', '', ''));
+$output = xmlwriter_flush($xmlwriter, true);
+print $output;
+?>
+--CREDITS--
+Koen Kuipers koenk82@gmail.com
+--EXPECT--
+bool(true)
+<!DOCTYPE bla1 PUBLIC "bla2" "bla3" [bla4]>
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_write_dtd_error_001.phpt b/ext/xmlwriter/tests/xmlwriter_write_dtd_error_001.phpt
new file mode 100644
index 0000000..69a6a7f
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_write_dtd_error_001.phpt
@@ -0,0 +1,15 @@
+--TEST--
+xmlwriter_write_dtd with missing param(s)
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+$xmlwriter = xmlwriter_open_memory();
+var_dump(xmlwriter_write_dtd($xmlwriter));
+?>
+--CREDITS--
+Koen Kuipers koenk82@gmail.com
+--EXPECTF--
+
+Warning: xmlwriter_write_dtd() expects at least %d parameters, %d given in %s on line %d
+NULL