|
| 1 | +--TEST-- |
| 2 | +GH-23365 (DOMNode::insertBefore($n, $n) drops the node and leaves a self-referencing sibling list) |
| 3 | +--CREDITS-- |
| 4 | +Alexandre Daubois |
| 5 | +--EXTENSIONS-- |
| 6 | +dom |
| 7 | +--FILE-- |
| 8 | +<?php |
| 9 | +$doc = new DOMDocument(); |
| 10 | +$doc->loadXML('<root>text<child/></root>'); |
| 11 | +$root = $doc->documentElement; |
| 12 | + |
| 13 | +$text = $root->firstChild; |
| 14 | +var_dump($root->insertBefore($text, $text) === $text); |
| 15 | +var_dump($root->childNodes->length); |
| 16 | +var_dump($text->parentNode === $root, $text->nextSibling === $text, $text->previousSibling === $text); |
| 17 | + |
| 18 | +$child = $root->lastChild; |
| 19 | +var_dump($root->insertBefore($child, $child) === $child); |
| 20 | +var_dump($root->childNodes->length); |
| 21 | + |
| 22 | +echo $doc->saveXML($root), PHP_EOL; |
| 23 | + |
| 24 | +$doc2 = new DOMDocument(); |
| 25 | +$doc2->loadXML('<root a="1" b="2"/>'); |
| 26 | +$el = $doc2->documentElement; |
| 27 | +$attr = $el->getAttributeNode('a'); |
| 28 | +var_dump($el->insertBefore($attr, $attr) === $attr); |
| 29 | +echo $doc2->saveXML($el), PHP_EOL; |
| 30 | + |
| 31 | +$doc3 = new DOMDocument(); |
| 32 | +$root3 = $doc3->appendChild($doc3->createElement('root')); |
| 33 | +$root3->appendChild($doc3->createTextNode('A')); |
| 34 | +$t = $root3->appendChild($doc3->createTextNode('B')); |
| 35 | +$root3->insertBefore($t, $t); |
| 36 | +$root3->appendChild($t); |
| 37 | +echo $doc3->saveXML($root3), PHP_EOL; |
| 38 | +unset($t, $root3, $doc3); |
| 39 | +echo "done", PHP_EOL; |
| 40 | +?> |
| 41 | +--EXPECT-- |
| 42 | +bool(true) |
| 43 | +int(2) |
| 44 | +bool(true) |
| 45 | +bool(false) |
| 46 | +bool(false) |
| 47 | +bool(true) |
| 48 | +int(2) |
| 49 | +<root>text<child/></root> |
| 50 | +bool(true) |
| 51 | +<root a="1" b="2"/> |
| 52 | +<root>AB</root> |
| 53 | +done |
0 commit comments