browser_markup_html_edit_02.js (5051B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 /* import-globals-from helper_outerhtml_test_runner.js */ 4 "use strict"; 5 6 // Test outerHTML edition via the markup-view 7 8 loadHelperScript("helper_outerhtml_test_runner.js"); 9 requestLongerTimeout(2); 10 11 const TEST_DATA = [ 12 { 13 selector: "#badMarkup1", 14 oldHTML: '<div id="badMarkup1">badMarkup1</div>', 15 newHTML: '<div id="badMarkup1">badMarkup1</div> hanging</div>', 16 async validate({ pageNodeFront, selectedNodeFront }) { 17 is(pageNodeFront, selectedNodeFront, "Original element is selected"); 18 19 const [textNodeName, textNodeData] = await SpecialPowers.spawn( 20 gBrowser.selectedBrowser, 21 [], 22 () => { 23 const node = 24 content.document.querySelector("#badMarkup1").nextSibling; 25 return [node.nodeName, node.data]; 26 } 27 ); 28 is(textNodeName, "#text", "Sibling is a text element"); 29 is(textNodeData, " hanging", "New text node has expected text content"); 30 }, 31 }, 32 { 33 selector: "#badMarkup2", 34 oldHTML: '<div id="badMarkup2">badMarkup2</div>', 35 newHTML: 36 '<div id="badMarkup2">badMarkup2</div> hanging<div></div>' + 37 "</div></div></body>", 38 async validate({ pageNodeFront, selectedNodeFront }) { 39 is(pageNodeFront, selectedNodeFront, "Original element is selected"); 40 41 const [textNodeName, textNodeData] = await SpecialPowers.spawn( 42 gBrowser.selectedBrowser, 43 [], 44 () => { 45 const node = 46 content.document.querySelector("#badMarkup2").nextSibling; 47 return [node.nodeName, node.data]; 48 } 49 ); 50 is(textNodeName, "#text", "Sibling is a text element"); 51 is(textNodeData, " hanging", "New text node has expected text content"); 52 }, 53 }, 54 { 55 selector: "#badMarkup3", 56 oldHTML: '<div id="badMarkup3">badMarkup3</div>', 57 newHTML: 58 '<div id="badMarkup3">badMarkup3 <em>Emphasized <strong> ' + 59 "and strong</div>", 60 async validate({ pageNodeFront, selectedNodeFront }) { 61 is(pageNodeFront, selectedNodeFront, "Original element is selected"); 62 63 const emText = await getContentPageElementProperty( 64 "#badMarkup3 em", 65 "textContent" 66 ); 67 const strongText = await getContentPageElementProperty( 68 "#badMarkup3 strong", 69 "textContent" 70 ); 71 is(emText, "Emphasized and strong", "<em> was auto created"); 72 is(strongText, " and strong", "<strong> was auto created"); 73 }, 74 }, 75 { 76 selector: "#badMarkup4", 77 oldHTML: '<div id="badMarkup4">badMarkup4</div>', 78 newHTML: '<div id="badMarkup4">badMarkup4</p>', 79 async validate({ pageNodeFront, selectedNodeFront }) { 80 is(pageNodeFront, selectedNodeFront, "Original element is selected"); 81 82 const divText = await getContentPageElementProperty( 83 "#badMarkup4", 84 "textContent" 85 ); 86 const divTag = await getContentPageElementProperty( 87 "#badMarkup4", 88 "tagName" 89 ); 90 91 const pText = await getContentPageElementProperty( 92 "#badMarkup4 p", 93 "textContent" 94 ); 95 const pTag = await getContentPageElementProperty( 96 "#badMarkup4 p", 97 "tagName" 98 ); 99 100 is(divText, "badMarkup4", "textContent is correct"); 101 is(divTag, "DIV", "did not change to <p> tag"); 102 is(pText, "", "The <p> tag has no children"); 103 is(pTag, "P", "Created an empty <p> tag"); 104 }, 105 }, 106 { 107 selector: "#badMarkup5", 108 oldHTML: '<p id="badMarkup5">badMarkup5</p>', 109 newHTML: '<p id="badMarkup5">badMarkup5 <div>with a nested div</div></p>', 110 async validate({ pageNodeFront, selectedNodeFront }) { 111 is(pageNodeFront, selectedNodeFront, "Original element is selected"); 112 113 const num = 114 await getNumberOfMatchingElementsInContentPage("#badMarkup5 div"); 115 116 const pText = await getContentPageElementProperty( 117 "#badMarkup5", 118 "textContent" 119 ); 120 const pTag = await getContentPageElementProperty( 121 "#badMarkup5", 122 "tagName" 123 ); 124 125 const divText = await getContentPageElementProperty( 126 "#badMarkup5 ~ div", 127 "textContent" 128 ); 129 const divTag = await getContentPageElementProperty( 130 "#badMarkup5 ~ div", 131 "tagName" 132 ); 133 134 is(num, 0, "The invalid markup got created as a sibling"); 135 is(pText, "badMarkup5 ", "The p tag does not take in the div content"); 136 is(pTag, "P", "Did not change to a <div> tag"); 137 is(divText, "with a nested div", "textContent is correct"); 138 is(divTag, "DIV", "Did not change to <p> tag"); 139 }, 140 }, 141 ]; 142 143 const TEST_URL = 144 "data:text/html," + 145 "<!DOCTYPE html>" + 146 "<head><meta charset='utf-8' /></head>" + 147 "<body>" + 148 TEST_DATA.map(outer => outer.oldHTML).join("\n") + 149 "</body>" + 150 "</html>"; 151 152 add_task(async function () { 153 const { inspector } = await openInspectorForURL(TEST_URL); 154 inspector.markup._frame.focus(); 155 await runEditOuterHTMLTests(TEST_DATA, inspector); 156 });