function waitForScroll() {
return waitToClearOutAnyPotentialScrolls(window);
}
async function synthesizeKeyInEachEventLoop(aKey, aEvent, aCount) {
for (let i = 0; i < aCount; i++) {
synthesizeKey(aKey, aEvent);
await new Promise(resolve => SimpleTest.executeSoon(resolve));
}
}
async function sendStringOneByOne(aString) {
for (const ch of aString) {
sendString(ch);
await new Promise(resolve => SimpleTest.executeSoon(resolve));
}
}
async function doKeyEventTest(aSelector) {
const element = document.querySelector(aSelector);
if (element.value !== undefined) {
element.value = "";
} else {
element.innerHTML = "";
}
element.focus();
element.scrollTop = 0;
await waitForScroll();
is(element.scrollTop, 0, `${aSelector}.scrollTop should be 0`);
await synthesizeKeyInEachEventLoop("KEY_Enter", {shiftKey: true}, 6);
await waitForScroll();
isnot(element.scrollTop, 0, `${aSelector} should be scrolled by inserting line breaks`);
const oldScrollTop = element.scrollTop;
await synthesizeKeyInEachEventLoop("KEY_ArrowUp", {}, 5);
await waitForScroll();
isnot(element.scrollTop, oldScrollTop, `${aSelector} should be scrolled by up key events`);
await synthesizeKeyInEachEventLoop("KEY_ArrowDown", {}, 5);
await waitForScroll();
is(element.scrollTop, oldScrollTop, `${aSelector} should be scrolled by down key events`);
const longWord = "aaaaaaaaaaaaaaaaaaaa";
await sendStringOneByOne(longWord);
await waitForScroll();
isnot(element.scrollLeft, 0, `${aSelector} should be scrolled by typing long word`);
const oldScrollLeft = element.scrollLeft;
await synthesizeKeyInEachEventLoop("KEY_ArrowLeft", {}, longWord.length);
await waitForScroll();
isnot(element.scrollLeft, oldScrollLeft, `${aSelector} should be scrolled by left key events`);
await synthesizeKeyInEachEventLoop("KEY_ArrowRight", {}, longWord.length);
await waitForScroll();
is(element.scrollLeft, oldScrollLeft, `${aSelector} should be scrolled by right key events`);
}
async function doCompositionTest(aSelector) {
const element = document.querySelector(aSelector);
if (element.value !== undefined) {
element.value = "";
} else {
element.innerHTML = "";
}
element.focus();
element.scrollTop = 0;
await waitForScroll();
is(element.scrollTop, 0, `${aSelector}.scrollTop should be 0`);
const longCompositionString = "Web \u958b\u767a\u8005\u306e\u7686\u3055\u3093\u306f\u3001" + "Firefox \u306b\u5b9f\u88c5\u3055\u308c\u3066\u3044\u308b HTML5" + " \u3084 CSS \u306e\u65b0\u6a5f\u80fd\u3092\u6d3b\u7528\u3059" + "\u308b\u3053\u3068\u3067\u3001\u9b45\u529b\u3042\u308b Web " + "\u30b5\u30a4\u30c8\u3084\u9769\u65b0\u7684\u306a Web \u30a2" + "\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u3088\u308a" + "\u77ed\u6642\u9593\u3067\u7c21\u5358\u306b\u4f5c\u6210\u3067" + "\u304d\u307e\u3059\u3002";
synthesizeCompositionChange(
{
composition: {
string: longCompositionString,
clauses: [
{
length: longCompositionString.length,
attr: COMPOSITION_ATTR_RAW_CLAUSE,
},
],
},
caret: {
start: longCompositionString.length,
length: 0,
},
}
);
await waitForScroll();
isnot(element.scrollTop, 0, `${aSelector} should be scrolled by composition`);
synthesizeComposition({ type: "compositioncommit", data: "" });
await waitForScroll();
is(
element.scrollTop,
0,
`${aSelector} should be scrolled back to the top by canceling composition`
);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.