Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(675)

Side by Side Diff: chrome/browser/resources/chromeos/chromevox/cvox2/background/background.extjs

Issue 586103004: Implement ChromeVox next/previous line, link, and heading. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkcr
Patch Set: Address comments. Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698