--TEST--
Bug #28721 (appendChild() and insertBefore() unset DOMText)
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
function print_node(DomNode $node) {
echo "name (value): " . $node->nodeName . " (" . $node->nodeValue . ")\n";
}
function print_node_r(DomNode $node) {
static $indent = "";
echo "\n" . $indent;
print_node($node);
echo $indent . "parent: ";
if ( $node->parentNode )
print_node($node->parentNode);
else
echo "NULL\n";
echo $indent . "previousSibling: ";
if ( $node->previousSibling )
print_node($node->previousSibling);
else
echo "NULL\n";
echo $indent . "nextSibling: ";
if ( $node->nextSibling )
print_node($node->nextSibling);
else
echo "NULL\n";
if ( !$node->hasChildNodes() )
return;
foreach ($node->childNodes as $child) {
$old_indent = $indent;
$indent .= " ";
print_node_r($child);
$indent = $old_indent;
}
}
function err_handler($errno, $errstr, $errfile, $errline) {
echo "Error ($errno) on line $errline: $errstr\n";
}
// Record 'DocumentFragment is empty' warnings
set_error_handler("err_handler", E_WARNING);
$xml = new DomDocument();
$p = $xml->createElement("p");
$p->appendChild($t1 = $xml->createTextNode(" t1 "));
$p->appendChild($b = $xml->createElement("b"));
$b->appendChild($xml->createTextNode("X"));
$p->appendChild($t2 = $xml->createTextNode(" t2 "));
$p->appendChild($xml->createTextNode(" xxx "));
print_node_r($p);
echo "\nAppend t1 to p:\n";
$ret = $p->appendChild($t1);
print_node_r($p);
echo "\n";
echo "t1 == ret: ";
var_dump( $t1 === $ret );
$d = $xml->createElement("div");
$d->appendChild($t3 = $xml->createTextNode(" t3 "));
$d->appendChild($b = $xml->createElement("b"));
$b->appendChild($xml->createElement("X"));
$d->appendChild($t4 = $xml->createTextNode(" t4 "));
$d->appendChild($xml->createTextNode(" xxx "));
echo "\ndiv:\n";
print_node_r($d);
echo "\nInsert t4 before t3:\n";
$ret = $d->insertBefore($t4, $t3);
print_node_r($d);
echo "\n";
$frag = $xml->createDocumentFragment();
$t5 = $frag->appendChild($xml->createTextNode(" t5 "));
$frag->appendChild($i = $xml->createElement("i"));
$i->appendChild($xml->createTextNode(" frob "));
$frag->appendChild($xml->createTextNOde(" t6 "));
echo "\np:\n";
print_node_r($p);
echo "\nFragment:\n";
print_node_r($frag);
echo "\nAppending fragment to p:\n";
$p->appendChild($frag);
print_node_r($p);
echo "\nFragment:\n";
print_node_r($frag);
echo "\ndiv:\n";
print_node_r($d);
echo "\nInserting fragment before t4\n";
$d->insertBefore($frag, $t4);
print_node_r($d);
echo "\np:\n";
print_node_r($p);
?>
--EXPECT--
name (value): p ( t1 X t2 xxx )
parent: NULL
previousSibling: NULL
nextSibling: NULL
name (value): #text ( t1 )
parent: name (value): p ( t1 X t2 xxx )
previousSibling: NULL
nextSibling: name (value): b (X)
name (value): b (X)
parent: name (value): p ( t1 X t2 xxx )
previousSibling: name (value): #text ( t1 )
nextSibling: name (value): #text ( t2 )
name (value): #text (X)
parent: name (value): b (X)
previousSibling: NULL
nextSibling: NULL
name (value): #text ( t2 )
parent: name (value): p ( t1 X t2 xxx )
previousSibling: name (value): b (X)
nextSibling: name (value): #text ( xxx )
name (value): #text ( xxx )
parent: name (value): p ( t1 X t2 xxx )
previousSibling: name (value): #text ( t2 )
nextSibling: NULL
Append t1 to p:
name (value): p (X t2 xxx t1 )
parent: NULL
previousSibling: NULL
nextSibling: NULL
name (value): b (X)
parent: name (value): p (X t2 xxx t1 )
previousSibling: NULL
nextSibling: name (value): #text ( t2 )
name (value): #text (X)
parent: name (value): b (X)
previousSibling: NULL
nextSibling: NULL
name (value): #text ( t2 )
parent: name (value): p (X t2 xxx t1 )
previousSibling: name (value): b (X)
nextSibling: name (value): #text ( xxx )
name (value): #text ( xxx )
parent: name (value): p (X t2 xxx t1 )
previousSibling: name (value): #text ( t2 )
nextSibling: name (value): #text ( t1 )
name (value): #text ( t1 )
parent: name (value): p (X t2 xxx t1 )
previousSibling: name (value): #text ( xxx )
nextSibling: NULL
t1 == ret: bool(true)
div:
name (value): div ( t3 t4 xxx )
parent: NULL
previousSibling: NULL
nextSibling: NULL
name (value): #text ( t3 )
parent: name (value): div ( t3 t4 xxx )
previousSibling: NULL
nextSibling: name (value): b ()
name (value): b ()
parent: name (value): div ( t3 t4 xxx )
previousSibling: name (value): #text ( t3 )
nextSibling: name (value): #text ( t4 )
name (value): X ()
parent: name (value): b ()
previousSibling: NULL
nextSibling: NULL
name (value): #text ( t4 )
parent: name (value): div ( t3 t4 xxx )
previousSibling: name (value): b ()
nextSibling: name (value): #text ( xxx )
name (value): #text ( xxx )
parent: name (value): div ( t3 t4 xxx )
previousSibling: name (value): #text ( t4 )
nextSibling: NULL
Insert t4 before t3:
name (value): div ( t4 t3 xxx )
parent: NULL
previousSibling: NULL
nextSibling: NULL
name (value): #text ( t4 )
parent: name (value): div ( t4 t3 xxx )
previousSibling: NULL
nextSibling: name (value): #text ( t3 )
name (value): #text ( t3 )
parent: name (value): div ( t4 t3 xxx )
previousSibling: name (value): #text ( t4 )
nextSibling: name (value): b ()
name (value): b ()
parent: name (value): div ( t4 t3 xxx )
previousSibling: name (value): #text ( t3 )
nextSibling: name (value): #text ( xxx )
name (value): X ()
parent: name (value): b ()
previousSibling: NULL
nextSibling: NULL
name (value): #text ( xxx )
parent: name (value): div ( t4 t3 xxx )
previousSibling: name (value): b ()
nextSibling: NULL
p:
name (value): p (X t2 xxx t1 )
parent: NULL
previousSibling: NULL
nextSibling: NULL
name (value): b (X)
parent: name (value): p (X t2 xxx t1 )
previousSibling: NULL
nextSibling: name (value): #text ( t2 )
name (value): #text (X)
parent: name (value): b (X)
previousSibling: NULL
nextSibling: NULL
name (value): #text ( t2 )
parent: name (value): p (X t2 xxx t1 )
previousSibling: name (value): b (X)
nextSibling: name (value): #text ( xxx )
name (value): #text ( xxx )
parent: name (value): p (X t2 xxx t1 )
previousSibling: name (value): #text ( t2 )
nextSibling: name (value): #text ( t1 )
name (value): #text ( t1 )
parent: name (value): p (X t2 xxx t1 )
previousSibling: name (value): #text ( xxx )
nextSibling: NULL
Fragment:
name (value): #document-fragment ()
parent: NULL
previousSibling: NULL
nextSibling: NULL
name (value): #text ( t5 )
parent: name (value): #document-fragment ()
previousSibling: NULL
nextSibling: name (value): i ( frob )
name (value): i ( frob )
parent: name (value): #document-fragment ()
previousSibling: name (value): #text ( t5 )
nextSibling: name (value): #text ( t6 )
name (value): #text ( frob )
parent: name (value): i ( frob )
previousSibling: NULL
nextSibling: NULL
name (value): #text ( t6 )
parent: name (value): #document-fragment ()
previousSibling: name (value): i ( frob )
nextSibling: NULL
Appending fragment to p:
name (value): p (X t2 xxx t1 t5 frob t6 )
parent: NULL
previousSibling: NULL
nextSibling: NULL
name (value): b (X)
parent: name (value): p (X t2 xxx t1 t5 frob t6 )
previousSibling: NULL
nextSibling: name (value): #text ( t2 )
name (value): #text (X)
parent: name (value): b (X)
previousSibling: NULL
nextSibling: NULL
name (value): #text ( t2 )
parent: name (value): p (X t2 xxx t1 t5 frob t6 )
previousSibling: name (value): b (X)
nextSibling: name (value): #text ( xxx )
name (value): #text ( xxx )
parent: name (value): p (X t2 xxx t1 t5 frob t6 )
previousSibling: name (value): #text ( t2 )
nextSibling: name (value): #text ( t1 )
name (value): #text ( t1 )
parent: name (value): p (X t2 xxx t1 t5 frob t6 )
previousSibling: name (value): #text ( xxx )
nextSibling: name (value): #text ( t5 )
name (value): #text ( t5 )
parent: name (value): p (X t2 xxx t1 t5 frob t6 )
previousSibling: name (value): #text ( t1 )
nextSibling: name (value): i ( frob )
name (value): i ( frob )
parent: name (value): p (X t2 xxx t1 t5 frob t6 )
previousSibling: name (value): #text ( t5 )
nextSibling: name (value): #text ( t6 )
name (value): #text ( frob )
parent: name (value): i ( frob )
previousSibling: NULL
nextSibling: NULL
name (value): #text ( t6 )
parent: name (value): p (X t2 xxx t1 t5 frob t6 )
previousSibling: name (value): i ( frob )
nextSibling: NULL
Fragment:
name (value): #document-fragment ()
parent: NULL
previousSibling: NULL
nextSibling: NULL
div:
name (value): div ( t4 t3 xxx )
parent: NULL
previousSibling: NULL
nextSibling: NULL
name (value): #text ( t4 )
parent: name (value): div ( t4 t3 xxx )
previousSibling: NULL
nextSibling: name (value): #text ( t3 )
name (value): #text ( t3 )
parent: name (value): div ( t4 t3 xxx )
previousSibling: name (value): #text ( t4 )
nextSibling: name (value): b ()
name (value): b ()
parent: name (value): div ( t4 t3 xxx )
previousSibling: name (value): #text ( t3 )
nextSibling: name (value): #text ( xxx )
name (value): X ()
parent: name (value): b ()
previousSibling: NULL
nextSibling: NULL
name (value): #text ( xxx )
parent: name (value): div ( t4 t3 xxx )
previousSibling: name (value): b ()
nextSibling: NULL
Inserting fragment before t4
Error (2) on line 109: DOMNode::insertBefore(): Document Fragment is empty
name (value): div ( t4 t3 xxx )
parent: NULL
previousSibling: NULL
nextSibling: NULL
name (value): #text ( t4 )
parent: name (value): div ( t4 t3 xxx )
previousSibling: NULL
nextSibling: name (value): #text ( t3 )
name (value): #text ( t3 )
parent: name (value): div ( t4 t3 xxx )
previousSibling: name (value): #text ( t4 )
nextSibling: name (value): b ()
name (value): b ()
parent: name (value): div ( t4 t3 xxx )
previousSibling: name (value): #text ( t3 )
nextSibling: name (value): #text ( xxx )
name (value): X ()
parent: name (value): b ()
previousSibling: NULL
nextSibling: NULL
name (value): #text ( xxx )
parent: name (value): div ( t4 t3 xxx )
previousSibling: name (value): b ()
nextSibling: NULL
p:
name (value): p (X t2 xxx t1 t5 frob t6 )
parent: NULL
previousSibling: NULL
nextSibling: NULL
name (value): b (X)
parent: name (value): p (X t2 xxx t1 t5 frob t6 )
previousSibling: NULL
nextSibling: name (value): #text ( t2 )
name (value): #text (X)
parent: name (value): b (X)
previousSibling: NULL
nextSibling: NULL
name (value): #text ( t2 )
parent: name (value): p (X t2 xxx t1 t5 frob t6 )
previousSibling: name (value): b (X)
nextSibling: name (value): #text ( xxx )
name (value): #text ( xxx )
parent: name (value): p (X t2 xxx t1 t5 frob t6 )
previousSibling: name (value): #text ( t2 )
nextSibling: name (value): #text ( t1 )
name (value): #text ( t1 )
parent: name (value): p (X t2 xxx t1 t5 frob t6 )
previousSibling: name (value): #text ( xxx )
nextSibling: name (value): #text ( t5 )
name (value): #text ( t5 )
parent: name (value): p (X t2 xxx t1 t5 frob t6 )
previousSibling: name (value): #text ( t1 )
nextSibling: name (value): i ( frob )
name (value): i ( frob )
parent: name (value): p (X t2 xxx t1 t5 frob t6 )
previousSibling: name (value): #text ( t5 )
nextSibling: name (value): #text ( t6 )
name (value): #text ( frob )
parent: name (value): i ( frob )
previousSibling: NULL
nextSibling: NULL
name (value): #text ( t6 )
parent: name (value): p (X t2 xxx t1 t5 frob t6 )
previousSibling: name (value): i ( frob )
nextSibling: NULL
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>