| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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.h" | 7 #include "content/browser/browser_thread.h" |
| 8 #include "content/browser/speech/speech_recognizer.h" | 8 #include "content/browser/speech/speech_recognizer.h" |
| 9 #include "content/test/test_url_fetcher_factory.h" | 9 #include "content/test/test_url_fetcher_factory.h" |
| 10 #include "media/audio/test_audio_input_controller_factory.h" | 10 #include "media/audio/test_audio_input_controller_factory.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 SpeechRecognizerTest() | 24 SpeechRecognizerTest() |
| 25 : io_thread_(BrowserThread::IO, &message_loop_), | 25 : io_thread_(BrowserThread::IO, &message_loop_), |
| 26 ALLOW_THIS_IN_INITIALIZER_LIST( | 26 ALLOW_THIS_IN_INITIALIZER_LIST( |
| 27 recognizer_(new SpeechRecognizer(this, 1, std::string(), | 27 recognizer_(new SpeechRecognizer(this, 1, std::string(), |
| 28 std::string(), NULL, false, | 28 std::string(), NULL, false, |
| 29 std::string(), std::string()))), | 29 std::string(), std::string()))), |
| 30 recording_complete_(false), | 30 recording_complete_(false), |
| 31 recognition_complete_(false), | 31 recognition_complete_(false), |
| 32 result_received_(false), | 32 result_received_(false), |
| 33 audio_received_(false), | 33 audio_received_(false), |
| 34 error_(SpeechRecognizer::RECOGNIZER_NO_ERROR), | 34 error_(kErrorNone), |
| 35 volume_(-1.0f) { | 35 volume_(-1.0f) { |
| 36 int audio_packet_length_bytes = | 36 int audio_packet_length_bytes = |
| 37 (SpeechRecognizer::kAudioSampleRate * | 37 (SpeechRecognizer::kAudioSampleRate * |
| 38 SpeechRecognizer::kAudioPacketIntervalMs * | 38 SpeechRecognizer::kAudioPacketIntervalMs * |
| 39 ChannelLayoutToChannelCount(SpeechRecognizer::kChannelLayout) * | 39 ChannelLayoutToChannelCount(SpeechRecognizer::kChannelLayout) * |
| 40 SpeechRecognizer::kNumBitsPerAudioSample) / (8 * 1000); | 40 SpeechRecognizer::kNumBitsPerAudioSample) / (8 * 1000); |
| 41 audio_packet_.resize(audio_packet_length_bytes); | 41 audio_packet_.resize(audio_packet_length_bytes); |
| 42 } | 42 } |
| 43 | 43 |
| 44 // SpeechRecognizer::Delegate methods. | 44 // SpeechRecognizer::Delegate methods. |
| 45 virtual void SetRecognitionResult(int caller_id, | 45 virtual void SetRecognitionResult(int caller_id, |
| 46 bool error, | 46 const SpeechInputResult& result) OVERRIDE { |
| 47 const SpeechInputResultArray& result) { | |
| 48 result_received_ = true; | 47 result_received_ = true; |
| 49 } | 48 } |
| 50 | 49 |
| 51 virtual void DidCompleteRecording(int caller_id) { | 50 virtual void DidCompleteRecording(int caller_id) OVERRIDE { |
| 52 recording_complete_ = true; | 51 recording_complete_ = true; |
| 53 } | 52 } |
| 54 | 53 |
| 55 virtual void DidCompleteRecognition(int caller_id) { | 54 virtual void DidCompleteRecognition(int caller_id) OVERRIDE { |
| 56 recognition_complete_ = true; | 55 recognition_complete_ = true; |
| 57 } | 56 } |
| 58 | 57 |
| 59 virtual void DidCompleteEnvironmentEstimation(int caller_id) { | 58 virtual void DidCompleteEnvironmentEstimation(int caller_id) OVERRIDE { |
| 60 } | 59 } |
| 61 | 60 |
| 62 virtual void DidStartReceivingAudio(int caller_id) { | 61 virtual void DidStartReceivingAudio(int caller_id) OVERRIDE { |
| 63 audio_received_ = true; | 62 audio_received_ = true; |
| 64 } | 63 } |
| 65 | 64 |
| 65 virtual void DidStartReceivingSpeech(int caller_id) OVERRIDE { |
| 66 } |
| 67 |
| 68 virtual void DidStopReceivingSpeech(int caller_id) OVERRIDE { |
| 69 } |
| 70 |
| 66 virtual void OnRecognizerError(int caller_id, | 71 virtual void OnRecognizerError(int caller_id, |
| 67 SpeechRecognizer::ErrorCode error) { | 72 SpeechInputError error) OVERRIDE { |
| 68 error_ = error; | 73 error_ = error; |
| 69 } | 74 } |
| 70 | 75 |
| 71 virtual void SetInputVolume(int caller_id, float volume, float noise_volume) { | 76 virtual void SetInputVolume(int caller_id, float volume, |
| 77 float noise_volume) OVERRIDE { |
| 72 volume_ = volume; | 78 volume_ = volume; |
| 73 noise_volume_ = noise_volume; | 79 noise_volume_ = noise_volume; |
| 74 } | 80 } |
| 75 | 81 |
| 76 // testing::Test methods. | 82 // testing::Test methods. |
| 77 virtual void SetUp() { | 83 virtual void SetUp() OVERRIDE { |
| 78 AudioInputController::set_factory_for_testing( | 84 AudioInputController::set_factory_for_testing( |
| 79 &audio_input_controller_factory_); | 85 &audio_input_controller_factory_); |
| 80 } | 86 } |
| 81 | 87 |
| 82 virtual void TearDown() { | 88 virtual void TearDown() OVERRIDE { |
| 83 AudioInputController::set_factory_for_testing(NULL); | 89 AudioInputController::set_factory_for_testing(NULL); |
| 84 } | 90 } |
| 85 | 91 |
| 86 void FillPacketWithTestWaveform() { | 92 void FillPacketWithTestWaveform() { |
| 87 // Fill the input with a simple pattern, a 125Hz sawtooth waveform. | 93 // Fill the input with a simple pattern, a 125Hz sawtooth waveform. |
| 88 for (size_t i = 0; i < audio_packet_.size(); ++i) | 94 for (size_t i = 0; i < audio_packet_.size(); ++i) |
| 89 audio_packet_[i] = static_cast<uint8>(i); | 95 audio_packet_[i] = static_cast<uint8>(i); |
| 90 } | 96 } |
| 91 | 97 |
| 92 void FillPacketWithNoise() { | 98 void FillPacketWithNoise() { |
| 93 int value = 0; | 99 int value = 0; |
| 94 int factor = 175; | 100 int factor = 175; |
| 95 for (size_t i = 0; i < audio_packet_.size(); ++i) { | 101 for (size_t i = 0; i < audio_packet_.size(); ++i) { |
| 96 value += factor; | 102 value += factor; |
| 97 audio_packet_[i] = value % 100; | 103 audio_packet_[i] = value % 100; |
| 98 } | 104 } |
| 99 } | 105 } |
| 100 | 106 |
| 101 protected: | 107 protected: |
| 102 MessageLoopForIO message_loop_; | 108 MessageLoopForIO message_loop_; |
| 103 BrowserThread io_thread_; | 109 BrowserThread io_thread_; |
| 104 scoped_refptr<SpeechRecognizer> recognizer_; | 110 scoped_refptr<SpeechRecognizer> recognizer_; |
| 105 bool recording_complete_; | 111 bool recording_complete_; |
| 106 bool recognition_complete_; | 112 bool recognition_complete_; |
| 107 bool result_received_; | 113 bool result_received_; |
| 108 bool audio_received_; | 114 bool audio_received_; |
| 109 SpeechRecognizer::ErrorCode error_; | 115 SpeechInputError error_; |
| 110 TestURLFetcherFactory url_fetcher_factory_; | 116 TestURLFetcherFactory url_fetcher_factory_; |
| 111 TestAudioInputControllerFactory audio_input_controller_factory_; | 117 TestAudioInputControllerFactory audio_input_controller_factory_; |
| 112 std::vector<uint8> audio_packet_; | 118 std::vector<uint8> audio_packet_; |
| 113 float volume_; | 119 float volume_; |
| 114 float noise_volume_; | 120 float noise_volume_; |
| 115 }; | 121 }; |
| 116 | 122 |
| 117 TEST_F(SpeechRecognizerTest, StopNoData) { | 123 TEST_F(SpeechRecognizerTest, StopNoData) { |
| 118 // Check for callbacks when stopping record before any audio gets recorded. | 124 // Check for callbacks when stopping record before any audio gets recorded. |
| 119 EXPECT_TRUE(recognizer_->StartRecording()); | 125 EXPECT_TRUE(recognizer_->StartRecording()); |
| 120 recognizer_->CancelRecognition(); | 126 recognizer_->CancelRecognition(); |
| 121 EXPECT_FALSE(recording_complete_); | 127 EXPECT_FALSE(recording_complete_); |
| 122 EXPECT_FALSE(recognition_complete_); | 128 EXPECT_FALSE(recognition_complete_); |
| 123 EXPECT_FALSE(result_received_); | 129 EXPECT_FALSE(result_received_); |
| 124 EXPECT_FALSE(audio_received_); | 130 EXPECT_FALSE(audio_received_); |
| 125 EXPECT_EQ(SpeechRecognizer::RECOGNIZER_NO_ERROR, error_); | 131 EXPECT_EQ(kErrorNone, error_); |
| 126 } | 132 } |
| 127 | 133 |
| 128 TEST_F(SpeechRecognizerTest, CancelNoData) { | 134 TEST_F(SpeechRecognizerTest, CancelNoData) { |
| 129 // Check for callbacks when canceling recognition before any audio gets | 135 // Check for callbacks when canceling recognition before any audio gets |
| 130 // recorded. | 136 // recorded. |
| 131 EXPECT_TRUE(recognizer_->StartRecording()); | 137 EXPECT_TRUE(recognizer_->StartRecording()); |
| 132 recognizer_->StopRecording(); | 138 recognizer_->StopRecording(); |
| 133 EXPECT_TRUE(recording_complete_); | 139 EXPECT_TRUE(recording_complete_); |
| 134 EXPECT_TRUE(recognition_complete_); | 140 EXPECT_TRUE(recognition_complete_); |
| 135 EXPECT_FALSE(result_received_); | 141 EXPECT_FALSE(result_received_); |
| 136 EXPECT_FALSE(audio_received_); | 142 EXPECT_FALSE(audio_received_); |
| 137 EXPECT_EQ(SpeechRecognizer::RECOGNIZER_NO_ERROR, error_); | 143 EXPECT_EQ(kErrorNone, error_); |
| 138 } | 144 } |
| 139 | 145 |
| 140 TEST_F(SpeechRecognizerTest, StopWithData) { | 146 TEST_F(SpeechRecognizerTest, StopWithData) { |
| 141 // Start recording, give some data and then stop. This should wait for the | 147 // Start recording, give some data and then stop. This should wait for the |
| 142 // network callback to arrive before completion. | 148 // network callback to arrive before completion. |
| 143 EXPECT_TRUE(recognizer_->StartRecording()); | 149 EXPECT_TRUE(recognizer_->StartRecording()); |
| 144 TestAudioInputController* controller = | 150 TestAudioInputController* controller = |
| 145 audio_input_controller_factory_.controller(); | 151 audio_input_controller_factory_.controller(); |
| 146 ASSERT_TRUE(controller); | 152 ASSERT_TRUE(controller); |
| 147 | 153 |
| 148 // Try sending 5 chunks of mock audio data and verify that each of them | 154 // Try sending 5 chunks of mock audio data and verify that each of them |
| 149 // resulted immediately in a packet sent out via the network. This verifies | 155 // resulted immediately in a packet sent out via the network. This verifies |
| 150 // that we are streaming out encoded data as chunks without waiting for the | 156 // that we are streaming out encoded data as chunks without waiting for the |
| 151 // full recording to complete. | 157 // full recording to complete. |
| 152 const size_t kNumChunks = 5; | 158 const size_t kNumChunks = 5; |
| 153 for (size_t i = 0; i < kNumChunks; ++i) { | 159 for (size_t i = 0; i < kNumChunks; ++i) { |
| 154 controller->event_handler()->OnData(controller, &audio_packet_[0], | 160 controller->event_handler()->OnData(controller, &audio_packet_[0], |
| 155 audio_packet_.size()); | 161 audio_packet_.size()); |
| 156 MessageLoop::current()->RunAllPending(); | 162 MessageLoop::current()->RunAllPending(); |
| 157 TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | 163 TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); |
| 158 ASSERT_TRUE(fetcher); | 164 ASSERT_TRUE(fetcher); |
| 159 EXPECT_EQ(i + 1, fetcher->upload_chunks().size()); | 165 EXPECT_EQ(i + 1, fetcher->upload_chunks().size()); |
| 160 } | 166 } |
| 161 | 167 |
| 162 recognizer_->StopRecording(); | 168 recognizer_->StopRecording(); |
| 163 EXPECT_TRUE(audio_received_); | 169 EXPECT_TRUE(audio_received_); |
| 164 EXPECT_TRUE(recording_complete_); | 170 EXPECT_TRUE(recording_complete_); |
| 165 EXPECT_FALSE(recognition_complete_); | 171 EXPECT_FALSE(recognition_complete_); |
| 166 EXPECT_FALSE(result_received_); | 172 EXPECT_FALSE(result_received_); |
| 167 EXPECT_EQ(SpeechRecognizer::RECOGNIZER_NO_ERROR, error_); | 173 EXPECT_EQ(kErrorNone, error_); |
| 168 | 174 |
| 169 // Issue the network callback to complete the process. | 175 // Issue the network callback to complete the process. |
| 170 TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | 176 TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); |
| 171 ASSERT_TRUE(fetcher); | 177 ASSERT_TRUE(fetcher); |
| 172 | 178 |
| 173 fetcher->set_url(fetcher->original_url()); | 179 fetcher->set_url(fetcher->original_url()); |
| 174 net::URLRequestStatus status; | 180 net::URLRequestStatus status; |
| 175 status.set_status(net::URLRequestStatus::SUCCESS); | 181 status.set_status(net::URLRequestStatus::SUCCESS); |
| 176 fetcher->set_status(status); | 182 fetcher->set_status(status); |
| 177 fetcher->set_response_code(200); | 183 fetcher->set_response_code(200); |
| 178 fetcher->SetResponseString("{\"hypotheses\":[{\"utterance\":\"123\"}]}"); | 184 fetcher->SetResponseString( |
| 185 "{\"status\":0,\"hypotheses\":[{\"utterance\":\"123\"}]}"); |
| 179 fetcher->delegate()->OnURLFetchComplete(fetcher); | 186 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 180 | 187 |
| 181 EXPECT_TRUE(recognition_complete_); | 188 EXPECT_TRUE(recognition_complete_); |
| 182 EXPECT_TRUE(result_received_); | 189 EXPECT_TRUE(result_received_); |
| 183 EXPECT_EQ(SpeechRecognizer::RECOGNIZER_NO_ERROR, error_); | 190 EXPECT_EQ(kErrorNone, error_); |
| 184 } | 191 } |
| 185 | 192 |
| 186 TEST_F(SpeechRecognizerTest, CancelWithData) { | 193 TEST_F(SpeechRecognizerTest, CancelWithData) { |
| 187 // Start recording, give some data and then cancel. This should create | 194 // Start recording, give some data and then cancel. This should create |
| 188 // a network request but give no callbacks. | 195 // a network request but give no callbacks. |
| 189 EXPECT_TRUE(recognizer_->StartRecording()); | 196 EXPECT_TRUE(recognizer_->StartRecording()); |
| 190 TestAudioInputController* controller = | 197 TestAudioInputController* controller = |
| 191 audio_input_controller_factory_.controller(); | 198 audio_input_controller_factory_.controller(); |
| 192 ASSERT_TRUE(controller); | 199 ASSERT_TRUE(controller); |
| 193 controller->event_handler()->OnData(controller, &audio_packet_[0], | 200 controller->event_handler()->OnData(controller, &audio_packet_[0], |
| 194 audio_packet_.size()); | 201 audio_packet_.size()); |
| 195 MessageLoop::current()->RunAllPending(); | 202 MessageLoop::current()->RunAllPending(); |
| 196 recognizer_->CancelRecognition(); | 203 recognizer_->CancelRecognition(); |
| 197 ASSERT_TRUE(url_fetcher_factory_.GetFetcherByID(0)); | 204 ASSERT_TRUE(url_fetcher_factory_.GetFetcherByID(0)); |
| 198 EXPECT_TRUE(audio_received_); | 205 EXPECT_TRUE(audio_received_); |
| 199 EXPECT_FALSE(recording_complete_); | 206 EXPECT_FALSE(recording_complete_); |
| 200 EXPECT_FALSE(recognition_complete_); | 207 EXPECT_FALSE(recognition_complete_); |
| 201 EXPECT_FALSE(result_received_); | 208 EXPECT_FALSE(result_received_); |
| 202 EXPECT_EQ(SpeechRecognizer::RECOGNIZER_NO_ERROR, error_); | 209 EXPECT_EQ(kErrorNone, error_); |
| 203 } | 210 } |
| 204 | 211 |
| 205 TEST_F(SpeechRecognizerTest, ConnectionError) { | 212 TEST_F(SpeechRecognizerTest, ConnectionError) { |
| 206 // Start recording, give some data and then stop. Issue the network callback | 213 // Start recording, give some data and then stop. Issue the network callback |
| 207 // with a connection error and verify that the recognizer bubbles the error up | 214 // with a connection error and verify that the recognizer bubbles the error up |
| 208 EXPECT_TRUE(recognizer_->StartRecording()); | 215 EXPECT_TRUE(recognizer_->StartRecording()); |
| 209 TestAudioInputController* controller = | 216 TestAudioInputController* controller = |
| 210 audio_input_controller_factory_.controller(); | 217 audio_input_controller_factory_.controller(); |
| 211 ASSERT_TRUE(controller); | 218 ASSERT_TRUE(controller); |
| 212 controller->event_handler()->OnData(controller, &audio_packet_[0], | 219 controller->event_handler()->OnData(controller, &audio_packet_[0], |
| 213 audio_packet_.size()); | 220 audio_packet_.size()); |
| 214 MessageLoop::current()->RunAllPending(); | 221 MessageLoop::current()->RunAllPending(); |
| 215 TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | 222 TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); |
| 216 ASSERT_TRUE(fetcher); | 223 ASSERT_TRUE(fetcher); |
| 217 | 224 |
| 218 recognizer_->StopRecording(); | 225 recognizer_->StopRecording(); |
| 219 EXPECT_TRUE(audio_received_); | 226 EXPECT_TRUE(audio_received_); |
| 220 EXPECT_TRUE(recording_complete_); | 227 EXPECT_TRUE(recording_complete_); |
| 221 EXPECT_FALSE(recognition_complete_); | 228 EXPECT_FALSE(recognition_complete_); |
| 222 EXPECT_FALSE(result_received_); | 229 EXPECT_FALSE(result_received_); |
| 223 EXPECT_EQ(SpeechRecognizer::RECOGNIZER_NO_ERROR, error_); | 230 EXPECT_EQ(kErrorNone, error_); |
| 224 | 231 |
| 225 // Issue the network callback to complete the process. | 232 // Issue the network callback to complete the process. |
| 226 fetcher->set_url(fetcher->original_url()); | 233 fetcher->set_url(fetcher->original_url()); |
| 227 net::URLRequestStatus status; | 234 net::URLRequestStatus status; |
| 228 status.set_status(net::URLRequestStatus::FAILED); | 235 status.set_status(net::URLRequestStatus::FAILED); |
| 229 status.set_error(net::ERR_CONNECTION_REFUSED); | 236 status.set_error(net::ERR_CONNECTION_REFUSED); |
| 230 fetcher->set_status(status); | 237 fetcher->set_status(status); |
| 231 fetcher->set_response_code(0); | 238 fetcher->set_response_code(0); |
| 232 fetcher->SetResponseString(""); | 239 fetcher->SetResponseString(""); |
| 233 fetcher->delegate()->OnURLFetchComplete(fetcher); | 240 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 234 | 241 |
| 235 EXPECT_FALSE(recognition_complete_); | 242 EXPECT_FALSE(recognition_complete_); |
| 236 EXPECT_FALSE(result_received_); | 243 EXPECT_FALSE(result_received_); |
| 237 EXPECT_EQ(SpeechRecognizer::RECOGNIZER_ERROR_NETWORK, error_); | 244 EXPECT_EQ(kErrorNetwork, error_); |
| 238 } | 245 } |
| 239 | 246 |
| 240 TEST_F(SpeechRecognizerTest, ServerError) { | 247 TEST_F(SpeechRecognizerTest, ServerError) { |
| 241 // Start recording, give some data and then stop. Issue the network callback | 248 // Start recording, give some data and then stop. Issue the network callback |
| 242 // with a 500 error and verify that the recognizer bubbles the error up | 249 // with a 500 error and verify that the recognizer bubbles the error up |
| 243 EXPECT_TRUE(recognizer_->StartRecording()); | 250 EXPECT_TRUE(recognizer_->StartRecording()); |
| 244 TestAudioInputController* controller = | 251 TestAudioInputController* controller = |
| 245 audio_input_controller_factory_.controller(); | 252 audio_input_controller_factory_.controller(); |
| 246 ASSERT_TRUE(controller); | 253 ASSERT_TRUE(controller); |
| 247 controller->event_handler()->OnData(controller, &audio_packet_[0], | 254 controller->event_handler()->OnData(controller, &audio_packet_[0], |
| 248 audio_packet_.size()); | 255 audio_packet_.size()); |
| 249 MessageLoop::current()->RunAllPending(); | 256 MessageLoop::current()->RunAllPending(); |
| 250 TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | 257 TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); |
| 251 ASSERT_TRUE(fetcher); | 258 ASSERT_TRUE(fetcher); |
| 252 | 259 |
| 253 recognizer_->StopRecording(); | 260 recognizer_->StopRecording(); |
| 254 EXPECT_TRUE(audio_received_); | 261 EXPECT_TRUE(audio_received_); |
| 255 EXPECT_TRUE(recording_complete_); | 262 EXPECT_TRUE(recording_complete_); |
| 256 EXPECT_FALSE(recognition_complete_); | 263 EXPECT_FALSE(recognition_complete_); |
| 257 EXPECT_FALSE(result_received_); | 264 EXPECT_FALSE(result_received_); |
| 258 EXPECT_EQ(SpeechRecognizer::RECOGNIZER_NO_ERROR, error_); | 265 EXPECT_EQ(kErrorNone, error_); |
| 259 | 266 |
| 260 // Issue the network callback to complete the process. | 267 // Issue the network callback to complete the process. |
| 261 fetcher->set_url(fetcher->original_url()); | 268 fetcher->set_url(fetcher->original_url()); |
| 262 net::URLRequestStatus status; | 269 net::URLRequestStatus status; |
| 263 status.set_status(net::URLRequestStatus::SUCCESS); | 270 status.set_status(net::URLRequestStatus::SUCCESS); |
| 264 fetcher->set_status(status); | 271 fetcher->set_status(status); |
| 265 fetcher->set_response_code(500); | 272 fetcher->set_response_code(500); |
| 266 fetcher->SetResponseString("Internal Server Error"); | 273 fetcher->SetResponseString("Internal Server Error"); |
| 267 fetcher->delegate()->OnURLFetchComplete(fetcher); | 274 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 268 | 275 |
| 269 EXPECT_FALSE(recognition_complete_); | 276 EXPECT_FALSE(recognition_complete_); |
| 270 EXPECT_FALSE(result_received_); | 277 EXPECT_FALSE(result_received_); |
| 271 EXPECT_EQ(SpeechRecognizer::RECOGNIZER_ERROR_NETWORK, error_); | 278 EXPECT_EQ(kErrorNetwork, error_); |
| 272 } | 279 } |
| 273 | 280 |
| 274 TEST_F(SpeechRecognizerTest, AudioControllerErrorNoData) { | 281 TEST_F(SpeechRecognizerTest, AudioControllerErrorNoData) { |
| 275 // Check if things tear down properly if AudioInputController threw an error. | 282 // Check if things tear down properly if AudioInputController threw an error. |
| 276 EXPECT_TRUE(recognizer_->StartRecording()); | 283 EXPECT_TRUE(recognizer_->StartRecording()); |
| 277 TestAudioInputController* controller = | 284 TestAudioInputController* controller = |
| 278 audio_input_controller_factory_.controller(); | 285 audio_input_controller_factory_.controller(); |
| 279 ASSERT_TRUE(controller); | 286 ASSERT_TRUE(controller); |
| 280 controller->event_handler()->OnError(controller, 0); | 287 controller->event_handler()->OnError(controller, 0); |
| 281 MessageLoop::current()->RunAllPending(); | 288 MessageLoop::current()->RunAllPending(); |
| 282 EXPECT_FALSE(audio_received_); | 289 EXPECT_FALSE(audio_received_); |
| 283 EXPECT_FALSE(recording_complete_); | 290 EXPECT_FALSE(recording_complete_); |
| 284 EXPECT_FALSE(recognition_complete_); | 291 EXPECT_FALSE(recognition_complete_); |
| 285 EXPECT_FALSE(result_received_); | 292 EXPECT_FALSE(result_received_); |
| 286 EXPECT_EQ(SpeechRecognizer::RECOGNIZER_ERROR_CAPTURE, error_); | 293 EXPECT_EQ(kErrorAudio, error_); |
| 287 } | 294 } |
| 288 | 295 |
| 289 TEST_F(SpeechRecognizerTest, AudioControllerErrorWithData) { | 296 TEST_F(SpeechRecognizerTest, AudioControllerErrorWithData) { |
| 290 // Check if things tear down properly if AudioInputController threw an error | 297 // Check if things tear down properly if AudioInputController threw an error |
| 291 // after giving some audio data. | 298 // after giving some audio data. |
| 292 EXPECT_TRUE(recognizer_->StartRecording()); | 299 EXPECT_TRUE(recognizer_->StartRecording()); |
| 293 TestAudioInputController* controller = | 300 TestAudioInputController* controller = |
| 294 audio_input_controller_factory_.controller(); | 301 audio_input_controller_factory_.controller(); |
| 295 ASSERT_TRUE(controller); | 302 ASSERT_TRUE(controller); |
| 296 controller->event_handler()->OnData(controller, &audio_packet_[0], | 303 controller->event_handler()->OnData(controller, &audio_packet_[0], |
| 297 audio_packet_.size()); | 304 audio_packet_.size()); |
| 298 controller->event_handler()->OnError(controller, 0); | 305 controller->event_handler()->OnError(controller, 0); |
| 299 MessageLoop::current()->RunAllPending(); | 306 MessageLoop::current()->RunAllPending(); |
| 300 ASSERT_TRUE(url_fetcher_factory_.GetFetcherByID(0)); | 307 ASSERT_TRUE(url_fetcher_factory_.GetFetcherByID(0)); |
| 301 EXPECT_TRUE(audio_received_); | 308 EXPECT_TRUE(audio_received_); |
| 302 EXPECT_FALSE(recording_complete_); | 309 EXPECT_FALSE(recording_complete_); |
| 303 EXPECT_FALSE(recognition_complete_); | 310 EXPECT_FALSE(recognition_complete_); |
| 304 EXPECT_FALSE(result_received_); | 311 EXPECT_FALSE(result_received_); |
| 305 EXPECT_EQ(SpeechRecognizer::RECOGNIZER_ERROR_CAPTURE, error_); | 312 EXPECT_EQ(kErrorAudio, error_); |
| 306 } | 313 } |
| 307 | 314 |
| 308 TEST_F(SpeechRecognizerTest, NoSpeechCallbackIssued) { | 315 TEST_F(SpeechRecognizerTest, NoSpeechCallbackIssued) { |
| 309 // Start recording and give a lot of packets with audio samples set to zero. | 316 // Start recording and give a lot of packets with audio samples set to zero. |
| 310 // This should trigger the no-speech detector and issue a callback. | 317 // This should trigger the no-speech detector and issue a callback. |
| 311 EXPECT_TRUE(recognizer_->StartRecording()); | 318 EXPECT_TRUE(recognizer_->StartRecording()); |
| 312 TestAudioInputController* controller = | 319 TestAudioInputController* controller = |
| 313 audio_input_controller_factory_.controller(); | 320 audio_input_controller_factory_.controller(); |
| 314 ASSERT_TRUE(controller); | 321 ASSERT_TRUE(controller); |
| 315 controller = audio_input_controller_factory_.controller(); | 322 controller = audio_input_controller_factory_.controller(); |
| 316 ASSERT_TRUE(controller); | 323 ASSERT_TRUE(controller); |
| 317 | 324 |
| 318 int num_packets = (SpeechRecognizer::kNoSpeechTimeoutSec * 1000) / | 325 int num_packets = (SpeechRecognizer::kNoSpeechTimeoutSec * 1000) / |
| 319 SpeechRecognizer::kAudioPacketIntervalMs; | 326 SpeechRecognizer::kAudioPacketIntervalMs; |
| 320 // The vector is already filled with zero value samples on create. | 327 // The vector is already filled with zero value samples on create. |
| 321 for (int i = 0; i < num_packets; ++i) { | 328 for (int i = 0; i < num_packets; ++i) { |
| 322 controller->event_handler()->OnData(controller, &audio_packet_[0], | 329 controller->event_handler()->OnData(controller, &audio_packet_[0], |
| 323 audio_packet_.size()); | 330 audio_packet_.size()); |
| 324 } | 331 } |
| 325 MessageLoop::current()->RunAllPending(); | 332 MessageLoop::current()->RunAllPending(); |
| 326 EXPECT_TRUE(audio_received_); | 333 EXPECT_TRUE(audio_received_); |
| 327 EXPECT_FALSE(recording_complete_); | 334 EXPECT_FALSE(recording_complete_); |
| 328 EXPECT_FALSE(recognition_complete_); | 335 EXPECT_FALSE(recognition_complete_); |
| 329 EXPECT_FALSE(result_received_); | 336 EXPECT_FALSE(result_received_); |
| 330 EXPECT_EQ(SpeechRecognizer::RECOGNIZER_ERROR_NO_SPEECH, error_); | 337 EXPECT_EQ(kErrorNoSpeech, error_); |
| 331 } | 338 } |
| 332 | 339 |
| 333 TEST_F(SpeechRecognizerTest, NoSpeechCallbackNotIssued) { | 340 TEST_F(SpeechRecognizerTest, NoSpeechCallbackNotIssued) { |
| 334 // Start recording and give a lot of packets with audio samples set to zero | 341 // Start recording and give a lot of packets with audio samples set to zero |
| 335 // and then some more with reasonably loud audio samples. This should be | 342 // and then some more with reasonably loud audio samples. This should be |
| 336 // treated as normal speech input and the no-speech detector should not get | 343 // treated as normal speech input and the no-speech detector should not get |
| 337 // triggered. | 344 // triggered. |
| 338 EXPECT_TRUE(recognizer_->StartRecording()); | 345 EXPECT_TRUE(recognizer_->StartRecording()); |
| 339 TestAudioInputController* controller = | 346 TestAudioInputController* controller = |
| 340 audio_input_controller_factory_.controller(); | 347 audio_input_controller_factory_.controller(); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 351 audio_packet_.size()); | 358 audio_packet_.size()); |
| 352 } | 359 } |
| 353 | 360 |
| 354 FillPacketWithTestWaveform(); | 361 FillPacketWithTestWaveform(); |
| 355 for (int i = 0; i < num_packets / 2; ++i) { | 362 for (int i = 0; i < num_packets / 2; ++i) { |
| 356 controller->event_handler()->OnData(controller, &audio_packet_[0], | 363 controller->event_handler()->OnData(controller, &audio_packet_[0], |
| 357 audio_packet_.size()); | 364 audio_packet_.size()); |
| 358 } | 365 } |
| 359 | 366 |
| 360 MessageLoop::current()->RunAllPending(); | 367 MessageLoop::current()->RunAllPending(); |
| 361 EXPECT_EQ(SpeechRecognizer::RECOGNIZER_NO_ERROR, error_); | 368 EXPECT_EQ(kErrorNone, error_); |
| 362 EXPECT_TRUE(audio_received_); | 369 EXPECT_TRUE(audio_received_); |
| 363 EXPECT_FALSE(recording_complete_); | 370 EXPECT_FALSE(recording_complete_); |
| 364 EXPECT_FALSE(recognition_complete_); | 371 EXPECT_FALSE(recognition_complete_); |
| 365 recognizer_->CancelRecognition(); | 372 recognizer_->CancelRecognition(); |
| 366 } | 373 } |
| 367 | 374 |
| 368 TEST_F(SpeechRecognizerTest, SetInputVolumeCallback) { | 375 TEST_F(SpeechRecognizerTest, SetInputVolumeCallback) { |
| 369 // Start recording and give a lot of packets with audio samples set to zero | 376 // Start recording and give a lot of packets with audio samples set to zero |
| 370 // and then some more with reasonably loud audio samples. Check that we don't | 377 // and then some more with reasonably loud audio samples. Check that we don't |
| 371 // get the callback during estimation phase, then get zero for the silence | 378 // get the callback during estimation phase, then get zero for the silence |
| (...skipping 22 matching lines...) Expand all Loading... |
| 394 MessageLoop::current()->RunAllPending(); | 401 MessageLoop::current()->RunAllPending(); |
| 395 EXPECT_FLOAT_EQ(0.74939233f, volume_); | 402 EXPECT_FLOAT_EQ(0.74939233f, volume_); |
| 396 | 403 |
| 397 FillPacketWithTestWaveform(); | 404 FillPacketWithTestWaveform(); |
| 398 controller->event_handler()->OnData(controller, &audio_packet_[0], | 405 controller->event_handler()->OnData(controller, &audio_packet_[0], |
| 399 audio_packet_.size()); | 406 audio_packet_.size()); |
| 400 MessageLoop::current()->RunAllPending(); | 407 MessageLoop::current()->RunAllPending(); |
| 401 EXPECT_FLOAT_EQ(0.89926866f, volume_); | 408 EXPECT_FLOAT_EQ(0.89926866f, volume_); |
| 402 EXPECT_FLOAT_EQ(0.75071919f, noise_volume_); | 409 EXPECT_FLOAT_EQ(0.75071919f, noise_volume_); |
| 403 | 410 |
| 404 EXPECT_EQ(SpeechRecognizer::RECOGNIZER_NO_ERROR, error_); | 411 EXPECT_EQ(kErrorNone, error_); |
| 405 EXPECT_FALSE(recording_complete_); | 412 EXPECT_FALSE(recording_complete_); |
| 406 EXPECT_FALSE(recognition_complete_); | 413 EXPECT_FALSE(recognition_complete_); |
| 407 recognizer_->CancelRecognition(); | 414 recognizer_->CancelRecognition(); |
| 408 } | 415 } |
| 409 | 416 |
| 410 } // namespace speech_input | 417 } // namespace speech_input |
| OLD | NEW |