diff --git a/widget/tests/test_imestate.html b/widget/tests/test_imestate.html index 7ca3833a12c2..377a505e9a81 100644 --- a/widget/tests/test_imestate.html +++ b/widget/tests/test_imestate.html @@ -1356,7 +1356,8 @@ function runTestPasswordFieldOnDialog() } } -function runBug580388Tests(aCallback) +// Bug 580388 and bug 808287 +function runEditorReframeTests(aCallback) { if (document.activeElement) { document.activeElement.blur(); @@ -1394,18 +1395,36 @@ function runBug580388Tests(aCallback) sendChar("a"); hitEventLoop(function () { - ok(mozIMEFocusOut > 0, "runBug580388Tests(): IME focus must be lost at reframing"); - ok(mozIMEFocusIn > 0, "runBug580388Tests(): IME focus must be restored after reframing"); - ok(IMEHasFocus, "runBug580388Tests(): IME must have focus after reframing"); + ok(mozIMEFocusOut > 0, "runEditorReframeTests(): IME focus must be lost at reframing"); + ok(mozIMEFocusIn > 0, "runEditorReframeTests(): IME focus must be restored after reframing"); + ok(IMEHasFocus, "runEditorReframeTests(): IME must have focus after reframing"); - document.removeEventListener("MozIMEFocusIn", handler, true); - document.removeEventListener("MozIMEFocusOut", handler, true); - input.removeEventListener("input", onInput, true); + var focusQueryHandler = function(aEvent) { + // Perform a style change and query during focus to trigger reframing + input.style.overflow = "visible"; + synthesizeQuerySelectedText(); + } + document.addEventListener("MozIMEFocusIn", focusQueryHandler, true); + mozIMEFocusIn = mozIMEFocusOut = 0; - input.style.overflow = "visible"; - input.value = ""; + input.blur(); + input.focus(); + sendChar("a"); - hitEventLoop(aCallback, 20); + hitEventLoop(function() { + ok(IMEHasFocus, "runEditorReframeTests(): IME must have focus after reframing during focus"); + ok(mozIMEFocusOut == mozIMEFocusIn, "runEditorReframeTests(): IME focus/blur (" + mozIMEFocusIn + "/" + mozIMEFocusOut + ") must match after reframing during focus"); + + document.removeEventListener("MozIMEFocusIn", focusQueryHandler, true); + document.removeEventListener("MozIMEFocusIn", handler, true); + document.removeEventListener("MozIMEFocusOut", handler, true); + input.removeEventListener("input", onInput, true); + + input.style.overflow = "visible"; + input.value = ""; + + hitEventLoop(aCallback, 20); + }, 20); }, 20); } @@ -1461,7 +1480,7 @@ function runTests() //runTestPasswordFieldOnDialog(); // Asynchronous tests - runBug580388Tests(function () { + runEditorReframeTests(function () { // This will call onFinish(), so, this test must be the last. runEditableSubframeTests(); });