test_resizers_appearance.html (4656B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>Test for resizers appearance</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <script src="/tests/SimpleTest/EventUtils.js"></script> 7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 8 </head> 9 <body> 10 <p id="display"></p> 11 <div id="content" style="display: none;"> 12 13 </div> 14 15 <div id="editor" contenteditable></div><br> 16 <div id="clickaway" style="width: 30px; height: 30px; border: 3px solid red;"></div> 17 <img src="green.png"><!-- for ensuring to load the image at first test of <img> case --> 18 <pre id="test"> 19 20 <script class="testbody" type="application/javascript"> 21 "use strict"; 22 23 function resizingActive(win = window) { 24 let Ci = SpecialPowers.Ci; 25 let editor = SpecialPowers.wrap(win).docShell.editor; 26 return editor && editor.QueryInterface(Ci.nsIHTMLObjectResizer).isObjectResizingActive; 27 } 28 29 SimpleTest.waitForExplicitFinish(); 30 SimpleTest.waitForFocus(async function() { 31 async function waitForSelectionChange() { 32 return new Promise(resolve => { 33 document.addEventListener("selectionchange", () => { 34 resolve(); 35 }, {once: true}); 36 }); 37 } 38 39 let editor = document.getElementById("editor"); 40 let outOfEditor = document.getElementById("clickaway"); 41 42 const kTests = [ 43 { description: "<img>", 44 innerHTML: "<img id=\"target\" src=\"green.png\" width=\"100\" height=\"100\">", 45 resizable: true, 46 }, 47 { description: "<table>", 48 innerHTML: "<table id=\"target\" border><tr><td>1-1</td><td>1-2</td></tr><tr><td>2-1</td><td>2-2</td></tr></table>", 49 resizable: true, 50 }, 51 { description: "absolute positioned <div>", 52 innerHTML: "<div id=\"target\" style=\"position: absolute; top: 50px; left: 50px;\">positioned</div>", 53 resizable() { return document.queryCommandState("enableAbsolutePositionEditing"); }, 54 }, 55 { description: "fixed positioned <div>", 56 innerHTML: "<div id=\"target\" style=\"position: fixed; top: 50px; left: 50px;\">positioned</div>", 57 resizable: false, 58 }, 59 { description: "relative positioned <div>", 60 innerHTML: "<div id=\"target\" style=\"position: relative; top: 50px; left: 50px;\">positioned</div>", 61 resizable: false, 62 }, 63 ]; 64 65 for (let kEnableAbsolutePositionEditor of [true, false]) { 66 document.execCommand("enableAbsolutePositionEditing", false, kEnableAbsolutePositionEditor); 67 for (const kTest of kTests) { 68 const kDescription = kTest.description + 69 (kEnableAbsolutePositionEditor ? " (enabled absolute position editor)" : "") + ": "; 70 editor.innerHTML = kTest.innerHTML; 71 let target = document.getElementById("target"); 72 73 document.execCommand("enableObjectResizing", false, false); 74 ok(!document.queryCommandState("enableObjectResizing"), 75 kDescription + "Object resizer should be disabled by the call of execCommand"); 76 77 synthesizeMouseAtCenter(outOfEditor, {}); 78 let promiseSelectionChangeEvent1 = waitForSelectionChange(); 79 synthesizeMouseAtCenter(target, {}); 80 await promiseSelectionChangeEvent1; 81 ok(!resizingActive(), 82 kDescription + ": While enableObjectResizing is disabled, resizers shouldn't appear"); 83 84 document.execCommand("enableObjectResizing", false, true); 85 ok(document.queryCommandState("enableObjectResizing"), 86 kDescription + "Object resizer should be enabled by the call of execCommand"); 87 88 synthesizeMouseAtCenter(outOfEditor, {}); 89 let promiseSelectionChangeEvent2 = waitForSelectionChange(); 90 synthesizeMouseAtCenter(target, {}); 91 await promiseSelectionChangeEvent2; 92 93 const kResizable = typeof kTest.resizable === "function" ? kTest.resizable() : kTest.resizable; 94 is(resizingActive(), kResizable, 95 kDescription + (kResizable ? "While enableObjectResizing is enabled, resizers should appear" : 96 "Even while enableObjectResizing is enabled, resizers shouldn't appear")); 97 document.execCommand("enableObjectResizing", false, false); 98 ok(!resizingActive(), 99 kDescription + "enableObjectResizing is disabled even while resizers are visible, resizers should disappear"); 100 101 document.execCommand("enableObjectResizing", false, true); 102 is(resizingActive(), kResizable, 103 kDescription + (kResizable ? "enableObjectResizing is enabled when resizable object is selected, resizers should appear" : 104 "Even if enableObjectResizing is enabled when non-resizable object is selected, resizers shouldn't appear")); 105 } 106 } 107 108 SimpleTest.finish(); 109 }); 110 </script> 111 </pre> 112 </body> 113 </html>