blob: a16e300854e64bd3e6641bf6c1b617a4b0e713f6 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview Dummy implementation of TTS for testing.
*
*/
goog.provide('cvox.TestTts');
goog.require('cvox.AbstractTts');
goog.require('cvox.DomUtil');
goog.require('cvox.HostFactory');
/**
* @constructor
* @extends {cvox.AbstractTts}
*/
cvox.TestTts = function() {
cvox.AbstractTts.call(this);
this.utterances_ = [];
};
goog.inherits(cvox.TestTts, cvox.AbstractTts);
/**
* @type {string}
* @private
*/
cvox.TestTts.prototype.sentinelText_ = '@@@STOP@@@';
/**
* @override
*/
cvox.TestTts.prototype.speak = function(text, queueMode, opt_properties) {
this.utterances_.push({text: text,
queueMode: queueMode,
properties: opt_properties});
if (opt_properties && opt_properties['endCallback'] != undefined) {
var len = this.utterances_.length;
// 'After' is a sentinel value in the tests that tells TTS to stop and
// ends callbacks being called.
if (this.utterances_[len - 1].text !=
this.sentinelText_) {
opt_properties['endCallback']();
}
}
};
/**
* Creates a sentinel element that indicates when TTS should stop and callbacks
* should stop being called.
* @return {Element} The sentinel element.
*/
cvox.TestTts.prototype.createSentinel = function() {
var sentinel = document.createElement('div');
sentinel.textContent = this.sentinelText_;
return sentinel;
};
/**
* All calls to tts.speak are saved in an array of utterances.
* Clear any utterances that were saved up to this point.
*/
cvox.TestTts.prototype.clearUtterances = function() {
this.utterances_.length = 0;
};
/**
* Return a string of what was spoken by tts.speak().
* @return {string} A single string containing all utterances spoken
* since initialization or the last call to clearUtterances,
* concatenated together with all whitespace collapsed to single
* spaces.
*/
cvox.TestTts.prototype.getUtterancesAsString = function() {
return cvox.DomUtil.collapseWhitespace(this.getUtteranceList().join(' '));
};
/**
* Processes the utterances spoken the same way the speech queue does,
* as if they were all generated one after another, with no delay between
* them, and returns a list of strings that would be output.
*
* For example, if two strings were spoken with a queue mode of FLUSH,
* only the second string will be returned.
* @return {Array.<string>} A list of strings representing the speech output.
*/
cvox.TestTts.prototype.getSpeechQueueOutput = function() {
var queue = [];
for (var i = 0; i < this.utterances_.length; i++) {
var utterance = this.utterances_[i];
switch (utterance.queueMode) {
case cvox.AbstractTts.QUEUE_MODE_FLUSH:
queue = [];
break;
case cvox.AbstractTts.QUEUE_MODE_QUEUE:
break;
case cvox.AbstractTts.QUEUE_MODE_CATEGORY_FLUSH:
queue = queue.filter(function(u) {
return (utterance.properties && utterance.properties.category) &&
(!u.properties ||
u.properties.category != utterance.properties.category);
});
break;
}
queue.push(utterance);
}
return queue.map(function(u) { return u.text; });
};
/**
* Return a list of strings of what was spoken by tts.speak().
* @return {Array.<string>} A list of all utterances spoken since
* initialization or the last call to clearUtterances.
*/
cvox.TestTts.prototype.getUtteranceList = function() {
var result = [];
for (var i = 0; i < this.utterances_.length; i++) {
result.push(this.utterances_[i].text);
}
return result;
};
/**
* Return a list of strings of what was spoken by tts.speak().
* @return {Array.<{text: string, queueMode: cvox.QueueMode}>}
* A list of info about all utterances spoken since
* initialization or the last call to clearUtterances.
*/
cvox.TestTts.prototype.getUtteranceInfoList = function() {
return this.utterances_;
};
/** @override */
cvox.HostFactory.ttsConstructor = cvox.TestTts;