Index: chrome/browser/resources/chromeos/chromevox/testing/mock_feedback.js |
diff --git a/chrome/browser/resources/chromeos/chromevox/testing/mock_feedback.js b/chrome/browser/resources/chromeos/chromevox/testing/mock_feedback.js |
index e3578aa0bf7563addbe94540191e5bad33dbeb7c..4c846e8f7f433b8b5d299d7db85a741645380192 100644 |
--- a/chrome/browser/resources/chromeos/chromevox/testing/mock_feedback.js |
+++ b/chrome/browser/resources/chromeos/chromevox/testing/mock_feedback.js |
@@ -3,18 +3,20 @@ |
// found in the LICENSE file. |
/** |
- * @fileoverview This file contains the |MockFeedback| class which is a |
- * combined mock class for speech and braille feedback. A test that uses |
- * this class may add expectations for speech utterances and braille display |
- * content to be output. The |install| method sets appropriate mock classes |
- * as the |cvox.ChromeVox.tts| and |cvox.ChromeVox.braille| objects, |
- * respectively. Output sent to those objects will then be collected in |
- * an internal queue. |
+ * @fileoverview This file contains the |MockFeedback| class which is |
+ * a combined mock class for speech, braille, and earcon feedback. A |
+ * test that uses this class may add expectations for speech |
+ * utterances, braille display content to be output, and earcons |
+ * played (by name). The |install| method sets appropriate mock |
+ * classes as the |cvox.ChromeVox.tts|, |cvox.ChromeVox.braille| and |
+ * |cvox.ChromeVox.earcons| objects, respectively. Output sent to |
+ * those objects will then be collected in an internal queue. |
* |
- * Expectations can be added using the |expectSpeech| and |expectBraille| |
- * methods. These methods take either strings or regular expressions to match |
- * against. Strings must match a full utterance (or display content) exactly, |
- * while a regular expression must match a substring (use anchor operators if |
+ * Expectations can be added using the |expectSpeech|, |
+ * |expectBraille|, and |expectEarcon| methods. These methods take |
+ * either strings or regular expressions to match against. Strings |
+ * must match a full utterance (or display content) exactly, while a |
+ * regular expression must match a substring (use anchor operators if |
* needed). |
* |
* Function calls may be inserted in the stream of expectations using the |
@@ -22,11 +24,11 @@ |
* have been met, and before any further expectations are matched. Callbacks |
* are called in the order they were added to the mock. |
* |
- * The |replay| method starts processing any pending utterances and braille |
- * display content and will try to match expectations as new feedback enters |
- * the queue asynchronously. When all expectations have been met and callbacks |
- * called, the finish callback, if any was provided to the constructor, is |
- * called. |
+ * The |replay| method starts processing any pending utterances, |
+ * braille display content, and earcons and will try to match |
+ * expectations as new feedback enters the queue asynchronously. When |
+ * all expectations have been met and callbacks called, the finish |
+ * callback, if any was provided to the constructor, is called. |
* |
* This mock class is lean, meaning that feedback that doesn't match |
* any expectations is silently ignored. |
@@ -82,6 +84,12 @@ var MockFeedback = function(opt_finishedCallback) { |
*/ |
this.pendingBraille_ = []; |
/** |
+ * Pending earcons. |
+ * @type {Array<{text: string, callback: (function|undefined)}>} |
+ * @private |
+ */ |
+ this.pendingEarcons_ = []; |
+ /** |
* Handle for the timeout set for debug logging. |
* @type {number} |
* @private |
@@ -118,6 +126,17 @@ MockFeedback.prototype = { |
}; |
cvox.ChromeVox.braille = new MockBraille(); |
+ |
+ var MockEarcons = function() {}; |
+ MockEarcons.prototype = { |
+ __proto__: cvox.AbstractEarcons.prototype, |
+ playEarcon: this.addEarcon_.bind(this) |
+ }; |
+ |
+ // cvox.ChromeVox.earcons is a getter that switches between Classic and |
+ // Next; replace it with MockEarcons. |
+ delete cvox.ChromeVox.earcons; |
+ cvox.ChromeVox.earcons = new MockEarcons(); |
}, |
/** |
@@ -197,6 +216,26 @@ MockFeedback.prototype = { |
}, |
/** |
+ * Adds an expectation for a played earcon. |
+ * @param {string} earconName The name of the earcon. |
+ * @return {MockFeedback} |this| for chaining |
+ */ |
+ expectEarcon: function(earconName, opt_props) { |
+ assertFalse(this.replaying_); |
+ this.pendingActions_.push({ |
+ perform: function() { |
+ var match = MockFeedback.matchAndConsume_( |
+ earconName, {}, this.pendingEarcons_); |
+ return !!match; |
+ }.bind(this), |
+ toString: function() { |
+ return 'Earcon \'' + earconName + '\''; |
+ } |
+ }); |
+ return this; |
+ }, |
+ |
+ /** |
* Arranges for a callback to be invoked when all expectations that were |
* added before this call have been met. Callbacks are called in the |
* order they are added. |
@@ -270,6 +309,12 @@ MockFeedback.prototype = { |
this.process_(); |
}, |
+ /** @private */ |
+ addEarcon_: function(earconName) { |
+ this.pendingEarcons_.push({text: earconName}); |
+ this.process_(); |
+ }, |
+ |
/*** @private */ |
process_: function() { |
if (!this.replaying_ || this.inProcess_) |
@@ -324,6 +369,7 @@ MockFeedback.prototype = { |
} |
logPending('speech utterances', this.pendingUtterances_); |
logPending('braille', this.pendingBraille_); |
+ logPending('earcons', this.pendingEarcons_); |
this.logTimeoutId_ = 0; |
}, |
}; |
@@ -338,7 +384,10 @@ MockFeedback.prototype = { |
*/ |
MockFeedback.matchAndConsume_ = function(text, props, pending) { |
for (var i = 0, candidate; candidate = pending[i]; ++i) { |
- var candidateText = candidate.text.toString(); |
+ var candidateText = candidate.text; |
+ if (typeof(candidateText) != 'string') |
+ candidateText = candidateText.toString(); |
+ |
if (text === candidateText || |
(text instanceof RegExp && text.test(candidateText))) { |
var matched = true; |