From 5290341ec1f3d3008beb7db9231c4436c792ef79 Mon Sep 17 00:00:00 2001 From: Eitan Isaacson Date: Mon, 24 Mar 2014 09:29:44 -0700 Subject: [PATCH] Bug 981363 - Wait or cursor to be cleared in tests. Some cleanup and improvements. r=yzen --- accessible/src/jsat/ContentControl.jsm | 11 +++++++---- accessible/tests/mochitest/jsat/jsatcommon.js | 12 +++++++++++- .../mochitest/jsat/test_content_integration.html | 12 ++++++------ 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/accessible/src/jsat/ContentControl.jsm b/accessible/src/jsat/ContentControl.jsm index af654e60f96..950ebc8a3a8 100644 --- a/accessible/src/jsat/ContentControl.jsm +++ b/accessible/src/jsat/ContentControl.jsm @@ -139,8 +139,11 @@ this.ContentControl.prototype = { }, handleClearCursor: function cc_handleClearCursor(aMessage) { - this.sendToChild(this.vc, aMessage); + let forwarded = this.sendToChild(this.vc, aMessage); this.vc.position = null; + if (!forwarded) { + this._contentScope.get().sendAsyncMessage('AccessFu:CursorCleared'); + } }, handleAutoMove: function cc_handleAutoMove(aMessage) { @@ -175,7 +178,7 @@ this.ContentControl.prototype = { // (via ARIA roles, etc.), so we need to generate a click. // Could possibly be made simpler in the future. Maybe core // engine could expose nsCoreUtiles::DispatchMouseEvent()? - let docAcc = Utils.AccRetrieval.getAccessibleFor(content.document); + let docAcc = Utils.AccRetrieval.getAccessibleFor(this.document); let docX = {}, docY = {}, docW = {}, docH = {}; docAcc.getBounds(docX, docY, docW, docH); @@ -188,8 +191,8 @@ this.ContentControl.prototype = { let node = aAccessible.DOMNode || aAccessible.parent.DOMNode; for (let eventType of ['mousedown', 'mouseup']) { - let evt = content.document.createEvent('MouseEvents'); - evt.initMouseEvent(eventType, true, true, content, + let evt = this.document.createEvent('MouseEvents'); + evt.initMouseEvent(eventType, true, true, this.window, x, y, 0, 0, 0, false, false, false, false, 0, null); node.dispatchEvent(evt); } diff --git a/accessible/tests/mochitest/jsat/jsatcommon.js b/accessible/tests/mochitest/jsat/jsatcommon.js index b02b4c01343..3e5c1bb7582 100644 --- a/accessible/tests/mochitest/jsat/jsatcommon.js +++ b/accessible/tests/mochitest/jsat/jsatcommon.js @@ -209,6 +209,7 @@ AccessFuContentTest.prototype = { } aMessageManager.addMessageListener('AccessFu:Present', this); + aMessageManager.addMessageListener('AccessFu:CursorCleared', this); aMessageManager.addMessageListener('AccessFu:Ready', function () { aMessageManager.addMessageListener('AccessFu:ContentStarted', aCallback); aMessageManager.sendAsyncMessage('AccessFu:Start', @@ -249,11 +250,20 @@ AccessFuContentTest.prototype = { } var expected = this.currentPair[1] || {}; + + // |expected| can simply be a name of a message, no more further testing. + if (aMessage.name === expected) { + ok(true, 'Received ' + expected); + this.pump(); + return; + } + var speech = this.extractUtterance(aMessage.json); var android = this.extractAndroid(aMessage.json, expected.android); if ((speech && expected.speak) || (android && expected.android)) { if (expected.speak) { - (SimpleTest[expected.speak_checkFunc] || is)(speech, expected.speak); + (SimpleTest[expected.speak_checkFunc] || is)(speech, expected.speak, + '"' + speech + '" spoken'); } if (expected.android) { diff --git a/accessible/tests/mochitest/jsat/test_content_integration.html b/accessible/tests/mochitest/jsat/test_content_integration.html index 72ca82e69a8..adb71e29221 100644 --- a/accessible/tests/mochitest/jsat/test_content_integration.html +++ b/accessible/tests/mochitest/jsat/test_content_integration.html @@ -96,7 +96,7 @@ speak_checkFunc: 'todo_is' }], - [ContentMessages.clearCursor, null], // Reset cursors + [ContentMessages.clearCursor, 'AccessFu:CursorCleared'], // Moving to the absolute first item from an embedded document // fails. Bug 972035. @@ -115,7 +115,7 @@ }], // Reset cursors - [ContentMessages.clearCursor, null], + [ContentMessages.clearCursor, 'AccessFu:CursorCleared'], // Move cursor with focus in outside document [ContentMessages.simpleMoveNext, { @@ -127,7 +127,7 @@ // Blur button and reset cursor [ContentMessages.focusSelector('button#home', true), null], - [ContentMessages.clearCursor, null], + [ContentMessages.clearCursor, 'AccessFu:CursorCleared'], // Set focus on element outside of embedded frame while // cursor is in frame @@ -143,7 +143,7 @@ // Blur button and reset cursor [ContentMessages.focusSelector('button#home', true), null], - [ContentMessages.clearCursor, null], + [ContentMessages.clearCursor, 'AccessFu:CursorCleared'], // XXX: Set focus on iframe itself. // XXX: Set focus on element in iframe when cursor is outside of it. @@ -163,7 +163,7 @@ speak: 'wow heading level 1 such app' }], - [ContentMessages.clearCursor, null], + [ContentMessages.clearCursor, 'AccessFu:CursorCleared'], // Open dialog in outer doc, while cursor is in inner frame [ContentMessages.simpleMoveNext, { @@ -181,7 +181,7 @@ speak: 'many option not checked check button such app' }], - [ContentMessages.clearCursor, null], + [ContentMessages.clearCursor, 'AccessFu:CursorCleared'], // Open dialog, then focus on something when closing [ContentMessages.simpleMoveNext, {