| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Include test fixture. | 5 // Include test fixture. |
| 6 GEN_INCLUDE(['../../testing/chromevox_e2e_test_base.js']); | 6 GEN_INCLUDE(['../../testing/chromevox_e2e_test_base.js']); |
| 7 | 7 |
| 8 /** | 8 /** |
| 9 * Test fixture for cvox2.Background. | 9 * Test fixture for cvox2.Background. |
| 10 * @constructor | 10 * @constructor |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 | 42 |
| 43 /** | 43 /** |
| 44 * Mock tts class. | 44 * Mock tts class. |
| 45 * @constructor | 45 * @constructor |
| 46 * @extends {cvox.TtsInterface} | 46 * @extends {cvox.TtsInterface} |
| 47 */ | 47 */ |
| 48 var MockTts = function() { | 48 var MockTts = function() { |
| 49 }; | 49 }; |
| 50 | 50 |
| 51 MockTts.prototype = { | 51 MockTts.prototype = { |
| 52 /** Tracks all spoken text. @type {!Array.<string>} */ | 52 /** |
| 53 utterances: [], | 53 * A list of predicate callbacks. |
| 54 * @type {!Array.<function(string) : boolean>} |
| 55 * @private |
| 56 */ |
| 57 callbacks_: [], |
| 58 |
| 59 /** |
| 60 * A list of strings stored whenever there are no expectations. |
| 61 * @type {!Array.<string} |
| 62 * @private |
| 63 */ |
| 64 idleUtterances_: [], |
| 54 | 65 |
| 55 /** @override */ | 66 /** @override */ |
| 56 speak: function(textString, queueMode, properties) { | 67 speak: function(textString, queueMode, properties) { |
| 57 this.utterances.push(textString); | 68 this.process_(textString); |
| 58 }, | 69 }, |
| 59 | 70 |
| 60 /** | 71 /** |
| 61 * Checks to see if a string was spoken. | 72 * Adds an expectation for the given string to be spoken. If satisfied, |
| 62 * @param {string} textString The string to check. | 73 * |opt_callback| is called. |
| 63 * @return {boolean} True if the string was spoken (possibly as part of a | 74 * @param {string} expected |
| 64 * larger utterance). | 75 * @param {function() : void=} opt_callback |
| 65 */ | 76 */ |
| 66 checkIfSubstringWasSpoken: function(textString) { | 77 expectSpeech: function(expected, opt_callback) { |
| 67 return this.utterances.some(function(t) { | 78 this.callbacks_.push(function(actual) { |
| 68 return t.indexOf(textString) != -1; | 79 var match = actual.indexOf(expected) != -1; |
| 80 if (opt_callback && match) |
| 81 opt_callback(); |
| 82 return match; |
| 69 }); | 83 }); |
| 70 } | 84 |
| 85 // Process any idleUtterances. |
| 86 this.idleUtterances_.forEach(this.process_, true); |
| 87 }, |
| 88 |
| 89 /** |
| 90 * @param {string} textString Utterance to match against callbacks. |
| 91 * @param {boolean=} opt_manual True if called outside of tts.speak. |
| 92 * @private |
| 93 */ |
| 94 process_: function(textString, opt_manual) { |
| 95 if (this.callbacks_.length == 0) { |
| 96 if (!opt_manual) |
| 97 this.idleUtterances_.push(textString); |
| 98 return; |
| 99 } |
| 100 |
| 101 var allUtterances = this.idleUtterances_.concat([textString]); |
| 102 var targetCallback = this.callbacks_.shift(); |
| 103 if (allUtterances.some(targetCallback)) |
| 104 this.idleUtterances_.length = 0; |
| 105 else |
| 106 this.callbacks_.unshift(targetCallback); |
| 107 }, |
| 71 }; | 108 }; |
| 72 | 109 |
| 73 /** Tests that ChromeVox classic is in this context. */ | 110 /** Tests that ChromeVox classic is in this context. */ |
| 74 SYNC_TEST_F('BackgroundTest', 'ClassicNamespaces', function() { | 111 SYNC_TEST_F('BackgroundTest', 'ClassicNamespaces', function() { |
| 75 assertEquals('object', typeof(cvox)); | 112 assertEquals('object', typeof(cvox)); |
| 76 assertEquals('function', typeof(cvox.ChromeVoxBackground)); | 113 assertEquals('function', typeof(cvox.ChromeVoxBackground)); |
| 77 }); | 114 }); |
| 78 | 115 |
| 79 /** Tests that ChromeVox next is in this context. */ | 116 /** Tests that ChromeVox next is in this context. */ |
| 80 SYNC_TEST_F('BackgroundTest', 'NextNamespaces', function() { | 117 SYNC_TEST_F('BackgroundTest', 'NextNamespaces', function() { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 93 for (var i = 0; i < root.children().length; i++) { | 130 for (var i = 0; i < root.children().length; i++) { |
| 94 var found = findStatusTray(root.children()[i]); | 131 var found = findStatusTray(root.children()[i]); |
| 95 if (found) | 132 if (found) |
| 96 return found; | 133 return found; |
| 97 } | 134 } |
| 98 return null; | 135 return null; |
| 99 } | 136 } |
| 100 | 137 |
| 101 chrome.automation.getDesktop(function(root) { | 138 chrome.automation.getDesktop(function(root) { |
| 102 var testButton = findStatusTray(root); | 139 var testButton = findStatusTray(root); |
| 103 testButton.addEventListener(chrome.automation.EventType.focus, | 140 cvox.ChromeVox.tts.expectSpeech('Status tray', testDone); |
| 104 function(e) { | |
| 105 var result = | |
| 106 cvox.ChromeVox.tts.checkIfSubstringWasSpoken('Status tray'); | |
| 107 testDone([result, '']); | |
| 108 }, | |
| 109 true); | |
| 110 testButton.focus(); | 141 testButton.focus(); |
| 111 }); | 142 }); |
| 112 }); | 143 }); |
| 144 |
| 145 /** Tests feedback once a page loads. */ |
| 146 TEST_F('BackgroundTest', 'InitialFeedback', function() { |
| 147 this.runWithDocument(function() {/*! |
| 148 <p>start |
| 149 <p>end |
| 150 */}, |
| 151 function() { |
| 152 cvox.ChromeVox.tts.expectSpeech('start', function() { |
| 153 cvox2.global.backgroundObj.onGotCommand('nextLine'); |
| 154 }); |
| 155 cvox.ChromeVox.tts.expectSpeech('end', testDone); |
| 156 }.bind(this)); |
| 157 }); |
| OLD | NEW |