2008-04-15 11:40:38 -07:00
<!DOCTYPE HTML>
< html >
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=406596
-->
< head >
< title > Test for Bug 406596< / title >
< script type = "text/javascript" src = "/tests/SimpleTest/SimpleTest.js" > < / script >
< script type = "text/javascript" src = "/tests/SimpleTest/EventUtils.js" > < / script >
< link rel = "stylesheet" type = "text/css" href = "/tests/SimpleTest/test.css" / >
< / head >
< body >
< a target = "_blank" href = "https://bugzilla.mozilla.org/show_bug.cgi?id=406596" > Mozilla Bug 406596< / a >
< div id = "content" >
2008-04-16 00:26:38 -07:00
< div id = "edit" contenteditable = "true" > This text is editable, you can change its content < a href = "#" id = "a" tabindex = "0" > ABCDEFGHIJKLMNOPQRSTUV< / a > < input type = "submit" value = "abcd" id = "b" > < / input > < img src = "foo.png" id = "c" > < / div >
2008-04-15 11:40:38 -07:00
< div tabindex = "0" > This text is not editable but is focusable< / div >
< div tabindex = "0" > This text is not editable but is focusable< / div >
2008-04-16 00:26:38 -07:00
< a href = "#" id = "d" contenteditable = "true" > ABCDEFGHIJKLMNOPQRSTUV< / a >
2008-04-15 11:40:38 -07:00
< div tabindex = "0" > This text is not editable but is focusable< / div >
< div tabindex = "0" > This text is not editable but is focusable< / div >
< / div >
< pre id = "test" >
< script class = "testbody" type = "text/javascript" >
/** Test for Bug 406596 **/
function testTabbing(click, focus, selectionOffset) {
2013-09-11 01:51:09 -07:00
var wu = SpecialPowers.getDOMWindowUtils(window);
2008-04-15 11:40:38 -07:00
var elem = document.getElementById(click);
var rect = elem.getBoundingClientRect();
var selection = window.getSelection();
2008-04-16 01:35:44 -07:00
var x = (rect.left + rect.right) / 4;
var y = (rect.top + rect.bottom) / 2;
wu.sendMouseEvent("mousedown", x, y, 0, 1, 0);
wu.sendMouseEvent("mousemove", x + selectionOffset, y, 0, 1, 0);
wu.sendMouseEvent("mouseup", x + selectionOffset, y, 0, 1, 0);
2008-04-15 11:40:38 -07:00
if (selectionOffset) {
is(selection.rangeCount, 1, "there should be one range in the selection");
var range = selection.getRangeAt(0);
}
var focusedElement = document.activeElement;
is(focusedElement, document.getElementById(focus),
"clicking should move focus to the contentEditable node");
synthesizeKey("VK_TAB", {});
synthesizeKey("VK_TAB", {});
synthesizeKey("VK_TAB", { shiftKey: true });
synthesizeKey("VK_TAB", { shiftKey: true });
is(document.activeElement, focusedElement,
"tab/shift-tab should move focus back to the contentEditable node");
if (selectionOffset) {
is(selection.rangeCount, 1,
"there should still be one range in the selection");
var newRange = selection.getRangeAt(0);
is(newRange.compareBoundaryPoints(Range.START_TO_START, range), 0,
"the selection should be the same as before the tabbing");
is(newRange.compareBoundaryPoints(Range.END_TO_END, range), 0,
"the selection should be the same as before the tabbing");
}
}
function test() {
window.getSelection().removeAllRanges();
testTabbing("edit", "edit", 0);
testTabbing("a", "edit", 0);
testTabbing("d", "d", 0);
testTabbing("edit", "edit", 10);
testTabbing("a", "edit", 10);
testTabbing("d", "d", 10);
SimpleTest.finish();
}
window.onload = function() {
SimpleTest.waitForExplicitFinish();
setTimeout(test, 0);
};
< / script >
< / pre >
< / body >
< / html >