1--TEST--
2DOMElement::insertAdjacentText()
3--EXTENSIONS--
4dom
5--FILE--
6<?php
7
8$dom = new DOMDocument();
9$dom->loadXML('<?xml version="1.0"?><container><p>foo</p></container>');
10
11echo "--- Edge cases ---\n";
12
13try {
14    $dom->createElement('free')->insertAdjacentText("bogus", "bogus");
15} catch (DOMException $e) {
16    echo $e->getMessage(), "\n";
17}
18
19function testNormalCases($dom, $uppercase) {
20    $container = $dom->documentElement;
21    $p = $container->firstElementChild;
22    $transform = fn ($s) => $uppercase ? strtoupper($s) : $s;
23
24    $p->insertAdjacentText("beforebegin", 'A');
25    echo $dom->saveXML();
26
27    $p->insertAdjacentText("afterbegin", 'B');
28    echo $dom->saveXML();
29
30    $p->insertAdjacentText("beforeend", 'C');
31    echo $dom->saveXML();
32
33    $p->insertAdjacentText("afterend", 'D');
34    echo $dom->saveXML();
35}
36
37echo "--- Normal cases uppercase ---\n";
38
39testNormalCases(clone $dom, true);
40
41echo "--- Normal cases lowercase ---\n";
42
43testNormalCases($dom, false);
44
45echo "--- Normal cases starting from empty element ---\n";
46
47$empty = $dom->createElement('empty');
48$empty->insertAdjacentText("afterbegin", 'A');
49echo $dom->saveXML($empty), "\n";
50
51$AText = $empty->firstChild;
52$empty->insertAdjacentText("afterbegin", 'B');
53echo $dom->saveXML($empty), "\n";
54var_dump($AText->textContent);
55
56?>
57--EXPECT--
58--- Edge cases ---
59Syntax Error
60--- Normal cases uppercase ---
61<?xml version="1.0"?>
62<container>A<p>foo</p></container>
63<?xml version="1.0"?>
64<container>A<p>Bfoo</p></container>
65<?xml version="1.0"?>
66<container>A<p>BfooC</p></container>
67<?xml version="1.0"?>
68<container>A<p>BfooC</p>D</container>
69--- Normal cases lowercase ---
70<?xml version="1.0"?>
71<container>A<p>foo</p></container>
72<?xml version="1.0"?>
73<container>A<p>Bfoo</p></container>
74<?xml version="1.0"?>
75<container>A<p>BfooC</p></container>
76<?xml version="1.0"?>
77<container>A<p>BfooC</p>D</container>
78--- Normal cases starting from empty element ---
79<empty>A</empty>
80<empty>BA</empty>
81string(1) "A"
82