diff --git a/dom/base/nsDOMWindowUtils.cpp b/dom/base/nsDOMWindowUtils.cpp index af6efdd1c650..9171c158cf07 100644 --- a/dom/base/nsDOMWindowUtils.cpp +++ b/dom/base/nsDOMWindowUtils.cpp @@ -1142,7 +1142,9 @@ InitEvent(nsGUIEvent &aEvent, nsIntPoint *aPt = nsnull) } NS_IMETHODIMP -nsDOMWindowUtils::SendCompositionEvent(const nsAString& aType) +nsDOMWindowUtils::SendCompositionEvent(const nsAString& aType, + const nsAString& aData, + const nsAString& aLocale) { if (!IsUniversalXPConnectCapable()) { return NS_ERROR_DOM_SECURITY_ERR; @@ -1159,12 +1161,17 @@ nsDOMWindowUtils::SendCompositionEvent(const nsAString& aType) msg = NS_COMPOSITION_START; } else if (aType.EqualsLiteral("compositionend")) { msg = NS_COMPOSITION_END; + } else if (aType.EqualsLiteral("compositionupdate")) { + msg = NS_COMPOSITION_UPDATE; } else { return NS_ERROR_FAILURE; } nsCompositionEvent compositionEvent(PR_TRUE, msg, widget); InitEvent(compositionEvent); + if (msg != NS_COMPOSITION_START) { + compositionEvent.data = aData; + } nsEventStatus status; nsresult rv = widget->DispatchEvent(&compositionEvent, status); diff --git a/dom/interfaces/base/nsIDOMWindowUtils.idl b/dom/interfaces/base/nsIDOMWindowUtils.idl index e2069e480f28..d7608b44eb57 100644 --- a/dom/interfaces/base/nsIDOMWindowUtils.idl +++ b/dom/interfaces/base/nsIDOMWindowUtils.idl @@ -66,7 +66,7 @@ interface nsITransferable; interface nsIQueryContentEventResult; interface nsIDOMWindow; -[scriptable, uuid(d95fac68-4f0d-430f-9580-6dd8041f177e)] +[scriptable, uuid(748746a7-a6f4-41d6-bc82-1788981b2623)] interface nsIDOMWindowUtils : nsISupports { /** @@ -579,9 +579,16 @@ interface nsIDOMWindowUtils : nsISupports { * Will throw a DOM security error if called without UniversalXPConnect * privileges. * - * @param aType The event type: "compositionstart" or "compositionend". + * @param aType The event type: "compositionstart", "compositionend" or + * "compositionupdate". + * @param aData The data property value. Note that this isn't applied + * for compositionstart event because its value is the + * selected text which is automatically computed. + * @param aLocale The locale property value. */ - void sendCompositionEvent(in AString aType); + void sendCompositionEvent(in AString aType, + in AString aData, + in AString aLocale); /** * Synthesize a text event to the window. diff --git a/editor/libeditor/html/tests/test_contenteditable_text_input_handling.html b/editor/libeditor/html/tests/test_contenteditable_text_input_handling.html index 19f70015733d..36c65afe6e95 100644 --- a/editor/libeditor/html/tests/test_contenteditable_text_input_handling.html +++ b/editor/libeditor/html/tests/test_contenteditable_text_input_handling.html @@ -221,8 +221,9 @@ function runTests() // IME const nsIDOMWindowUtils = Components.interfaces.nsIDOMWindowUtils; // start composition - synthesizeComposition(true); + synthesizeComposition({ type: "compositionstart" }); // input first character + synthesizeComposition({ type: "compositionupdate", data: "\u3089" }); synthesizeText( { "composition": { "string": "\u3089", @@ -296,7 +297,7 @@ function runTests() "query selected text event returns wrong selected text after commit" + when); // end composition - synthesizeComposition(false); + synthesizeComposition({ type: "compositionend", data: "\u3089" }); checkValue(staticContent, "\u3089"); checkValue(inputInStatic, "\u3089"); diff --git a/layout/base/tests/bug613807-1.html b/layout/base/tests/bug613807-1.html index 6b79ec4e2715..4f592e0fe853 100644 --- a/layout/base/tests/bug613807-1.html +++ b/layout/base/tests/bug613807-1.html @@ -48,9 +48,10 @@ const nsIDOMWindowUtils = Components.interfaces.nsIDOMWindowUtils; // start composition - synthesizeComposition(true); + synthesizeComposition({ type: "compositionstart" }); // input raw characters + synthesizeComposition({ type: "compositionupdate", data: "\u306D" }); synthesizeText( { composition: { string: "\u306D", @@ -60,6 +61,7 @@ }, caret: { start: 1, length: 0 } }); + synthesizeComposition({ type: "compositionupdate", data: "\u306D\u3053" }); synthesizeText( { composition: { string: "\u306D\u3053", @@ -71,6 +73,7 @@ }); // convert + synthesizeComposition({ type: "compositionupdate", data: "\u732B" }); synthesizeText( { composition: { string: "\u732B", @@ -93,7 +96,7 @@ }); // end composition - synthesizeComposition(false); + synthesizeComposition({ type: "compositionend", data: "\u732B" }); document.body.clientWidth; diff --git a/mobile/chrome/tests/browser_awesomescreen.js b/mobile/chrome/tests/browser_awesomescreen.js index 162b232e0151..14b41d43e5ca 100644 --- a/mobile/chrome/tests/browser_awesomescreen.js +++ b/mobile/chrome/tests/browser_awesomescreen.js @@ -399,7 +399,7 @@ gTests.push({ window.removeEventListener("compositionstart", arguments.callee, false); setTimeout(gCurrentTest.onCompositionStart, 0) }, false); - Browser.windowUtils.sendCompositionEvent("compositionstart"); + Browser.windowUtils.sendCompositionEvent("compositionstart", "", ""); }, onCompositionStart: function() { @@ -409,7 +409,7 @@ gTests.push({ window.removeEventListener("compositionend", arguments.callee, false); setTimeout(gCurrentTest.onCompositionEnd, 0) }, false); - Browser.windowUtils.sendCompositionEvent("compositionend"); + Browser.windowUtils.sendCompositionEvent("compositionend", "", ""); }, onCompositionEnd: function() { diff --git a/testing/mochitest/tests/SimpleTest/EventUtils.js b/testing/mochitest/tests/SimpleTest/EventUtils.js index 094315677a10..6bcd0b2ba868 100644 --- a/testing/mochitest/tests/SimpleTest/EventUtils.js +++ b/testing/mochitest/tests/SimpleTest/EventUtils.js @@ -552,11 +552,18 @@ function _getDOMWindowUtils(aWindow) /** * Synthesize a composition event. * - * @param aIsCompositionStart If true, this synthesize compositionstart event. - * Otherwise, compositionend event. + * @param aEvent The composition event information. This must + * have |type| member. The value must be + * "compositionstart", "compositionend" or + * "compositionupdate". + * And also this may have |data| and |locale| which + * would be used for the value of each property of + * the composition event. Note that the data would + * be ignored if the event type were + * "compositionstart". * @param aWindow Optional (If null, current |window| will be used) */ -function synthesizeComposition(aIsCompositionStart, aWindow) +function synthesizeComposition(aEvent, aWindow) { netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); @@ -565,8 +572,8 @@ function synthesizeComposition(aIsCompositionStart, aWindow) return; } - utils.sendCompositionEvent(aIsCompositionStart ? - "compositionstart" : "compositionend"); + utils.sendCompositionEvent(aEvent.type, aEvent.data ? aEvent.data : "", + aEvent.locale ? aEvent.locale : ""); } /** diff --git a/testing/mochitest/tests/test_sanityEventUtils.html b/testing/mochitest/tests/test_sanityEventUtils.html index 421759074b92..850e0d6113d8 100644 --- a/testing/mochitest/tests/test_sanityEventUtils.html +++ b/testing/mochitest/tests/test_sanityEventUtils.html @@ -115,12 +115,17 @@ function starttest() { /* test synthesizeComposition */ check = false; window.addEventListener("compositionstart", function() { check = true; }, false); - synthesizeComposition(true); - is(check, true, 'synthesizeComposition(true) should dispatch compositionstart'); + synthesizeComposition({ type: "compositionstart" }); + is(check, true, 'synthesizeComposition() should dispatch compositionstart'); + + check = false; + window.addEventListener("compositionupdate", function() { check = true; }, false); + synthesizeComposition({ type: "compositionupdate" }); + is(check, true, 'synthesizeComposition() should dispatch compositionupdate'); check = false; window.addEventListener("compositionend", function() { check = true; }, false); - synthesizeComposition(); + synthesizeComposition({ type: "compositionend" }); is(check, true, 'synthesizeComposition() should dispatch compositionend'); check = false; diff --git a/widget/tests/test_imestate.html b/widget/tests/test_imestate.html index 290b74fd98fb..c29da28d6e18 100644 --- a/widget/tests/test_imestate.html +++ b/widget/tests/test_imestate.html @@ -1111,9 +1111,11 @@ function runEditorFlagChangeTests() var flags = editor.flags; // start composition - synthesizeComposition(true); + synthesizeComposition({ type: "compositionstart" }); // input characters + synthesizeComposition({ type: "compositionupdate", + data: "\u3078\u3093\u3057\u3093" }); synthesizeText( { "composition": { "string": "\u3078\u3093\u3057\u3093", @@ -1144,6 +1146,7 @@ function runEditorFlagChangeTests() description + "#3 IME isn't enabled on HTML editor"); // cancel the composition + synthesizeComposition({ type: "compositionupdate", data: "" }); synthesizeText( { "composition": { "string": "", @@ -1155,7 +1158,7 @@ function runEditorFlagChangeTests() "caret": { "start": 0, "length": 0 } }); - synthesizeComposition(false); + synthesizeComposition({ type: "compositionend", data: "" }); container.removeAttribute("contenteditable"); } diff --git a/widget/tests/test_input_events_on_deactive_window.xul b/widget/tests/test_input_events_on_deactive_window.xul index 67344cb543aa..e847149141a5 100644 --- a/widget/tests/test_input_events_on_deactive_window.xul +++ b/widget/tests/test_input_events_on_deactive_window.xul @@ -66,7 +66,7 @@ function startTests() } var keydownHandled, keypressHandled, keyupHandled, compositionstartHandled, - compositionendHandled, inputHandled; + compositionendHandled, compositionupdateHandled, inputHandled; function clear() { @@ -75,6 +75,7 @@ function startTests() keyupHandled = false; compositionstartHandled = false; compositionendHandled = false; + compositionupdateHandled = false; inputHandled = false; } @@ -90,6 +91,8 @@ function startTests() compositionstartHandled = true; } else if (aEvent.type == "compositionend") { compositionendHandled = true; + } else if (aEvent.type == "compositionupdate") { + compositionupdateHandled = true; } else if (aEvent.type == "input") { inputHandled = true; } else { @@ -102,6 +105,7 @@ function startTests() textarea.addEventListener("keyup", onEvent, false); textarea.addEventListener("compositionstart", onEvent, false); textarea.addEventListener("compositionend", onEvent, false); + textarea.addEventListener("compositionupdate", onEvent, false); textarea.addEventListener("input", onEvent, false); startTestsInternal(); @@ -121,12 +125,14 @@ function startTests() "input event is (not) handled: " + aDescription); } - function checkCompositionEvents(aStart, aEnd, aInput, aDescription) + function checkCompositionEvents(aStart, aEnd, aUpdate, aInput, aDescription) { is(compositionstartHandled, aStart, "compositionstart event is (not) handled: " + aDescription); is(compositionendHandled, aEnd, "compositionend event is (not) handled: " + aDescription); + is(compositionupdateHandled, aUpdate, + "compositionupdate event is (not) handled: " + aDescription); is(inputHandled, aInput, "input event is (not) handled: " + aDescription); } @@ -150,10 +156,11 @@ function startTests() const nsIDOMWindowUtils = Components.interfaces.nsIDOMWindowUtils; clear(); // start composition - synthesizeComposition(true); - checkCompositionEvents(true, false, false, "compositionstart"); + synthesizeComposition({ type: "compositionstart" }); + checkCompositionEvents(true, false, false, false, "compositionstart"); clear(); // input first character + synthesizeComposition({ type: "compositionupdate", data: "\u3089" }); synthesizeText( { "composition": { "string": "\u3089", @@ -164,7 +171,7 @@ function startTests() }, "caret": { "start": 1, "length": 0 } }); - checkCompositionEvents(false, false, false, "composing"); + checkCompositionEvents(false, false, true, false, "composing"); var queryText = synthesizeQueryTextContent(0, 100); ok(queryText, "query text event result is null"); if (!queryText) { @@ -200,7 +207,7 @@ function startTests() }, "caret": { "start": 1, "length": 0 } }); - checkCompositionEvents(false, false, false, "commit composition"); + checkCompositionEvents(false, false, false, false, "commit composition"); queryText = synthesizeQueryTextContent(0, 100); ok(queryText, "query text event result is null after commit"); if (!queryText) { @@ -228,14 +235,15 @@ function startTests() "query selected text event returns wrong selected text after commit"); clear(); // end composition - synthesizeComposition(false); - checkCompositionEvents(false, true, true, "compositionend"); + synthesizeComposition({ type: "compositionend", data: "\u3089" }); + checkCompositionEvents(false, true, false, true, "compositionend"); } textarea.removeEventListener("keydown", onEvent, false); textarea.removeEventListener("keypress", onEvent, false); textarea.removeEventListener("keyup", onEvent, false); textarea.removeEventListener("compositionstart", onEvent, false); + textarea.removeEventListener("compositionupdate", onEvent, false); textarea.removeEventListener("compositionend", onEvent, false); textarea.removeEventListener("input", onEvent, false); diff --git a/widget/tests/window_composition_text_querycontent.xul b/widget/tests/window_composition_text_querycontent.xul index 01b564321c27..572e1301ac76 100644 --- a/widget/tests/window_composition_text_querycontent.xul +++ b/widget/tests/window_composition_text_querycontent.xul @@ -154,9 +154,10 @@ function runUndoRedoTest() textarea.focus(); // start composition - synthesizeComposition(true); + synthesizeComposition({ type: "compositionstart" }); // input raw characters + synthesizeComposition({ type: "compositionupdate", data: "\u306D" }); synthesizeText( { "composition": { "string": "\u306D", @@ -168,6 +169,7 @@ function runUndoRedoTest() "caret": { "start": 1, "length": 0 } }); + synthesizeComposition({ type: "compositionupdate", data: "\u306D\u3053" }); synthesizeText( { "composition": { "string": "\u306D\u3053", @@ -180,6 +182,7 @@ function runUndoRedoTest() }); // convert + synthesizeComposition({ type: "compositionupdate", data: "\u732B" }); synthesizeText( { "composition": { "string": "\u732B", @@ -205,12 +208,13 @@ function runUndoRedoTest() }); // end composition - synthesizeComposition(false); + synthesizeComposition({ type: "compositionend", data: "\u732B" }); // start composition - synthesizeComposition(true); + synthesizeComposition({ type: "compositionstart" }); // input raw characters + synthesizeComposition({ type: "compositionupdate", data: "\u307E" }); synthesizeText( { "composition": { "string": "\u307E", @@ -223,6 +227,7 @@ function runUndoRedoTest() }); // cancel the composition + synthesizeComposition({ type: "compositionupdate", data: "" }); synthesizeText( { "composition": { "string": "", @@ -235,12 +240,13 @@ function runUndoRedoTest() }); // end composition - synthesizeComposition(false); + synthesizeComposition({ type: "compositionend", data: "" }); // start composition - synthesizeComposition(true); + synthesizeComposition({ type: "compositionstart" }); // input raw characters + synthesizeComposition({ type: "compositionupdate", data: "\u3080" }); synthesizeText( { "composition": { "string": "\u3080", @@ -252,6 +258,7 @@ function runUndoRedoTest() "caret": { "start": 1, "length": 0 } }); + synthesizeComposition({ type: "compositionupdate", data: "\u3080\u3059" }); synthesizeText( { "composition": { "string": "\u3080\u3059", @@ -263,6 +270,8 @@ function runUndoRedoTest() "caret": { "start": 2, "length": 0 } }); + synthesizeComposition({ type: "compositionupdate", + data: "\u3080\u3059\u3081" }); synthesizeText( { "composition": { "string": "\u3080\u3059\u3081", @@ -275,6 +284,7 @@ function runUndoRedoTest() }); // convert + synthesizeComposition({ type: "compositionupdate", data: "\u5A18" }); synthesizeText( { "composition": { "string": "\u5A18", @@ -300,7 +310,7 @@ function runUndoRedoTest() }); // end composition - synthesizeComposition(false); + synthesizeComposition({ type: "compositionend", data: "\u5A18" }); synthesizeKey(" ", {}); synthesizeKey("m", {}); @@ -336,9 +346,10 @@ function runUndoRedoTest() synthesizeKey(" ", {}); // start composition - synthesizeComposition(true); + synthesizeComposition({ type: "compositionstart" }); // input raw characters + synthesizeComposition({ type: "compositionupdate", data: "\u3088" }); synthesizeText( { "composition": { "string": "\u3088", @@ -350,6 +361,7 @@ function runUndoRedoTest() "caret": { "start": 1, "length": 0 } }); + synthesizeComposition({ type: "compositionupdate", data: "\u3088\u3046" }); synthesizeText( { "composition": { "string": "\u3088\u3046", @@ -361,6 +373,8 @@ function runUndoRedoTest() "caret": { "start": 2, "length": 0 } }); + synthesizeComposition({ type: "compositionupdate", + data: "\u3088\u3046\u304b" }); synthesizeText( { "composition": { "string": "\u3088\u3046\u304b", @@ -372,6 +386,8 @@ function runUndoRedoTest() "caret": { "start": 3, "length": 0 } }); + synthesizeComposition({ type: "compositionupdate", + data: "\u3088\u3046\u304b\u3044" }); synthesizeText( { "composition": { "string": "\u3088\u3046\u304b\u3044", @@ -384,6 +400,7 @@ function runUndoRedoTest() }); // convert + synthesizeComposition({ type: "compositionupdate", data: "\u5996\u602a" }); synthesizeText( { "composition": { "string": "\u5996\u602a", @@ -408,7 +425,7 @@ function runUndoRedoTest() }); // end composition - synthesizeComposition(false); + synthesizeComposition({ type: "compositionend", data: "\u5996\u602a" }); synthesizeKey("VK_BACK_SPACE", {}); synthesizeKey("VK_BACK_SPACE", {}); @@ -591,9 +608,10 @@ function runCompositionTest() caretRects[0] = caretRect; // start composition - synthesizeComposition(true); + synthesizeComposition({ type: "compositionstart" }); // input first character + synthesizeComposition({ type: "compositionupdate", data: "\u3089" }); synthesizeText( { "composition": { "string": "\u3089", @@ -618,6 +636,7 @@ function runCompositionTest() caretRects[1] = caretRect; // input second character + synthesizeComposition({ type: "compositionupdate", data: "\u3089\u30FC" }); synthesizeText( { "composition": { "string": "\u3089\u30FC", @@ -651,6 +670,8 @@ function runCompositionTest() "runCompositionTest: caret width is wrong (#1-2)"); // input third character + synthesizeComposition({ type: "compositionupdate", + data: "\u3089\u30FC\u3081" }); synthesizeText( { "composition": { "string": "\u3089\u30FC\u3081", @@ -751,6 +772,8 @@ function runCompositionTest() is(caretRect.height, caretRects[1].height, "runCompositionTest: caret rects are different (#1-3-2, height)"); + synthesizeComposition({ type: "compositionupdate", + data: "\u3089\u30FC\u3081\u3093" }); synthesizeText( { "composition": { "string": "\u3089\u30FC\u3081\u3093", @@ -769,6 +792,8 @@ function runCompositionTest() // backspace + synthesizeComposition({ type: "compositionupdate", + data: "\u3089\u30FC\u3081" }); synthesizeText( { "composition": { "string": "\u3089\u30FC\u3081", @@ -786,6 +811,8 @@ function runCompositionTest() } // re-input + synthesizeComposition({ type: "compositionupdate", + data: "\u3089\u30FC\u3081\u3093" }); synthesizeText( { "composition": { "string": "\u3089\u30FC\u3081\u3093", @@ -802,6 +829,8 @@ function runCompositionTest() return; } + synthesizeComposition({ type: "compositionupdate", + data: "\u3089\u30FC\u3081\u3093\u3055" }); synthesizeText( { "composition": { "string": "\u3089\u30FC\u3081\u3093\u3055", @@ -818,6 +847,8 @@ function runCompositionTest() return; } + synthesizeComposition({ type: "compositionupdate", + data: "\u3089\u30FC\u3081\u3093\u3055\u3044" }); synthesizeText( { "composition": { "string": "\u3089\u30FC\u3081\u3093\u3055\u3044", @@ -834,6 +865,8 @@ function runCompositionTest() return; } + synthesizeComposition({ type: "compositionupdate", + data: "\u3089\u30FC\u3081\u3093\u3055\u3044\u3053" }); synthesizeText( { "composition": { "string": "\u3089\u30FC\u3081\u3093\u3055\u3044\u3053", @@ -850,6 +883,8 @@ function runCompositionTest() return; } + synthesizeComposition({ type: "compositionupdate", + data: "\u3089\u30FC\u3081\u3093\u3055\u3044\u3053\u3046" }); synthesizeText( { "composition": { "string": "\u3089\u30FC\u3081\u3093\u3055\u3044\u3053\u3046", @@ -868,6 +903,8 @@ function runCompositionTest() } // convert + synthesizeComposition({ type: "compositionupdate", + data: "\u30E9\u30FC\u30E1\u30F3\u6700\u9AD8" }); synthesizeText( { "composition": { "string": "\u30E9\u30FC\u30E1\u30F3\u6700\u9AD8", @@ -910,6 +947,8 @@ function runCompositionTest() } // reset clauses + synthesizeComposition({ type: "compositionupdate", + data: "\u30E9\u30FC\u30E1\u30F3\u3055\u884C\u3053\u3046" }); synthesizeText( { "composition": { "string": "\u30E9\u30FC\u30E1\u30F3\u3055\u884C\u3053\u3046", @@ -958,7 +997,8 @@ function runCompositionTest() return; } - synthesizeComposition(false); + synthesizeComposition({ type: "compositionend", + data: "\u30E9\u30FC\u30E1\u30F3\u3055\u884C\u3053\u3046" }); var textRect3 = synthesizeQueryTextRect(0, 1); var textRect4 = synthesizeQueryTextRect(1, 1); @@ -974,9 +1014,10 @@ function runCompositionTest() checkRect(textRect4, textRect2, "runCompositionTest: textRect #1-13-2"); // restart composition - synthesizeComposition(true); + synthesizeComposition({ type: "compositionstart" }); // input characters + synthesizeComposition({ type: "compositionupdate", data: "\u3057" }); synthesizeText( { "composition": { "string": "\u3057", @@ -994,6 +1035,7 @@ function runCompositionTest() return; } + synthesizeComposition({ type: "compositionupdate", data: "\u3058" }); synthesizeText( { "composition": { "string": "\u3058", @@ -1011,6 +1053,7 @@ function runCompositionTest() return; } + synthesizeComposition({ type: "compositionupdate", data: "\u3058\u3087" }); synthesizeText( { "composition": { "string": "\u3058\u3087", @@ -1028,6 +1071,8 @@ function runCompositionTest() return; } + synthesizeComposition({ type: "compositionupdate", + data: "\u3058\u3087\u3046" }); synthesizeText( { "composition": { "string": "\u3058\u3087\u3046", @@ -1063,7 +1108,7 @@ function runCompositionTest() return; } - synthesizeComposition(false); + synthesizeComposition({ type: "compositionend", data: "\u3058\u3087\u3046" }); // set selection var selectionSetTest = synthesizeSelectionSet(4, 7, false); @@ -1074,8 +1119,9 @@ function runCompositionTest() } // start composition with selection - synthesizeComposition(true); + synthesizeComposition({ type: "compositionstart" }); + synthesizeComposition({ type: "compositionupdate", data: "\u304A" }); synthesizeText( { "composition": { "string": "\u304A", @@ -1094,6 +1140,7 @@ function runCompositionTest() } // remove the composition string + synthesizeComposition({ type: "compositionupdate", data: "" }); synthesizeText( { "composition": { "string": "", @@ -1112,6 +1159,7 @@ function runCompositionTest() } // re-input the composition string + synthesizeComposition({ type: "compositionupdate", data: "\u3046" }); synthesizeText( { "composition": { "string": "\u3046", @@ -1130,6 +1178,7 @@ function runCompositionTest() } // cancel the composition + synthesizeComposition({ type: "compositionupdate", data: "" }); synthesizeText( { "composition": { "string": "", @@ -1141,7 +1190,7 @@ function runCompositionTest() "caret": { "start": 0, "length": 0 } }); - synthesizeComposition(false); + synthesizeComposition({ type: "compositionend", data: "" }); if (!checkContent("\u30E9\u30FC\u30E1\u30F3", "runCompositionTest", "#3-5") || @@ -1277,9 +1326,11 @@ function runTestOnAnotherContext(aPanelOrFrame, aFocusedEditor, aTestName) ": the editor rect coordinates are wrong"); // start composition - synthesizeComposition(true); + synthesizeComposition({ type: "compositionstart" }); // input characters + synthesizeComposition({ type: "compositionupdate", + data: "\u3078\u3093\u3057\u3093" }); synthesizeText( { "composition": { "string": "\u3078\u3093\u3057\u3093", @@ -1297,6 +1348,7 @@ function runTestOnAnotherContext(aPanelOrFrame, aFocusedEditor, aTestName) } // convert them #1 + synthesizeComposition({ type: "compositionupdate", data: "\u8FD4\u4FE1" }); synthesizeText( { "composition": { "string": "\u8FD4\u4FE1", @@ -1315,6 +1367,7 @@ function runTestOnAnotherContext(aPanelOrFrame, aFocusedEditor, aTestName) } // convert them #2 + synthesizeComposition({ type: "compositionupdate", data: "\u5909\u8EAB" }); synthesizeText( { "composition": { "string": "\u5909\u8EAB", @@ -1349,7 +1402,7 @@ function runTestOnAnotherContext(aPanelOrFrame, aFocusedEditor, aTestName) return; } - synthesizeComposition(false); + synthesizeComposition({ type: "compositionend", data: "\u5909\u8EAB" }); is(aFocusedEditor.value, "\u5909\u8EAB", aTestName + ": composition isn't in the focused editor"); @@ -1431,9 +1484,10 @@ function runMaxLengthTest() var kDesc ="runMaxLengthTest"; // start composition - synthesizeComposition(true); + synthesizeComposition({ type: "compositionstart" }); // input first character + synthesizeComposition({ type: "compositionupdate", data: "\u3089" }); synthesizeText( { "composition": { "string": "\u3089", @@ -1451,6 +1505,7 @@ function runMaxLengthTest() } // input second character + synthesizeComposition({ type: "compositionupdate", data: "\u3089\u30FC" }); synthesizeText( { "composition": { "string": "\u3089\u30FC", @@ -1468,6 +1523,8 @@ function runMaxLengthTest() } // input third character + synthesizeComposition({ type: "compositionupdate", + data: "\u3089\u30FC\u3081" }); synthesizeText( { "composition": { "string": "\u3089\u30FC\u3081", @@ -1485,6 +1542,8 @@ function runMaxLengthTest() } // input fourth character + synthesizeComposition({ type: "compositionupdate", + data: "\u3089\u30FC\u3081\u3093" }); synthesizeText( { "composition": { "string": "\u3089\u30FC\u3081\u3093", @@ -1503,6 +1562,8 @@ function runMaxLengthTest() // backspace + synthesizeComposition({ type: "compositionupdate", + data: "\u3089\u30FC\u3081" }); synthesizeText( { "composition": { "string": "\u3089\u30FC\u3081", @@ -1520,6 +1581,8 @@ function runMaxLengthTest() } // re-input + synthesizeComposition({ type: "compositionupdate", + data: "\u3089\u30FC\u3081\u3093" }); synthesizeText( { "composition": { "string": "\u3089\u30FC\u3081\u3093", @@ -1536,6 +1599,8 @@ function runMaxLengthTest() return; } + synthesizeComposition({ type: "compositionupdate", + data: "\u3089\u30FC\u3081\u3093\u3055" }); synthesizeText( { "composition": { "string": "\u3089\u30FC\u3081\u3093\u3055", @@ -1552,6 +1617,8 @@ function runMaxLengthTest() return; } + synthesizeComposition({ type: "compositionupdate", + data: "\u3089\u30FC\u3081\u3093\u3055\u3044" }); synthesizeText( { "composition": { "string": "\u3089\u30FC\u3081\u3093\u3055\u3044", @@ -1568,6 +1635,8 @@ function runMaxLengthTest() return; } + synthesizeComposition({ type: "compositionupdate", + data: "\u3089\u30FC\u3081\u3093\u3055\u3044\u3053" }); synthesizeText( { "composition": { "string": "\u3089\u30FC\u3081\u3093\u3055\u3044\u3053", @@ -1585,6 +1654,8 @@ function runMaxLengthTest() return; } + synthesizeComposition({ type: "compositionupdate", + data: "\u3089\u30FC\u3081\u3093\u3055\u3044\u3053\u3046" }); synthesizeText( { "composition": { "string": "\u3089\u30FC\u3081\u3093\u3055\u3044\u3053\u3046", @@ -1603,6 +1674,8 @@ function runMaxLengthTest() } // convert + synthesizeComposition({ type: "compositionupdate", + data: "\u30E9\u30FC\u30E1\u30F3\u6700\u9AD8" }); synthesizeText( { "composition": { "string": "\u30E9\u30FC\u30E1\u30F3\u6700\u9AD8", @@ -1639,12 +1712,14 @@ function runMaxLengthTest() return; } - synthesizeComposition(false); + synthesizeComposition({ type: "compositionend", + data: "\u30E9\u30FC\u30E1\u30F3\u6700\u9AD8" }); // restart composition - synthesizeComposition(true); + synthesizeComposition({ type: "compositionstart" }); // input characters + synthesizeComposition({ type: "compositionupdate", data: "\u3057" }); synthesizeText( { "composition": { "string": "\u3057", @@ -1662,6 +1737,7 @@ function runMaxLengthTest() } // commit the composition string + synthesizeComposition({ type: "compositionupdate", data: "\u3058" }); synthesizeText( { "composition": { "string": "\u3058", @@ -1678,7 +1754,7 @@ function runMaxLengthTest() return; } - synthesizeComposition(false); + synthesizeComposition({ type: "compositionend", data: "\u3058" }); // Undo synthesizeKey("Z", {accelKey: true});