Annotation of embedaddon/php/ext/dom/tests/bug28721.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: Bug #28721 (appendChild() and insertBefore() unset DOMText)
                      3: --SKIPIF--
                      4: <?php require_once('skipif.inc'); ?>
                      5: --FILE--
                      6: <?php
                      7: function print_node(DomNode $node) {
                      8:   echo "name (value): " . $node->nodeName . " (" . $node->nodeValue . ")\n";
                      9: }
                     10: 
                     11: function print_node_r(DomNode $node) {
                     12:   static $indent = "";
                     13:   echo "\n" . $indent;
                     14:   print_node($node);
                     15: 
                     16:   echo $indent . "parent: ";
                     17:   if ( $node->parentNode )
                     18:     print_node($node->parentNode);
                     19:   else
                     20:     echo "NULL\n";
                     21: 
                     22:   echo $indent . "previousSibling: ";
                     23:   if ( $node->previousSibling )
                     24:     print_node($node->previousSibling);
                     25:   else
                     26:     echo "NULL\n";
                     27:   
                     28:   echo $indent . "nextSibling: ";
                     29:   if ( $node->nextSibling )
                     30:     print_node($node->nextSibling);
                     31:   else
                     32:     echo "NULL\n";
                     33: 
                     34:   if ( !$node->hasChildNodes() )
                     35:     return;
                     36:   
                     37:   foreach ($node->childNodes as $child) {
                     38: 
                     39:     $old_indent  = $indent;
                     40:     $indent .= "  ";
                     41:     print_node_r($child);
                     42:     $indent = $old_indent;
                     43:   }
                     44: }
                     45: 
                     46: function err_handler($errno, $errstr, $errfile, $errline) {
                     47:   echo "Error ($errno) on line $errline: $errstr\n";
                     48: }
                     49: 
                     50: // Record 'DocumentFragment is empty' warnings
                     51: set_error_handler("err_handler", E_WARNING);
                     52: 
                     53: $xml = new DomDocument();
                     54: 
                     55: $p = $xml->createElement("p");
                     56: 
                     57: $p->appendChild($t1 = $xml->createTextNode(" t1 "));
                     58: $p->appendChild($b = $xml->createElement("b"));
                     59: $b->appendChild($xml->createTextNode("X"));
                     60: $p->appendChild($t2 = $xml->createTextNode(" t2 "));
                     61: $p->appendChild($xml->createTextNode(" xxx "));
                     62: 
                     63: print_node_r($p);
                     64: 
                     65: echo "\nAppend t1 to p:\n";
                     66: $ret = $p->appendChild($t1);
                     67: 
                     68: print_node_r($p);
                     69: echo "\n";
                     70: 
                     71: echo "t1 == ret: ";
                     72: var_dump( $t1 === $ret );
                     73: 
                     74: 
                     75: $d = $xml->createElement("div");
                     76: $d->appendChild($t3 = $xml->createTextNode(" t3 "));
                     77: $d->appendChild($b = $xml->createElement("b"));
                     78: $b->appendChild($xml->createElement("X"));
                     79: $d->appendChild($t4 = $xml->createTextNode(" t4 "));
                     80: $d->appendChild($xml->createTextNode(" xxx "));
                     81: 
                     82: echo "\ndiv:\n";
                     83: print_node_r($d);
                     84: 
                     85: echo "\nInsert t4 before t3:\n";
                     86: 
                     87: $ret = $d->insertBefore($t4, $t3);
                     88: 
                     89: print_node_r($d);
                     90: echo "\n";
                     91: 
                     92: $frag = $xml->createDocumentFragment();
                     93: 
                     94: $t5 = $frag->appendChild($xml->createTextNode(" t5 "));
                     95: $frag->appendChild($i = $xml->createElement("i"));
                     96: $i->appendChild($xml->createTextNode(" frob "));
                     97: $frag->appendChild($xml->createTextNOde(" t6 "));
                     98: 
                     99: echo "\np:\n";
                    100: print_node_r($p);
                    101: echo "\nFragment:\n";
                    102: print_node_r($frag);
                    103: 
                    104: echo "\nAppending fragment to p:\n";
                    105: $p->appendChild($frag);
                    106: 
                    107: print_node_r($p);
                    108: echo "\nFragment:\n";
                    109: print_node_r($frag);
                    110: 
                    111: echo "\ndiv:\n";
                    112: print_node_r($d);
                    113: echo "\nInserting fragment before t4\n";
                    114: $d->insertBefore($frag, $t4);
                    115: print_node_r($d);
                    116: 
                    117: echo "\np:\n";
                    118: print_node_r($p);
                    119: 
                    120: ?>
                    121: --EXPECT--
                    122: 
                    123: name (value): p ( t1 X t2  xxx )
                    124: parent: NULL
                    125: previousSibling: NULL
                    126: nextSibling: NULL
                    127: 
                    128:   name (value): #text ( t1 )
                    129:   parent: name (value): p ( t1 X t2  xxx )
                    130:   previousSibling: NULL
                    131:   nextSibling: name (value): b (X)
                    132: 
                    133:   name (value): b (X)
                    134:   parent: name (value): p ( t1 X t2  xxx )
                    135:   previousSibling: name (value): #text ( t1 )
                    136:   nextSibling: name (value): #text ( t2 )
                    137: 
                    138:     name (value): #text (X)
                    139:     parent: name (value): b (X)
                    140:     previousSibling: NULL
                    141:     nextSibling: NULL
                    142: 
                    143:   name (value): #text ( t2 )
                    144:   parent: name (value): p ( t1 X t2  xxx )
                    145:   previousSibling: name (value): b (X)
                    146:   nextSibling: name (value): #text ( xxx )
                    147: 
                    148:   name (value): #text ( xxx )
                    149:   parent: name (value): p ( t1 X t2  xxx )
                    150:   previousSibling: name (value): #text ( t2 )
                    151:   nextSibling: NULL
                    152: 
                    153: Append t1 to p:
                    154: 
                    155: name (value): p (X t2  xxx  t1 )
                    156: parent: NULL
                    157: previousSibling: NULL
                    158: nextSibling: NULL
                    159: 
                    160:   name (value): b (X)
                    161:   parent: name (value): p (X t2  xxx  t1 )
                    162:   previousSibling: NULL
                    163:   nextSibling: name (value): #text ( t2 )
                    164: 
                    165:     name (value): #text (X)
                    166:     parent: name (value): b (X)
                    167:     previousSibling: NULL
                    168:     nextSibling: NULL
                    169: 
                    170:   name (value): #text ( t2 )
                    171:   parent: name (value): p (X t2  xxx  t1 )
                    172:   previousSibling: name (value): b (X)
                    173:   nextSibling: name (value): #text ( xxx )
                    174: 
                    175:   name (value): #text ( xxx )
                    176:   parent: name (value): p (X t2  xxx  t1 )
                    177:   previousSibling: name (value): #text ( t2 )
                    178:   nextSibling: name (value): #text ( t1 )
                    179: 
                    180:   name (value): #text ( t1 )
                    181:   parent: name (value): p (X t2  xxx  t1 )
                    182:   previousSibling: name (value): #text ( xxx )
                    183:   nextSibling: NULL
                    184: 
                    185: t1 == ret: bool(true)
                    186: 
                    187: div:
                    188: 
                    189: name (value): div ( t3  t4  xxx )
                    190: parent: NULL
                    191: previousSibling: NULL
                    192: nextSibling: NULL
                    193: 
                    194:   name (value): #text ( t3 )
                    195:   parent: name (value): div ( t3  t4  xxx )
                    196:   previousSibling: NULL
                    197:   nextSibling: name (value): b ()
                    198: 
                    199:   name (value): b ()
                    200:   parent: name (value): div ( t3  t4  xxx )
                    201:   previousSibling: name (value): #text ( t3 )
                    202:   nextSibling: name (value): #text ( t4 )
                    203: 
                    204:     name (value): X ()
                    205:     parent: name (value): b ()
                    206:     previousSibling: NULL
                    207:     nextSibling: NULL
                    208: 
                    209:   name (value): #text ( t4 )
                    210:   parent: name (value): div ( t3  t4  xxx )
                    211:   previousSibling: name (value): b ()
                    212:   nextSibling: name (value): #text ( xxx )
                    213: 
                    214:   name (value): #text ( xxx )
                    215:   parent: name (value): div ( t3  t4  xxx )
                    216:   previousSibling: name (value): #text ( t4 )
                    217:   nextSibling: NULL
                    218: 
                    219: Insert t4 before t3:
                    220: 
                    221: name (value): div ( t4  t3  xxx )
                    222: parent: NULL
                    223: previousSibling: NULL
                    224: nextSibling: NULL
                    225: 
                    226:   name (value): #text ( t4 )
                    227:   parent: name (value): div ( t4  t3  xxx )
                    228:   previousSibling: NULL
                    229:   nextSibling: name (value): #text ( t3 )
                    230: 
                    231:   name (value): #text ( t3 )
                    232:   parent: name (value): div ( t4  t3  xxx )
                    233:   previousSibling: name (value): #text ( t4 )
                    234:   nextSibling: name (value): b ()
                    235: 
                    236:   name (value): b ()
                    237:   parent: name (value): div ( t4  t3  xxx )
                    238:   previousSibling: name (value): #text ( t3 )
                    239:   nextSibling: name (value): #text ( xxx )
                    240: 
                    241:     name (value): X ()
                    242:     parent: name (value): b ()
                    243:     previousSibling: NULL
                    244:     nextSibling: NULL
                    245: 
                    246:   name (value): #text ( xxx )
                    247:   parent: name (value): div ( t4  t3  xxx )
                    248:   previousSibling: name (value): b ()
                    249:   nextSibling: NULL
                    250: 
                    251: 
                    252: p:
                    253: 
                    254: name (value): p (X t2  xxx  t1 )
                    255: parent: NULL
                    256: previousSibling: NULL
                    257: nextSibling: NULL
                    258: 
                    259:   name (value): b (X)
                    260:   parent: name (value): p (X t2  xxx  t1 )
                    261:   previousSibling: NULL
                    262:   nextSibling: name (value): #text ( t2 )
                    263: 
                    264:     name (value): #text (X)
                    265:     parent: name (value): b (X)
                    266:     previousSibling: NULL
                    267:     nextSibling: NULL
                    268: 
                    269:   name (value): #text ( t2 )
                    270:   parent: name (value): p (X t2  xxx  t1 )
                    271:   previousSibling: name (value): b (X)
                    272:   nextSibling: name (value): #text ( xxx )
                    273: 
                    274:   name (value): #text ( xxx )
                    275:   parent: name (value): p (X t2  xxx  t1 )
                    276:   previousSibling: name (value): #text ( t2 )
                    277:   nextSibling: name (value): #text ( t1 )
                    278: 
                    279:   name (value): #text ( t1 )
                    280:   parent: name (value): p (X t2  xxx  t1 )
                    281:   previousSibling: name (value): #text ( xxx )
                    282:   nextSibling: NULL
                    283: 
                    284: Fragment:
                    285: 
                    286: name (value): #document-fragment ()
                    287: parent: NULL
                    288: previousSibling: NULL
                    289: nextSibling: NULL
                    290: 
                    291:   name (value): #text ( t5 )
                    292:   parent: name (value): #document-fragment ()
                    293:   previousSibling: NULL
                    294:   nextSibling: name (value): i ( frob )
                    295: 
                    296:   name (value): i ( frob )
                    297:   parent: name (value): #document-fragment ()
                    298:   previousSibling: name (value): #text ( t5 )
                    299:   nextSibling: name (value): #text ( t6 )
                    300: 
                    301:     name (value): #text ( frob )
                    302:     parent: name (value): i ( frob )
                    303:     previousSibling: NULL
                    304:     nextSibling: NULL
                    305: 
                    306:   name (value): #text ( t6 )
                    307:   parent: name (value): #document-fragment ()
                    308:   previousSibling: name (value): i ( frob )
                    309:   nextSibling: NULL
                    310: 
                    311: Appending fragment to p:
                    312: 
                    313: name (value): p (X t2  xxx  t1  t5  frob  t6 )
                    314: parent: NULL
                    315: previousSibling: NULL
                    316: nextSibling: NULL
                    317: 
                    318:   name (value): b (X)
                    319:   parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
                    320:   previousSibling: NULL
                    321:   nextSibling: name (value): #text ( t2 )
                    322: 
                    323:     name (value): #text (X)
                    324:     parent: name (value): b (X)
                    325:     previousSibling: NULL
                    326:     nextSibling: NULL
                    327: 
                    328:   name (value): #text ( t2 )
                    329:   parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
                    330:   previousSibling: name (value): b (X)
                    331:   nextSibling: name (value): #text ( xxx )
                    332: 
                    333:   name (value): #text ( xxx )
                    334:   parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
                    335:   previousSibling: name (value): #text ( t2 )
                    336:   nextSibling: name (value): #text ( t1 )
                    337: 
                    338:   name (value): #text ( t1 )
                    339:   parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
                    340:   previousSibling: name (value): #text ( xxx )
                    341:   nextSibling: name (value): #text ( t5 )
                    342: 
                    343:   name (value): #text ( t5 )
                    344:   parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
                    345:   previousSibling: name (value): #text ( t1 )
                    346:   nextSibling: name (value): i ( frob )
                    347: 
                    348:   name (value): i ( frob )
                    349:   parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
                    350:   previousSibling: name (value): #text ( t5 )
                    351:   nextSibling: name (value): #text ( t6 )
                    352: 
                    353:     name (value): #text ( frob )
                    354:     parent: name (value): i ( frob )
                    355:     previousSibling: NULL
                    356:     nextSibling: NULL
                    357: 
                    358:   name (value): #text ( t6 )
                    359:   parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
                    360:   previousSibling: name (value): i ( frob )
                    361:   nextSibling: NULL
                    362: 
                    363: Fragment:
                    364: 
                    365: name (value): #document-fragment ()
                    366: parent: NULL
                    367: previousSibling: NULL
                    368: nextSibling: NULL
                    369: 
                    370: div:
                    371: 
                    372: name (value): div ( t4  t3  xxx )
                    373: parent: NULL
                    374: previousSibling: NULL
                    375: nextSibling: NULL
                    376: 
                    377:   name (value): #text ( t4 )
                    378:   parent: name (value): div ( t4  t3  xxx )
                    379:   previousSibling: NULL
                    380:   nextSibling: name (value): #text ( t3 )
                    381: 
                    382:   name (value): #text ( t3 )
                    383:   parent: name (value): div ( t4  t3  xxx )
                    384:   previousSibling: name (value): #text ( t4 )
                    385:   nextSibling: name (value): b ()
                    386: 
                    387:   name (value): b ()
                    388:   parent: name (value): div ( t4  t3  xxx )
                    389:   previousSibling: name (value): #text ( t3 )
                    390:   nextSibling: name (value): #text ( xxx )
                    391: 
                    392:     name (value): X ()
                    393:     parent: name (value): b ()
                    394:     previousSibling: NULL
                    395:     nextSibling: NULL
                    396: 
                    397:   name (value): #text ( xxx )
                    398:   parent: name (value): div ( t4  t3  xxx )
                    399:   previousSibling: name (value): b ()
                    400:   nextSibling: NULL
                    401: 
                    402: Inserting fragment before t4
                    403: Error (2) on line 109: DOMNode::insertBefore(): Document Fragment is empty
                    404: 
                    405: name (value): div ( t4  t3  xxx )
                    406: parent: NULL
                    407: previousSibling: NULL
                    408: nextSibling: NULL
                    409: 
                    410:   name (value): #text ( t4 )
                    411:   parent: name (value): div ( t4  t3  xxx )
                    412:   previousSibling: NULL
                    413:   nextSibling: name (value): #text ( t3 )
                    414: 
                    415:   name (value): #text ( t3 )
                    416:   parent: name (value): div ( t4  t3  xxx )
                    417:   previousSibling: name (value): #text ( t4 )
                    418:   nextSibling: name (value): b ()
                    419: 
                    420:   name (value): b ()
                    421:   parent: name (value): div ( t4  t3  xxx )
                    422:   previousSibling: name (value): #text ( t3 )
                    423:   nextSibling: name (value): #text ( xxx )
                    424: 
                    425:     name (value): X ()
                    426:     parent: name (value): b ()
                    427:     previousSibling: NULL
                    428:     nextSibling: NULL
                    429: 
                    430:   name (value): #text ( xxx )
                    431:   parent: name (value): div ( t4  t3  xxx )
                    432:   previousSibling: name (value): b ()
                    433:   nextSibling: NULL
                    434: 
                    435: p:
                    436: 
                    437: name (value): p (X t2  xxx  t1  t5  frob  t6 )
                    438: parent: NULL
                    439: previousSibling: NULL
                    440: nextSibling: NULL
                    441: 
                    442:   name (value): b (X)
                    443:   parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
                    444:   previousSibling: NULL
                    445:   nextSibling: name (value): #text ( t2 )
                    446: 
                    447:     name (value): #text (X)
                    448:     parent: name (value): b (X)
                    449:     previousSibling: NULL
                    450:     nextSibling: NULL
                    451: 
                    452:   name (value): #text ( t2 )
                    453:   parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
                    454:   previousSibling: name (value): b (X)
                    455:   nextSibling: name (value): #text ( xxx )
                    456: 
                    457:   name (value): #text ( xxx )
                    458:   parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
                    459:   previousSibling: name (value): #text ( t2 )
                    460:   nextSibling: name (value): #text ( t1 )
                    461: 
                    462:   name (value): #text ( t1 )
                    463:   parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
                    464:   previousSibling: name (value): #text ( xxx )
                    465:   nextSibling: name (value): #text ( t5 )
                    466: 
                    467:   name (value): #text ( t5 )
                    468:   parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
                    469:   previousSibling: name (value): #text ( t1 )
                    470:   nextSibling: name (value): i ( frob )
                    471: 
                    472:   name (value): i ( frob )
                    473:   parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
                    474:   previousSibling: name (value): #text ( t5 )
                    475:   nextSibling: name (value): #text ( t6 )
                    476: 
                    477:     name (value): #text ( frob )
                    478:     parent: name (value): i ( frob )
                    479:     previousSibling: NULL
                    480:     nextSibling: NULL
                    481: 
                    482:   name (value): #text ( t6 )
                    483:   parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )
                    484:   previousSibling: name (value): i ( frob )
                    485:   nextSibling: NULL

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>