Allow only one bookmark to be added for multiple fast starring
[chromium-blink-merge.git] / chrome / browser / resources / chromeos / chromevox / testing / mock_tts.js
blob3f32d0ca400195ba699af41f9c70f0463edc5d2d
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 /**
6 * Mock tts class.
7 * @constructor
8 * @extends {cvox.TtsInterface}
9 */
10 var MockTts = function() {
13 MockTts.prototype = {
14 /**
15 * A list of predicate, start, and end callbacks for a pending expectation.
16 * @type {!Array<{{predicate: function(string) : boolean,
17 * startCallback: function() : void,
18 * endCallback: function() : void}>}
19 * @private
21 expectations_: [],
23 /**
24 * A list of strings stored whenever there are no expectations.
25 * @type {!Array<string}
26 * @private
28 idleUtterances_: [],
30 /** @override */
31 speak: function(textString, queueMode, properties) {
32 this.process_(textString, false, properties);
35 /**
36 * Adds an expectation for the given string to be spoken. If satisfied,
37 * |opt_callback| is called.
38 * @param {string} expectedText
39 * @param {function() : void=} opt_callback
40 * @param {boolean=} opt_exact Expect an exact match; defaults to false.
42 expectSpeech: function(expectedText, opt_callback, opt_exact) {
43 var expectation = {};
44 expectation.endCallback = opt_callback;
45 this.addExpectation_(expectedText, expectation, opt_exact);
48 /**
49 * Adds an expectation for the given string to be spoken after |opt_callback|
50 * executes.
51 * @param {string} expectedText
52 * @param {function() : void=} opt_callback
53 * @param {boolean=} opt_exact Expect an exact match; defaults to false.
55 expectSpeechAfter: function(expectedText, opt_callback, opt_exact) {
56 var expectation = {};
57 if (this.expectations_.length == 0 && opt_callback)
58 opt_callback();
59 else
60 expectation.startCallback = opt_callback;
61 this.addExpectation_(expectedText, expectation, opt_exact);
64 /**
65 * Finishes expectations and calls {@code callback} afterwards.
66 * @param {Function} callback
68 finishExpectations: function(callback) {
69 this.expectSpeechAfter('', callback);
72 /**
73 * @private
74 * @param {string} expectedText Text expected spoken.
75 * @param {{startCallback: function() : void,
76 * endCallback: function() : void}=} opt_expectation
77 * @param {boolean=} opt_exact Expects an exact match.
79 addExpectation_: function(expectedText, opt_expectation, opt_exact) {
80 var expectation = opt_expectation ? opt_expectation : {};
82 expectation.predicate = function(actualText) {
83 if (opt_exact)
84 return actualText === expectedText;
85 return actualText.indexOf(expectedText) != -1;
88 this.expectations_.push(expectation);
90 // Process any idleUtterances.
91 this.idleUtterances_.forEach(function(utterance) {
92 this.process_(utterance.text, true, utterance.properties);
93 }.bind(this));
96 /**
97 * @param {string} textString Utterance to match against callbacks.
98 * @param {boolean=} opt_manual True if called outside of tts.speak.
99 * @param {!Object=} opt_properties
100 * @private
102 process_: function(textString, opt_manual, opt_properties) {
103 var utterance = {text: textString, properties: opt_properties};
104 if (this.expectations_.length == 0) {
105 if (!opt_manual) {
106 this.idleUtterances_.push(utterance);
108 return;
111 var allUtterances = this.idleUtterances_.concat([utterance]);
112 var targetExpectation = this.expectations_.shift();
113 allUtterances = allUtterances.filter(function(u) {
114 return targetExpectation.predicate(u.text);
116 if (allUtterances.length > 0) {
117 var matchingProperties = allUtterances[0].properties;
118 this.idleUtterances_.length = 0;
119 if (targetExpectation.endCallback)
120 targetExpectation.endCallback();
121 if (matchingProperties && matchingProperties.endCallback) {
122 matchingProperties.endCallback();
124 var nextExpectation = this.expectations_[0];
125 if (nextExpectation && nextExpectation.startCallback)
126 nextExpectation.startCallback();
127 } else {
128 this.expectations_.unshift(targetExpectation);