14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file. 44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)/** 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * TestFixture for kiosk app settings WebUI testing. 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @extends {testing.Test} 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @constructor 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu */ 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)function AppListStartPageWebUITest() {} 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/** 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Mock of audioContext. 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @constructor 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)function mockAudioContext() { 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.sampleRate = 44100; /* some dummy number */ 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)mockAudioContext.prototype = { 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) createMediaStreamSource: function(stream) { 22e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch return {connect: function(audioProc) {}, 23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch disconnect: function() {}}; 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch createScriptProcessor: function(bufSize, in_channels, out_channels) { 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return {connect: function(destination) {}, 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) disconnect: function() {}}; 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)AppListStartPageWebUITest.prototype = { 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) __proto__: testing.Test.prototype, 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Browser to app launcher start page. 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) browsePreload: 'chrome://app-list/', 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Recommend apps data. 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @private 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) recommendedApps_: [ 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) { 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'appId': 'app_id_1', 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'textTitle': 'app 1', 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'iconUrl': 'icon_url_1' 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }, 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) { 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'appId': 'app_id_2', 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'textTitle': 'app 2', 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'iconUrl': 'icon_url_2' 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ], 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Placeholder for mock speech recognizer. 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) speechRecognizer: null, 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Sends the speech recognition result. 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {string} result The testing result. 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {boolean} isFinal Whether the result is final or not. 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) sendSpeechResult: function(result, isFinal) { 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var speechEvent = new Event('test'); 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Each result contains a list of alternatives and 'isFinal' flag. 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var speechResult = [{transcript: result}]; 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) speechResult.isFinal = isFinal; 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) speechEvent.results = [speechResult]; 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.speechRecognizer.onresult(speechEvent); 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Registers the webkitSpeechRecognition mock for test. 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @private 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registerMockSpeechRecognition_: function() { 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var owner = this; 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) function mockSpeechRecognition() { 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.inSpeech_ = false; 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) owner.speechRecognizer = this; 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) mockSpeechRecognition.prototype = { 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) start: function() { 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.onstart(); 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) abort: function() { 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (this.inSpeech_) 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.onspeechend(); 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.onerror(new Error()); 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.onend(); 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window.webkitSpeechRecognition = mockSpeechRecognition; 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Mock of webkitGetUserMedia for start page. 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @private 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {object} constraint The constraint parameter. 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {Function} success The success callback. 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {Function} error The error callback. 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) mockGetUserMedia_: function(constraint, success, error) { 112e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch function getAudioTracks() { 113e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) assertTrue(constraint.audio); 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) assertNotEquals(null, error, 'error callback must not be null'); 116e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch var audioTracks = []; 117e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch for (var i = 0; i < 2; ++i) { 118e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch audioTracks.push(this.audioTrackMocks[i].proxy()); 119e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 120e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch success({getAudioTracks: function() { return audioTracks; }}); 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** @override */ 1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) preLoad: function() { 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.makeAndRegisterMockHandler(['initialize', 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'launchApp', 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'setSpeechRecognitionState', 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'speechResult']); 1294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) this.mockHandler.stubs().initialize().will(callFunction(function() { 1304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) appList.startPage.setRecommendedApps(this.recommendedApps_); 1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }.bind(this))); 1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) this.mockHandler.stubs().launchApp(ANYTHING); 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.registerMockSpeechRecognition_(); 135c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch window.AudioContext = mockAudioContext; 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) navigator.webkitGetUserMedia = this.mockGetUserMedia_.bind(this); 137e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch this.audioTrackMocks = [mock(MediaStreamTrack), mock(MediaStreamTrack)]; 1384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 1404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F('AppListStartPageWebUITest', 'Basic', function() { 1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) assertEquals(this.browsePreload, document.location.href); 1434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) var recommendedApp = $('start-page').querySelector('.recommended-apps'); 1454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) assertEquals(this.recommendedApps_.length, recommendedApp.childElementCount); 1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) for (var i = 0; i < recommendedApp.childElementCount; ++i) { 1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) assertEquals(this.recommendedApps_[i].appId, 1484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) recommendedApp.children[i].appId); 1494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}); 1514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F('AppListStartPageWebUITest', 'ClickToLaunch', function() { 1534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) var recommendedApp = $('start-page').querySelector('.recommended-apps'); 1544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) for (var i = 0; i < recommendedApp.childElementCount; ++i) { 1554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) this.mockHandler.expects(once()).launchApp( 1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) [this.recommendedApps_[i].appId]); 1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) cr.dispatchSimpleEvent(recommendedApp.children[i], 'click'); 1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}); 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F('AppListStartPageWebUITest', 'SpeechRecognitionState', function() { 162c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch this.mockHandler.expects(once()).setSpeechRecognitionState('READY'); 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) appList.startPage.onAppListShown(); 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.mockHandler.expects(once()).setSpeechRecognitionState('RECOGNIZING'); 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) appList.startPage.toggleSpeechRecognition(); 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Mock4JS.verifyAllMocks(); 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Mock4JS.clearMocksToVerify(); 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.mockHandler.expects(once()).setSpeechRecognitionState('READY'); 170e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch for (var i = 0; i < this.audioTrackMocks.length; ++i) { 171e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch this.audioTrackMocks[i].expects(once()).stop(); 172e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) appList.startPage.toggleSpeechRecognition(); 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Mock4JS.verifyAllMocks(); 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Mock4JS.clearMocksToVerify(); 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.mockHandler.expects(once()).setSpeechRecognitionState('RECOGNIZING'); 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) appList.startPage.toggleSpeechRecognition(); 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Mock4JS.verifyAllMocks(); 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Mock4JS.clearMocksToVerify(); 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.mockHandler.expects(once()).setSpeechRecognitionState('STOPPING'); 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.mockHandler.expects(once()).setSpeechRecognitionState('READY'); 184e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch for (var i = 0; i < this.audioTrackMocks.length; ++i) { 185e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch this.audioTrackMocks[i].expects(once()).stop(); 186e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) appList.startPage.onAppListHidden(); 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}); 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F('AppListStartPageWebUITest', 'SpeechRecognition', function() { 191c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch this.mockHandler.expects(once()).setSpeechRecognitionState('READY'); 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) appList.startPage.onAppListShown(); 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.mockHandler.expects(once()).setSpeechRecognitionState('RECOGNIZING'); 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) appList.startPage.toggleSpeechRecognition(); 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Mock4JS.verifyAllMocks(); 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Mock4JS.clearMocksToVerify(); 1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.mockHandler.expects(once()).setSpeechRecognitionState('IN_SPEECH'); 1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.speechRecognizer.onspeechstart(); 2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Mock4JS.verifyAllMocks(); 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Mock4JS.clearMocksToVerify(); 2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.mockHandler.expects(once()).speechResult('test,false'); 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.sendSpeechResult('test', false); 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Mock4JS.verifyAllMocks(); 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Mock4JS.clearMocksToVerify(); 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.mockHandler.expects(once()).speechResult('test,true'); 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.mockHandler.expects(once()).setSpeechRecognitionState('READY'); 210e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch for (var i = 0; i < this.audioTrackMocks.length; ++i) { 211e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch this.audioTrackMocks[i].expects(once()).stop(); 212e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.sendSpeechResult('test', true); 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}); 215