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

Unified Diff: chrome/browser/ui/webui/app_list/start_page_browsertest.js

Issue 159973004: Adds speech recognition test case to AppListStartPageWebUITest. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 6 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/app_list/speech_manager.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/app_list/start_page_browsertest.js
diff --git a/chrome/browser/ui/webui/app_list/start_page_browsertest.js b/chrome/browser/ui/webui/app_list/start_page_browsertest.js
index 1fb89fb4723978ff38cc74ca474152de0bb06ff6..93bee2b845839339f5d80e3193c63d749ccbdecb 100644
--- a/chrome/browser/ui/webui/app_list/start_page_browsertest.js
+++ b/chrome/browser/ui/webui/app_list/start_page_browsertest.js
@@ -9,6 +9,24 @@
**/
function AppListStartPageWebUITest() {}
+/**
+ * Mock of audioContext.
+ * @constructor
+ */
+function mockAudioContext() {
+ this.sampleRate = 44100; /* some dummy number */
+}
+
+mockAudioContext.prototype = {
+ createMediaStreamSource: function(stream) {
+ return {connect: function(audioProc) {}};
+ },
+ createScriptProcessor: function(bufSize, channels, channels) {
+ return {connect: function(destination) {},
+ disconnect: function() {}};
+ }
+};
+
AppListStartPageWebUITest.prototype = {
__proto__: testing.Test.prototype,
@@ -31,18 +49,85 @@ AppListStartPageWebUITest.prototype = {
'appId': 'app_id_2',
'textTitle': 'app 2',
'iconUrl': 'icon_url_2'
- },
+ }
],
+ /**
+ * Placeholder for mock speech recognizer.
+ */
+ speechRecognizer: null,
+
+ /**
+ * Sends the speech recognition result.
+ *
+ * @param {string} result The testing result.
+ * @param {boolean} isFinal Whether the result is final or not.
+ */
+ sendSpeechResult: function(result, isFinal) {
+ var speechEvent = new Event('test');
+ // Each result contains a list of alternatives and 'isFinal' flag.
+ var speechResult = [{transcript: result}];
+ speechResult.isFinal = isFinal;
+ speechEvent.results = [speechResult];
+ this.speechRecognizer.onresult(speechEvent);
+ },
+
+ /**
+ * Registers the webkitSpeechRecognition mock for test.
+ * @private
+ */
+ registerMockSpeechRecognition_: function() {
+ var owner = this;
+ function mockSpeechRecognition() {
+ this.inSpeech_ = false;
+ owner.speechRecognizer = this;
+ }
+
+ mockSpeechRecognition.prototype = {
+ start: function() {
+ this.onstart();
+ },
+
+ abort: function() {
+ if (this.inSpeech_)
+ this.onspeechend();
+ this.onerror(new Error());
+ this.onend();
+ }
+ },
+
+ window.webkitSpeechRecognition = mockSpeechRecognition;
+ },
+
+ /**
+ * Mock of webkitGetUserMedia for start page.
+ *
+ * @private
+ * @param {object} constraint The constraint parameter.
+ * @param {Function} success The success callback.
+ * @param {Function} error The error callback.
+ */
+ mockGetUserMedia_: function(constraint, success, error) {
+ assertTrue(constraint.audio);
+ assertNotEquals(null, error, 'error callback must not be null');
+ success();
+ },
+
/** @override */
preLoad: function() {
- this.makeAndRegisterMockHandler(
- ['initialize', 'launchApp', 'setSpeechRecognitionState']);
+ this.makeAndRegisterMockHandler(['initialize',
+ 'launchApp',
+ 'setSpeechRecognitionState',
+ 'speechResult']);
this.mockHandler.stubs().initialize().will(callFunction(function() {
appList.startPage.setRecommendedApps(this.recommendedApps_);
}.bind(this)));
this.mockHandler.stubs().launchApp(ANYTHING);
this.mockHandler.expects(once()).setSpeechRecognitionState('READY');
+
+ this.registerMockSpeechRecognition_();
+ window.webkitAudioContext = mockAudioContext;
+ navigator.webkitGetUserMedia = this.mockGetUserMedia_.bind(this);
}
};
@@ -65,3 +150,47 @@ TEST_F('AppListStartPageWebUITest', 'ClickToLaunch', function() {
cr.dispatchSimpleEvent(recommendedApp.children[i], 'click');
}
});
+
+TEST_F('AppListStartPageWebUITest', 'SpeechRecognitionState', function() {
+ appList.startPage.onAppListShown();
+ this.mockHandler.expects(once()).setSpeechRecognitionState('RECOGNIZING');
+ appList.startPage.toggleSpeechRecognition();
+ Mock4JS.verifyAllMocks();
+ Mock4JS.clearMocksToVerify();
+
+ this.mockHandler.expects(once()).setSpeechRecognitionState('READY');
+ appList.startPage.toggleSpeechRecognition();
+ Mock4JS.verifyAllMocks();
+ Mock4JS.clearMocksToVerify();
+
+ this.mockHandler.expects(once()).setSpeechRecognitionState('RECOGNIZING');
+ appList.startPage.toggleSpeechRecognition();
+ Mock4JS.verifyAllMocks();
+ Mock4JS.clearMocksToVerify();
+
+ this.mockHandler.expects(once()).setSpeechRecognitionState('STOPPING');
+ this.mockHandler.expects(once()).setSpeechRecognitionState('READY');
+ appList.startPage.onAppListHidden();
+});
+
+TEST_F('AppListStartPageWebUITest', 'SpeechRecognition', function() {
+ appList.startPage.onAppListShown();
+ this.mockHandler.expects(once()).setSpeechRecognitionState('RECOGNIZING');
+ appList.startPage.toggleSpeechRecognition();
+ Mock4JS.verifyAllMocks();
+ Mock4JS.clearMocksToVerify();
+
+ this.mockHandler.expects(once()).setSpeechRecognitionState('IN_SPEECH');
+ this.speechRecognizer.onspeechstart();
+ Mock4JS.verifyAllMocks();
+ Mock4JS.clearMocksToVerify();
+
+ this.mockHandler.expects(once()).speechResult('test,false');
+ this.sendSpeechResult('test', false);
+ Mock4JS.verifyAllMocks();
+ Mock4JS.clearMocksToVerify();
+
+ this.mockHandler.expects(once()).speechResult('test,true');
+ this.mockHandler.expects(once()).setSpeechRecognitionState('READY');
+ this.sendSpeechResult('test', true);
+});
« no previous file with comments | « chrome/browser/resources/app_list/speech_manager.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698