test_caretmove.html (5190B)
1 <html> 2 3 <head> 4 <title>Accessible caret move events testing</title> 5 6 <link rel="stylesheet" type="text/css" 7 href="chrome://mochikit/content/tests/SimpleTest/test.css" /> 8 9 <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> 10 <script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script> 11 12 <script type="application/javascript" 13 src="../common.js"></script> 14 <script type="application/javascript" 15 src="../events.js"></script> 16 17 <script type="application/javascript"> 18 /** 19 * Click checker. 20 */ 21 function clickChecker(aCaretOffset, aIsSelectionCollapsed, aID, aExtraNodeOrID, aExtraCaretOffset) { 22 this.__proto__ = new caretMoveChecker(aCaretOffset, aIsSelectionCollapsed, aID); 23 24 this.extraNode = getNode(aExtraNodeOrID); 25 26 this.check = function clickChecker_check(aEvent) { 27 this.__proto__.check(aEvent); 28 29 if (this.extraNode) { 30 var acc = getAccessible(this.extraNode, [nsIAccessibleText]); 31 is(acc.caretOffset, aExtraCaretOffset, 32 "Wrong caret offset for " + aExtraNodeOrID); 33 } 34 }; 35 } 36 37 /** 38 * Do tests. 39 */ 40 var gQueue = null; 41 42 // gA11yEventDumpToConsole = true; 43 44 function doTests() { 45 // test caret move events and caret offsets 46 gQueue = new eventQueue(); 47 48 var id = "textbox"; 49 gQueue.push(new synthFocus(id, new caretMoveChecker(5, true, id))); 50 gQueue.push(new synthSelectAll(id, new caretMoveChecker(5, false, id))); 51 gQueue.push(new synthClick(id, new caretMoveChecker(0, true, id))); 52 gQueue.push(new synthRightKey(id, new caretMoveChecker(1, true, id))); 53 54 if (!MAC) { 55 gQueue.push(new synthSelectAll(id, new caretMoveChecker(5, false, id))); 56 gQueue.push(new synthHomeKey(id, new caretMoveChecker(0, true, id))); 57 gQueue.push(new synthRightKey(id, new caretMoveChecker(1, true, id))); 58 } 59 else { 60 todo(false, "Make these tests pass on OSX (bug 650294)"); 61 } 62 63 id = "textarea"; 64 gQueue.push(new synthClick(id, new caretMoveChecker(0, true, id))); 65 gQueue.push(new synthRightKey(id, new caretMoveChecker(1, true, id))); 66 gQueue.push(new synthDownKey(id, new caretMoveChecker(12, true, id))); 67 68 id = "textarea_wrapped"; 69 gQueue.push(new setCaretOffset(id, 4, id)); 70 gQueue.push(new synthLeftKey(id, new caretMoveChecker(4, true, id))); 71 72 id = "p"; 73 gQueue.push(new synthClick(id, new caretMoveChecker(0, true, id))); 74 gQueue.push(new synthRightKey(id, new caretMoveChecker(1, true, id))); 75 gQueue.push(new synthDownKey(id, new caretMoveChecker(6, true, id))); 76 77 id = "p1_in_div"; 78 gQueue.push(new synthClick(id, new clickChecker(0, true, id, "p2_in_div", -1))); 79 80 id = "p"; 81 gQueue.push(new synthShiftTab(id, new caretMoveChecker(0, true, id))); 82 id = "textarea"; 83 gQueue.push(new synthShiftTab(id, new caretMoveChecker(12, true, id))); 84 id = "p"; 85 gQueue.push(new synthTab(id, new caretMoveChecker(0, true, id))); 86 87 // Set caret after a child of span element, i.e. after 'text' text. 88 gQueue.push(new moveCaretToDOMPoint("test1", getNode("test1_span"), 1, 89 4, "test1")); 90 gQueue.push(new moveCaretToDOMPoint("test2", getNode("test2_span"), 1, 91 4, "test2")); 92 93 // empty text element 94 gQueue.push(new moveCaretToDOMPoint("test3", getNode("test3"), 0, 95 0, "test3")); 96 gQueue.push(new moveCaretToDOMPoint("test4", getNode("test4_span"), 0, 97 0, "test4")); 98 99 gQueue.invoke(); // Will call SimpleTest.finish(); 100 } 101 102 SimpleTest.waitForExplicitFinish(); 103 addA11yLoadEvent(doTests); 104 </script> 105 </head> 106 107 <body> 108 109 <a target="_blank" 110 href="https://bugzilla.mozilla.org/show_bug.cgi?id=454377" 111 title="Accessible caret move events testing"> 112 Bug 454377 113 </a> 114 <a target="_blank" 115 href="https://bugzilla.mozilla.org/show_bug.cgi?id=567571" 116 title="caret-moved events missing at the end of a wrapped line of text"> 117 Bug 567571 118 </a> 119 <a target="_blank" 120 href="https://bugzilla.mozilla.org/show_bug.cgi?id=824901" 121 title="HyperTextAccessible::DOMPointToHypertextOffset fails for node and offset equal to node child count"> 122 Bug 824901 123 </a> 124 <p id="display"></p> 125 <div id="content" style="display: none"></div> 126 <pre id="test"> 127 </pre> 128 129 <input id="textbox" value="hello"/> 130 131 <textarea id="textarea">text<br>text</textarea> 132 <p id="p" contentEditable="true"><span>text</span><br/>text</p> 133 <div id="div" contentEditable="true"><p id="p1_in_div">text</p><p id="p2_in_div">text</p></div> 134 135 <p contentEditable="true" id="test1"><span id="test1_span">text</span>ohoho</p> 136 <p contentEditable="true" id="test2"><span><span id="test2_span">text</span></span>ohoho</p> 137 <p contentEditable="true" id="test3"></p> 138 <p contentEditable="true" id="test4"><span id="test4_span"></span></p> 139 140 <textarea id="textarea_wrapped" cols="5">hey friend</textarea> 141 </body> 142 </html>