MutationObserver-textContent.html (3304B)
1 <!doctype html> 2 <meta charset=utf-8> 3 <title></title> 4 <script src=/resources/testharness.js></script> 5 <script src=/resources/testharnessreport.js></script> 6 <script> 7 8 async function test() { 9 10 let testElement1 = async_test("Setting Element.textContent"); 11 let el = document.createElement("div"); 12 let m = new MutationObserver((records) => testElement1.step(()=> { 13 assert_equals(records.length, 1, "Should have one record"); 14 assert_equals(records[0].addedNodes[0].nodeType, Node.TEXT_NODE, "Should have gotten a text node as a child."); 15 assert_equals(records[0].addedNodes[0].data, "foo"); 16 m.disconnect(); 17 testElement1.done(); 18 })); 19 m.observe(el, { childList: true }); 20 el.textContent = "foo"; 21 22 await Promise.resolve(); // Run microtasks 23 24 let testElement2 = async_test("Setting Element.textContent to the same value"); 25 m = new MutationObserver((records) => testElement2.step(()=> { 26 assert_equals(records.length, 1, "Should have one record"); 27 assert_equals(records[0].removedNodes[0].nodeType, Node.TEXT_NODE, "Should have removed a text node."); 28 assert_equals(records[0].removedNodes[0].data, "foo"); 29 assert_equals(records[0].addedNodes[0].nodeType, Node.TEXT_NODE, "Should have gotten a text node as a child."); 30 assert_equals(records[0].addedNodes[0].data, "foo"); 31 m.disconnect(); 32 testElement2.done(); 33 })); 34 m.observe(el, { childList: true }); 35 testElement2.step(() => { assert_equals(el.textContent, "foo"); }); 36 el.textContent = "foo"; 37 38 await Promise.resolve(); // Run microtasks 39 40 let testElement3 = async_test("Setting Element.textContent to a different value"); 41 m = new MutationObserver((records) => testElement3.step(()=> { 42 assert_equals(records.length, 1, "Should have one record"); 43 assert_equals(records[0].removedNodes[0].nodeType, Node.TEXT_NODE, "Should have removed a text node."); 44 assert_equals(records[0].removedNodes[0].data, "foo"); 45 assert_equals(records[0].addedNodes[0].nodeType, Node.TEXT_NODE, "Should have gotten a text node as a child."); 46 assert_equals(records[0].addedNodes[0].data, "bar"); 47 m.disconnect(); 48 testElement3.done(); 49 })); 50 m.observe(el, { childList: true }); 51 testElement3.step(() => { assert_equals(el.textContent, "foo"); }); 52 el.textContent = "bar"; 53 54 await Promise.resolve(); // Run microtasks 55 56 let testElement4 = async_test("Setting Element.textContent to the same value when the old node is a CDATASection"); 57 let xml = new DOMParser().parseFromString("<root></root>", "text/xml"); 58 el = xml.createElement("somelement"); 59 el.appendChild(xml.createCDATASection("foo")); 60 m = new MutationObserver((records) => testElement4.step(()=> { 61 assert_equals(records.length, 1, "Should have one record"); 62 assert_equals(records[0].removedNodes[0].nodeType, Node.CDATA_SECTION_NODE, "Should have removed a cdata node."); 63 assert_equals(records[0].removedNodes[0].data, "foo"); 64 assert_equals(records[0].addedNodes[0].nodeType, Node.TEXT_NODE, "Should have gotten a text node as a child."); 65 assert_equals(records[0].addedNodes[0].data, "foo"); 66 m.disconnect(); 67 testElement4.done(); 68 })); 69 m.observe(el, { childList: true }); 70 testElement4.step(() => { assert_equals(el.textContent, "foo"); }); 71 el.textContent = "foo"; 72 73 } 74 test(); 75 76 </script>