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

Side by Side Diff: content/browser/speech/speech_recognizer_unittest.cc

Issue 11347004: content/browser: Move speech code into content namespace. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <vector> 5 #include <vector>
6 6
7 #include "content/browser/browser_thread_impl.h" 7 #include "content/browser/browser_thread_impl.h"
8 #include "content/browser/speech/google_one_shot_remote_engine.h" 8 #include "content/browser/speech/google_one_shot_remote_engine.h"
9 #include "content/browser/speech/speech_recognizer.h" 9 #include "content/browser/speech/speech_recognizer.h"
10 #include "content/public/browser/speech_recognition_event_listener.h" 10 #include "content/public/browser/speech_recognition_event_listener.h"
11 #include "media/audio/mock_audio_manager.h" 11 #include "media/audio/mock_audio_manager.h"
12 #include "media/audio/fake_audio_input_stream.h" 12 #include "media/audio/fake_audio_input_stream.h"
13 #include "media/audio/fake_audio_output_stream.h" 13 #include "media/audio/fake_audio_output_stream.h"
14 #include "media/audio/test_audio_input_controller_factory.h" 14 #include "media/audio/test_audio_input_controller_factory.h"
15 #include "net/base/net_errors.h" 15 #include "net/base/net_errors.h"
16 #include "net/url_request/test_url_fetcher_factory.h" 16 #include "net/url_request/test_url_fetcher_factory.h"
17 #include "net/url_request/url_request_status.h" 17 #include "net/url_request/url_request_status.h"
18 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
19 19
20 using base::MessageLoopProxy; 20 using base::MessageLoopProxy;
21 using content::BrowserThread;
22 using content::BrowserThreadImpl;
23 using media::AudioInputController; 21 using media::AudioInputController;
24 using media::AudioInputStream; 22 using media::AudioInputStream;
25 using media::AudioManager; 23 using media::AudioManager;
26 using media::AudioOutputStream; 24 using media::AudioOutputStream;
27 using media::AudioParameters; 25 using media::AudioParameters;
28 using media::TestAudioInputController; 26 using media::TestAudioInputController;
29 using media::TestAudioInputControllerFactory; 27 using media::TestAudioInputControllerFactory;
30 28
31 namespace speech { 29 namespace content {
32 30
33 class SpeechRecognizerTest : public content::SpeechRecognitionEventListener, 31 class SpeechRecognizerTest : public SpeechRecognitionEventListener,
34 public testing::Test { 32 public testing::Test {
35 public: 33 public:
36 SpeechRecognizerTest() 34 SpeechRecognizerTest()
37 : io_thread_(BrowserThread::IO, &message_loop_), 35 : io_thread_(BrowserThread::IO, &message_loop_),
38 recognition_started_(false), 36 recognition_started_(false),
39 recognition_ended_(false), 37 recognition_ended_(false),
40 result_received_(false), 38 result_received_(false),
41 audio_started_(false), 39 audio_started_(false),
42 audio_ended_(false), 40 audio_ended_(false),
43 sound_started_(false), 41 sound_started_(false),
44 sound_ended_(false), 42 sound_ended_(false),
45 error_(content::SPEECH_RECOGNITION_ERROR_NONE), 43 error_(SPEECH_RECOGNITION_ERROR_NONE),
46 volume_(-1.0f) { 44 volume_(-1.0f) {
47 // SpeechRecognizer takes ownership of sr_engine. 45 // SpeechRecognizer takes ownership of sr_engine.
48 SpeechRecognitionEngine* sr_engine = 46 SpeechRecognitionEngine* sr_engine =
49 new GoogleOneShotRemoteEngine(NULL /* URLRequestContextGetter */); 47 new GoogleOneShotRemoteEngine(NULL /* URLRequestContextGetter */);
50 SpeechRecognitionEngineConfig config; 48 SpeechRecognitionEngineConfig config;
51 config.audio_num_bits_per_sample = SpeechRecognizer::kNumBitsPerAudioSample; 49 config.audio_num_bits_per_sample = SpeechRecognizer::kNumBitsPerAudioSample;
52 config.audio_sample_rate = SpeechRecognizer::kAudioSampleRate; 50 config.audio_sample_rate = SpeechRecognizer::kAudioSampleRate;
53 config.filter_profanities = false; 51 config.filter_profanities = false;
54 sr_engine->SetConfig(config); 52 sr_engine->SetConfig(config);
55 53
(...skipping 24 matching lines...) Expand all
80 EXPECT_TRUE(!recognition_ended_ || (audio_ended_ || !audio_started_)); 78 EXPECT_TRUE(!recognition_ended_ || (audio_ended_ || !audio_started_));
81 } 79 }
82 80
83 void CheckFinalEventsConsistency() { 81 void CheckFinalEventsConsistency() {
84 // Note: "!(x ^ y)" == "(x && y) || (!x && !x)". 82 // Note: "!(x ^ y)" == "(x && y) || (!x && !x)".
85 EXPECT_FALSE(recognition_started_ ^ recognition_ended_); 83 EXPECT_FALSE(recognition_started_ ^ recognition_ended_);
86 EXPECT_FALSE(audio_started_ ^ audio_ended_); 84 EXPECT_FALSE(audio_started_ ^ audio_ended_);
87 EXPECT_FALSE(sound_started_ ^ sound_ended_); 85 EXPECT_FALSE(sound_started_ ^ sound_ended_);
88 } 86 }
89 87
90 // Overridden from content::SpeechRecognitionEventListener: 88 // Overridden from SpeechRecognitionEventListener:
91 virtual void OnAudioStart(int session_id) OVERRIDE { 89 virtual void OnAudioStart(int session_id) OVERRIDE {
92 audio_started_ = true; 90 audio_started_ = true;
93 CheckEventsConsistency(); 91 CheckEventsConsistency();
94 } 92 }
95 93
96 virtual void OnAudioEnd(int session_id) OVERRIDE { 94 virtual void OnAudioEnd(int session_id) OVERRIDE {
97 audio_ended_ = true; 95 audio_ended_ = true;
98 CheckEventsConsistency(); 96 CheckEventsConsistency();
99 } 97 }
100 98
101 virtual void OnRecognitionResult( 99 virtual void OnRecognitionResult(
102 int session_id, const content::SpeechRecognitionResult& result) OVERRIDE { 100 int session_id, const SpeechRecognitionResult& result) OVERRIDE {
103 result_received_ = true; 101 result_received_ = true;
104 } 102 }
105 103
106 virtual void OnRecognitionError( 104 virtual void OnRecognitionError(
107 int session_id, const content::SpeechRecognitionError& error) OVERRIDE { 105 int session_id, const SpeechRecognitionError& error) OVERRIDE {
108 EXPECT_TRUE(recognition_started_); 106 EXPECT_TRUE(recognition_started_);
109 EXPECT_FALSE(recognition_ended_); 107 EXPECT_FALSE(recognition_ended_);
110 error_ = error.code; 108 error_ = error.code;
111 } 109 }
112 110
113 virtual void OnAudioLevelsChange(int session_id, float volume, 111 virtual void OnAudioLevelsChange(int session_id, float volume,
114 float noise_volume) OVERRIDE { 112 float noise_volume) OVERRIDE {
115 volume_ = volume; 113 volume_ = volume;
116 noise_volume_ = noise_volume; 114 noise_volume_ = noise_volume;
117 } 115 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 BrowserThreadImpl io_thread_; 166 BrowserThreadImpl io_thread_;
169 scoped_refptr<SpeechRecognizer> recognizer_; 167 scoped_refptr<SpeechRecognizer> recognizer_;
170 scoped_ptr<AudioManager> audio_manager_; 168 scoped_ptr<AudioManager> audio_manager_;
171 bool recognition_started_; 169 bool recognition_started_;
172 bool recognition_ended_; 170 bool recognition_ended_;
173 bool result_received_; 171 bool result_received_;
174 bool audio_started_; 172 bool audio_started_;
175 bool audio_ended_; 173 bool audio_ended_;
176 bool sound_started_; 174 bool sound_started_;
177 bool sound_ended_; 175 bool sound_ended_;
178 content::SpeechRecognitionErrorCode error_; 176 SpeechRecognitionErrorCode error_;
179 net::TestURLFetcherFactory url_fetcher_factory_; 177 net::TestURLFetcherFactory url_fetcher_factory_;
180 TestAudioInputControllerFactory audio_input_controller_factory_; 178 TestAudioInputControllerFactory audio_input_controller_factory_;
181 std::vector<uint8> audio_packet_; 179 std::vector<uint8> audio_packet_;
182 float volume_; 180 float volume_;
183 float noise_volume_; 181 float noise_volume_;
184 }; 182 };
185 183
186 TEST_F(SpeechRecognizerTest, StopNoData) { 184 TEST_F(SpeechRecognizerTest, StopNoData) {
187 // Check for callbacks when stopping record before any audio gets recorded. 185 // Check for callbacks when stopping record before any audio gets recorded.
188 recognizer_->StartRecognition(); 186 recognizer_->StartRecognition();
189 recognizer_->StopAudioCapture(); 187 recognizer_->StopAudioCapture();
190 MessageLoop::current()->RunAllPending(); 188 MessageLoop::current()->RunAllPending();
191 EXPECT_TRUE(recognition_started_); 189 EXPECT_TRUE(recognition_started_);
192 EXPECT_FALSE(audio_started_); 190 EXPECT_FALSE(audio_started_);
193 EXPECT_FALSE(result_received_); 191 EXPECT_FALSE(result_received_);
194 EXPECT_EQ(content::SPEECH_RECOGNITION_ERROR_NONE, error_); 192 EXPECT_EQ(SPEECH_RECOGNITION_ERROR_NONE, error_);
195 CheckFinalEventsConsistency(); 193 CheckFinalEventsConsistency();
196 } 194 }
197 195
198 TEST_F(SpeechRecognizerTest, CancelNoData) { 196 TEST_F(SpeechRecognizerTest, CancelNoData) {
199 // Check for callbacks when canceling recognition before any audio gets 197 // Check for callbacks when canceling recognition before any audio gets
200 // recorded. 198 // recorded.
201 recognizer_->StartRecognition(); 199 recognizer_->StartRecognition();
202 recognizer_->AbortRecognition(); 200 recognizer_->AbortRecognition();
203 MessageLoop::current()->RunAllPending(); 201 MessageLoop::current()->RunAllPending();
204 EXPECT_TRUE(recognition_started_); 202 EXPECT_TRUE(recognition_started_);
205 EXPECT_FALSE(audio_started_); 203 EXPECT_FALSE(audio_started_);
206 EXPECT_FALSE(result_received_); 204 EXPECT_FALSE(result_received_);
207 EXPECT_EQ(content::SPEECH_RECOGNITION_ERROR_ABORTED, error_); 205 EXPECT_EQ(SPEECH_RECOGNITION_ERROR_ABORTED, error_);
208 CheckFinalEventsConsistency(); 206 CheckFinalEventsConsistency();
209 } 207 }
210 208
211 TEST_F(SpeechRecognizerTest, StopWithData) { 209 TEST_F(SpeechRecognizerTest, StopWithData) {
212 // Start recording, give some data and then stop. This should wait for the 210 // Start recording, give some data and then stop. This should wait for the
213 // network callback to arrive before completion. 211 // network callback to arrive before completion.
214 recognizer_->StartRecognition(); 212 recognizer_->StartRecognition();
215 MessageLoop::current()->RunAllPending(); 213 MessageLoop::current()->RunAllPending();
216 TestAudioInputController* controller = 214 TestAudioInputController* controller =
217 audio_input_controller_factory_.controller(); 215 audio_input_controller_factory_.controller();
(...skipping 12 matching lines...) Expand all
230 ASSERT_TRUE(fetcher); 228 ASSERT_TRUE(fetcher);
231 EXPECT_EQ(i + 1, fetcher->upload_chunks().size()); 229 EXPECT_EQ(i + 1, fetcher->upload_chunks().size());
232 } 230 }
233 231
234 recognizer_->StopAudioCapture(); 232 recognizer_->StopAudioCapture();
235 MessageLoop::current()->RunAllPending(); 233 MessageLoop::current()->RunAllPending();
236 EXPECT_TRUE(audio_started_); 234 EXPECT_TRUE(audio_started_);
237 EXPECT_TRUE(audio_ended_); 235 EXPECT_TRUE(audio_ended_);
238 EXPECT_FALSE(recognition_ended_); 236 EXPECT_FALSE(recognition_ended_);
239 EXPECT_FALSE(result_received_); 237 EXPECT_FALSE(result_received_);
240 EXPECT_EQ(content::SPEECH_RECOGNITION_ERROR_NONE, error_); 238 EXPECT_EQ(SPEECH_RECOGNITION_ERROR_NONE, error_);
241 239
242 // Issue the network callback to complete the process. 240 // Issue the network callback to complete the process.
243 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); 241 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
244 ASSERT_TRUE(fetcher); 242 ASSERT_TRUE(fetcher);
245 243
246 fetcher->set_url(fetcher->GetOriginalURL()); 244 fetcher->set_url(fetcher->GetOriginalURL());
247 net::URLRequestStatus status; 245 net::URLRequestStatus status;
248 status.set_status(net::URLRequestStatus::SUCCESS); 246 status.set_status(net::URLRequestStatus::SUCCESS);
249 fetcher->set_status(status); 247 fetcher->set_status(status);
250 fetcher->set_response_code(200); 248 fetcher->set_response_code(200);
251 fetcher->SetResponseString( 249 fetcher->SetResponseString(
252 "{\"status\":0,\"hypotheses\":[{\"utterance\":\"123\"}]}"); 250 "{\"status\":0,\"hypotheses\":[{\"utterance\":\"123\"}]}");
253 fetcher->delegate()->OnURLFetchComplete(fetcher); 251 fetcher->delegate()->OnURLFetchComplete(fetcher);
254 MessageLoop::current()->RunAllPending(); 252 MessageLoop::current()->RunAllPending();
255 EXPECT_TRUE(recognition_ended_); 253 EXPECT_TRUE(recognition_ended_);
256 EXPECT_TRUE(result_received_); 254 EXPECT_TRUE(result_received_);
257 EXPECT_EQ(content::SPEECH_RECOGNITION_ERROR_NONE, error_); 255 EXPECT_EQ(SPEECH_RECOGNITION_ERROR_NONE, error_);
258 CheckFinalEventsConsistency(); 256 CheckFinalEventsConsistency();
259 } 257 }
260 258
261 TEST_F(SpeechRecognizerTest, CancelWithData) { 259 TEST_F(SpeechRecognizerTest, CancelWithData) {
262 // Start recording, give some data and then cancel. 260 // Start recording, give some data and then cancel.
263 recognizer_->StartRecognition(); 261 recognizer_->StartRecognition();
264 MessageLoop::current()->RunAllPending(); 262 MessageLoop::current()->RunAllPending();
265 TestAudioInputController* controller = 263 TestAudioInputController* controller =
266 audio_input_controller_factory_.controller(); 264 audio_input_controller_factory_.controller();
267 ASSERT_TRUE(controller); 265 ASSERT_TRUE(controller);
268 controller->event_handler()->OnData(controller, &audio_packet_[0], 266 controller->event_handler()->OnData(controller, &audio_packet_[0],
269 audio_packet_.size()); 267 audio_packet_.size());
270 MessageLoop::current()->RunAllPending(); 268 MessageLoop::current()->RunAllPending();
271 recognizer_->AbortRecognition(); 269 recognizer_->AbortRecognition();
272 MessageLoop::current()->RunAllPending(); 270 MessageLoop::current()->RunAllPending();
273 ASSERT_TRUE(url_fetcher_factory_.GetFetcherByID(0)); 271 ASSERT_TRUE(url_fetcher_factory_.GetFetcherByID(0));
274 EXPECT_TRUE(recognition_started_); 272 EXPECT_TRUE(recognition_started_);
275 EXPECT_TRUE(audio_started_); 273 EXPECT_TRUE(audio_started_);
276 EXPECT_FALSE(result_received_); 274 EXPECT_FALSE(result_received_);
277 EXPECT_EQ(content::SPEECH_RECOGNITION_ERROR_ABORTED, error_); 275 EXPECT_EQ(SPEECH_RECOGNITION_ERROR_ABORTED, error_);
278 CheckFinalEventsConsistency(); 276 CheckFinalEventsConsistency();
279 } 277 }
280 278
281 TEST_F(SpeechRecognizerTest, ConnectionError) { 279 TEST_F(SpeechRecognizerTest, ConnectionError) {
282 // Start recording, give some data and then stop. Issue the network callback 280 // Start recording, give some data and then stop. Issue the network callback
283 // with a connection error and verify that the recognizer bubbles the error up 281 // with a connection error and verify that the recognizer bubbles the error up
284 recognizer_->StartRecognition(); 282 recognizer_->StartRecognition();
285 MessageLoop::current()->RunAllPending(); 283 MessageLoop::current()->RunAllPending();
286 TestAudioInputController* controller = 284 TestAudioInputController* controller =
287 audio_input_controller_factory_.controller(); 285 audio_input_controller_factory_.controller();
288 ASSERT_TRUE(controller); 286 ASSERT_TRUE(controller);
289 controller->event_handler()->OnData(controller, &audio_packet_[0], 287 controller->event_handler()->OnData(controller, &audio_packet_[0],
290 audio_packet_.size()); 288 audio_packet_.size());
291 MessageLoop::current()->RunAllPending(); 289 MessageLoop::current()->RunAllPending();
292 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); 290 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
293 ASSERT_TRUE(fetcher); 291 ASSERT_TRUE(fetcher);
294 292
295 recognizer_->StopAudioCapture(); 293 recognizer_->StopAudioCapture();
296 MessageLoop::current()->RunAllPending(); 294 MessageLoop::current()->RunAllPending();
297 EXPECT_TRUE(audio_started_); 295 EXPECT_TRUE(audio_started_);
298 EXPECT_TRUE(audio_ended_); 296 EXPECT_TRUE(audio_ended_);
299 EXPECT_FALSE(recognition_ended_); 297 EXPECT_FALSE(recognition_ended_);
300 EXPECT_FALSE(result_received_); 298 EXPECT_FALSE(result_received_);
301 EXPECT_EQ(content::SPEECH_RECOGNITION_ERROR_NONE, error_); 299 EXPECT_EQ(SPEECH_RECOGNITION_ERROR_NONE, error_);
302 300
303 // Issue the network callback to complete the process. 301 // Issue the network callback to complete the process.
304 fetcher->set_url(fetcher->GetOriginalURL()); 302 fetcher->set_url(fetcher->GetOriginalURL());
305 net::URLRequestStatus status; 303 net::URLRequestStatus status;
306 status.set_status(net::URLRequestStatus::FAILED); 304 status.set_status(net::URLRequestStatus::FAILED);
307 status.set_error(net::ERR_CONNECTION_REFUSED); 305 status.set_error(net::ERR_CONNECTION_REFUSED);
308 fetcher->set_status(status); 306 fetcher->set_status(status);
309 fetcher->set_response_code(0); 307 fetcher->set_response_code(0);
310 fetcher->SetResponseString(""); 308 fetcher->SetResponseString("");
311 fetcher->delegate()->OnURLFetchComplete(fetcher); 309 fetcher->delegate()->OnURLFetchComplete(fetcher);
312 MessageLoop::current()->RunAllPending(); 310 MessageLoop::current()->RunAllPending();
313 EXPECT_TRUE(recognition_ended_); 311 EXPECT_TRUE(recognition_ended_);
314 EXPECT_FALSE(result_received_); 312 EXPECT_FALSE(result_received_);
315 EXPECT_EQ(content::SPEECH_RECOGNITION_ERROR_NETWORK, error_); 313 EXPECT_EQ(SPEECH_RECOGNITION_ERROR_NETWORK, error_);
316 CheckFinalEventsConsistency(); 314 CheckFinalEventsConsistency();
317 } 315 }
318 316
319 TEST_F(SpeechRecognizerTest, ServerError) { 317 TEST_F(SpeechRecognizerTest, ServerError) {
320 // Start recording, give some data and then stop. Issue the network callback 318 // Start recording, give some data and then stop. Issue the network callback
321 // with a 500 error and verify that the recognizer bubbles the error up 319 // with a 500 error and verify that the recognizer bubbles the error up
322 recognizer_->StartRecognition(); 320 recognizer_->StartRecognition();
323 MessageLoop::current()->RunAllPending(); 321 MessageLoop::current()->RunAllPending();
324 TestAudioInputController* controller = 322 TestAudioInputController* controller =
325 audio_input_controller_factory_.controller(); 323 audio_input_controller_factory_.controller();
326 ASSERT_TRUE(controller); 324 ASSERT_TRUE(controller);
327 controller->event_handler()->OnData(controller, &audio_packet_[0], 325 controller->event_handler()->OnData(controller, &audio_packet_[0],
328 audio_packet_.size()); 326 audio_packet_.size());
329 MessageLoop::current()->RunAllPending(); 327 MessageLoop::current()->RunAllPending();
330 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); 328 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
331 ASSERT_TRUE(fetcher); 329 ASSERT_TRUE(fetcher);
332 330
333 recognizer_->StopAudioCapture(); 331 recognizer_->StopAudioCapture();
334 MessageLoop::current()->RunAllPending(); 332 MessageLoop::current()->RunAllPending();
335 EXPECT_TRUE(audio_started_); 333 EXPECT_TRUE(audio_started_);
336 EXPECT_TRUE(audio_ended_); 334 EXPECT_TRUE(audio_ended_);
337 EXPECT_FALSE(recognition_ended_); 335 EXPECT_FALSE(recognition_ended_);
338 EXPECT_FALSE(result_received_); 336 EXPECT_FALSE(result_received_);
339 EXPECT_EQ(content::SPEECH_RECOGNITION_ERROR_NONE, error_); 337 EXPECT_EQ(SPEECH_RECOGNITION_ERROR_NONE, error_);
340 338
341 // Issue the network callback to complete the process. 339 // Issue the network callback to complete the process.
342 fetcher->set_url(fetcher->GetOriginalURL()); 340 fetcher->set_url(fetcher->GetOriginalURL());
343 net::URLRequestStatus status; 341 net::URLRequestStatus status;
344 status.set_status(net::URLRequestStatus::SUCCESS); 342 status.set_status(net::URLRequestStatus::SUCCESS);
345 fetcher->set_status(status); 343 fetcher->set_status(status);
346 fetcher->set_response_code(500); 344 fetcher->set_response_code(500);
347 fetcher->SetResponseString("Internal Server Error"); 345 fetcher->SetResponseString("Internal Server Error");
348 fetcher->delegate()->OnURLFetchComplete(fetcher); 346 fetcher->delegate()->OnURLFetchComplete(fetcher);
349 MessageLoop::current()->RunAllPending(); 347 MessageLoop::current()->RunAllPending();
350 EXPECT_TRUE(recognition_ended_); 348 EXPECT_TRUE(recognition_ended_);
351 EXPECT_FALSE(result_received_); 349 EXPECT_FALSE(result_received_);
352 EXPECT_EQ(content::SPEECH_RECOGNITION_ERROR_NETWORK, error_); 350 EXPECT_EQ(SPEECH_RECOGNITION_ERROR_NETWORK, error_);
353 CheckFinalEventsConsistency(); 351 CheckFinalEventsConsistency();
354 } 352 }
355 353
356 TEST_F(SpeechRecognizerTest, AudioControllerErrorNoData) { 354 TEST_F(SpeechRecognizerTest, AudioControllerErrorNoData) {
357 // Check if things tear down properly if AudioInputController threw an error. 355 // Check if things tear down properly if AudioInputController threw an error.
358 recognizer_->StartRecognition(); 356 recognizer_->StartRecognition();
359 MessageLoop::current()->RunAllPending(); 357 MessageLoop::current()->RunAllPending();
360 TestAudioInputController* controller = 358 TestAudioInputController* controller =
361 audio_input_controller_factory_.controller(); 359 audio_input_controller_factory_.controller();
362 ASSERT_TRUE(controller); 360 ASSERT_TRUE(controller);
363 controller->event_handler()->OnError(controller, 0); 361 controller->event_handler()->OnError(controller, 0);
364 MessageLoop::current()->RunAllPending(); 362 MessageLoop::current()->RunAllPending();
365 EXPECT_TRUE(recognition_started_); 363 EXPECT_TRUE(recognition_started_);
366 EXPECT_FALSE(audio_started_); 364 EXPECT_FALSE(audio_started_);
367 EXPECT_FALSE(result_received_); 365 EXPECT_FALSE(result_received_);
368 EXPECT_EQ(content::SPEECH_RECOGNITION_ERROR_AUDIO, error_); 366 EXPECT_EQ(SPEECH_RECOGNITION_ERROR_AUDIO, error_);
369 CheckFinalEventsConsistency(); 367 CheckFinalEventsConsistency();
370 } 368 }
371 369
372 TEST_F(SpeechRecognizerTest, AudioControllerErrorWithData) { 370 TEST_F(SpeechRecognizerTest, AudioControllerErrorWithData) {
373 // Check if things tear down properly if AudioInputController threw an error 371 // Check if things tear down properly if AudioInputController threw an error
374 // after giving some audio data. 372 // after giving some audio data.
375 recognizer_->StartRecognition(); 373 recognizer_->StartRecognition();
376 MessageLoop::current()->RunAllPending(); 374 MessageLoop::current()->RunAllPending();
377 TestAudioInputController* controller = 375 TestAudioInputController* controller =
378 audio_input_controller_factory_.controller(); 376 audio_input_controller_factory_.controller();
379 ASSERT_TRUE(controller); 377 ASSERT_TRUE(controller);
380 controller->event_handler()->OnData(controller, &audio_packet_[0], 378 controller->event_handler()->OnData(controller, &audio_packet_[0],
381 audio_packet_.size()); 379 audio_packet_.size());
382 controller->event_handler()->OnError(controller, 0); 380 controller->event_handler()->OnError(controller, 0);
383 MessageLoop::current()->RunAllPending(); 381 MessageLoop::current()->RunAllPending();
384 ASSERT_TRUE(url_fetcher_factory_.GetFetcherByID(0)); 382 ASSERT_TRUE(url_fetcher_factory_.GetFetcherByID(0));
385 EXPECT_TRUE(recognition_started_); 383 EXPECT_TRUE(recognition_started_);
386 EXPECT_TRUE(audio_started_); 384 EXPECT_TRUE(audio_started_);
387 EXPECT_FALSE(result_received_); 385 EXPECT_FALSE(result_received_);
388 EXPECT_EQ(content::SPEECH_RECOGNITION_ERROR_AUDIO, error_); 386 EXPECT_EQ(SPEECH_RECOGNITION_ERROR_AUDIO, error_);
389 CheckFinalEventsConsistency(); 387 CheckFinalEventsConsistency();
390 } 388 }
391 389
392 TEST_F(SpeechRecognizerTest, NoSpeechCallbackIssued) { 390 TEST_F(SpeechRecognizerTest, NoSpeechCallbackIssued) {
393 // Start recording and give a lot of packets with audio samples set to zero. 391 // Start recording and give a lot of packets with audio samples set to zero.
394 // This should trigger the no-speech detector and issue a callback. 392 // This should trigger the no-speech detector and issue a callback.
395 recognizer_->StartRecognition(); 393 recognizer_->StartRecognition();
396 MessageLoop::current()->RunAllPending(); 394 MessageLoop::current()->RunAllPending();
397 TestAudioInputController* controller = 395 TestAudioInputController* controller =
398 audio_input_controller_factory_.controller(); 396 audio_input_controller_factory_.controller();
399 ASSERT_TRUE(controller); 397 ASSERT_TRUE(controller);
400 398
401 int num_packets = (SpeechRecognizer::kNoSpeechTimeoutMs) / 399 int num_packets = (SpeechRecognizer::kNoSpeechTimeoutMs) /
402 GoogleOneShotRemoteEngine::kAudioPacketIntervalMs + 1; 400 GoogleOneShotRemoteEngine::kAudioPacketIntervalMs + 1;
403 // The vector is already filled with zero value samples on create. 401 // The vector is already filled with zero value samples on create.
404 for (int i = 0; i < num_packets; ++i) { 402 for (int i = 0; i < num_packets; ++i) {
405 controller->event_handler()->OnData(controller, &audio_packet_[0], 403 controller->event_handler()->OnData(controller, &audio_packet_[0],
406 audio_packet_.size()); 404 audio_packet_.size());
407 } 405 }
408 MessageLoop::current()->RunAllPending(); 406 MessageLoop::current()->RunAllPending();
409 EXPECT_TRUE(recognition_started_); 407 EXPECT_TRUE(recognition_started_);
410 EXPECT_TRUE(audio_started_); 408 EXPECT_TRUE(audio_started_);
411 EXPECT_FALSE(result_received_); 409 EXPECT_FALSE(result_received_);
412 EXPECT_EQ(content::SPEECH_RECOGNITION_ERROR_NO_SPEECH, error_); 410 EXPECT_EQ(SPEECH_RECOGNITION_ERROR_NO_SPEECH, error_);
413 CheckFinalEventsConsistency(); 411 CheckFinalEventsConsistency();
414 } 412 }
415 413
416 TEST_F(SpeechRecognizerTest, NoSpeechCallbackNotIssued) { 414 TEST_F(SpeechRecognizerTest, NoSpeechCallbackNotIssued) {
417 // Start recording and give a lot of packets with audio samples set to zero 415 // Start recording and give a lot of packets with audio samples set to zero
418 // and then some more with reasonably loud audio samples. This should be 416 // and then some more with reasonably loud audio samples. This should be
419 // treated as normal speech input and the no-speech detector should not get 417 // treated as normal speech input and the no-speech detector should not get
420 // triggered. 418 // triggered.
421 recognizer_->StartRecognition(); 419 recognizer_->StartRecognition();
422 MessageLoop::current()->RunAllPending(); 420 MessageLoop::current()->RunAllPending();
(...skipping 12 matching lines...) Expand all
435 audio_packet_.size()); 433 audio_packet_.size());
436 } 434 }
437 435
438 FillPacketWithTestWaveform(); 436 FillPacketWithTestWaveform();
439 for (int i = 0; i < num_packets / 2; ++i) { 437 for (int i = 0; i < num_packets / 2; ++i) {
440 controller->event_handler()->OnData(controller, &audio_packet_[0], 438 controller->event_handler()->OnData(controller, &audio_packet_[0],
441 audio_packet_.size()); 439 audio_packet_.size());
442 } 440 }
443 441
444 MessageLoop::current()->RunAllPending(); 442 MessageLoop::current()->RunAllPending();
445 EXPECT_EQ(content::SPEECH_RECOGNITION_ERROR_NONE, error_); 443 EXPECT_EQ(SPEECH_RECOGNITION_ERROR_NONE, error_);
446 EXPECT_TRUE(audio_started_); 444 EXPECT_TRUE(audio_started_);
447 EXPECT_FALSE(audio_ended_); 445 EXPECT_FALSE(audio_ended_);
448 EXPECT_FALSE(recognition_ended_); 446 EXPECT_FALSE(recognition_ended_);
449 recognizer_->AbortRecognition(); 447 recognizer_->AbortRecognition();
450 MessageLoop::current()->RunAllPending(); 448 MessageLoop::current()->RunAllPending();
451 CheckFinalEventsConsistency(); 449 CheckFinalEventsConsistency();
452 } 450 }
453 451
454 TEST_F(SpeechRecognizerTest, SetInputVolumeCallback) { 452 TEST_F(SpeechRecognizerTest, SetInputVolumeCallback) {
455 // Start recording and give a lot of packets with audio samples set to zero 453 // Start recording and give a lot of packets with audio samples set to zero
(...skipping 25 matching lines...) Expand all
481 MessageLoop::current()->RunAllPending(); 479 MessageLoop::current()->RunAllPending();
482 EXPECT_FLOAT_EQ(0.74939233f, volume_); 480 EXPECT_FLOAT_EQ(0.74939233f, volume_);
483 481
484 FillPacketWithTestWaveform(); 482 FillPacketWithTestWaveform();
485 controller->event_handler()->OnData(controller, &audio_packet_[0], 483 controller->event_handler()->OnData(controller, &audio_packet_[0],
486 audio_packet_.size()); 484 audio_packet_.size());
487 MessageLoop::current()->RunAllPending(); 485 MessageLoop::current()->RunAllPending();
488 EXPECT_FLOAT_EQ(0.89926866f, volume_); 486 EXPECT_FLOAT_EQ(0.89926866f, volume_);
489 EXPECT_FLOAT_EQ(0.75071919f, noise_volume_); 487 EXPECT_FLOAT_EQ(0.75071919f, noise_volume_);
490 488
491 EXPECT_EQ(content::SPEECH_RECOGNITION_ERROR_NONE, error_); 489 EXPECT_EQ(SPEECH_RECOGNITION_ERROR_NONE, error_);
492 EXPECT_FALSE(audio_ended_); 490 EXPECT_FALSE(audio_ended_);
493 EXPECT_FALSE(recognition_ended_); 491 EXPECT_FALSE(recognition_ended_);
494 recognizer_->AbortRecognition(); 492 recognizer_->AbortRecognition();
495 MessageLoop::current()->RunAllPending(); 493 MessageLoop::current()->RunAllPending();
496 CheckFinalEventsConsistency(); 494 CheckFinalEventsConsistency();
497 } 495 }
498 496
499 } // namespace speech 497 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698