fake_speech_recognition_manager.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "content/public/test/fake_speech_recognition_manager.h" 6 7#include "base/bind.h" 8#include "base/message_loop.h" 9#include "base/utf_string_conversions.h" 10#include "content/public/browser/speech_recognition_event_listener.h" 11#include "content/public/common/speech_recognition_result.h" 12#include "testing/gtest/include/gtest/gtest.h" 13 14namespace { 15const char kTestResult[] = "Pictures of the moon"; 16} // namespace 17 18namespace content { 19 20FakeSpeechRecognitionManager::FakeSpeechRecognitionManager() 21 : session_id_(0), 22 listener_(NULL), 23 fake_result_(kTestResult), 24 did_cancel_all_(false), 25 should_send_fake_response_(true), 26 recognition_started_event_(false, false) { 27} 28 29FakeSpeechRecognitionManager::~FakeSpeechRecognitionManager() { 30} 31 32void FakeSpeechRecognitionManager::SetFakeResult(const std::string& value) { 33 fake_result_ = value; 34} 35 36int FakeSpeechRecognitionManager::CreateSession( 37 const SpeechRecognitionSessionConfig& config) { 38 VLOG(1) << "FAKE CreateSession invoked."; 39 EXPECT_EQ(0, session_id_); 40 EXPECT_EQ(NULL, listener_); 41 listener_ = config.event_listener; 42 if (config.grammars.size() > 0) 43 grammar_ = config.grammars[0].url; 44 session_ctx_ = config.initial_context; 45 session_config_ = config; 46 session_id_ = 1; 47 return session_id_; 48} 49 50void FakeSpeechRecognitionManager::StartSession(int session_id) { 51 VLOG(1) << "FAKE StartSession invoked."; 52 EXPECT_EQ(session_id, session_id_); 53 EXPECT_TRUE(listener_ != NULL); 54 55 if (should_send_fake_response_) { 56 // Give the fake result in a short while. 57 base::MessageLoop::current()->PostTask( 58 FROM_HERE, 59 base::Bind( 60 &FakeSpeechRecognitionManager::SetFakeRecognitionResult, 61 // This class does not need to be refcounted (typically done by 62 // PostTask) since it will outlive the test and gets released only 63 // when the test shuts down. Disabling refcounting here saves a bit 64 // of unnecessary code and the factory method can return a plain 65 // pointer below as required by the real code. 66 base::Unretained(this))); 67 } 68 recognition_started_event_.Signal(); 69} 70 71void FakeSpeechRecognitionManager::AbortSession(int session_id) { 72 VLOG(1) << "FAKE AbortSession invoked."; 73 EXPECT_EQ(session_id_, session_id); 74 session_id_ = 0; 75 listener_ = NULL; 76} 77 78void FakeSpeechRecognitionManager::StopAudioCaptureForSession(int session_id) { 79 VLOG(1) << "StopRecording invoked."; 80 EXPECT_EQ(session_id_, session_id); 81 // Nothing to do here since we aren't really recording. 82} 83 84void FakeSpeechRecognitionManager::AbortAllSessionsForListener( 85 SpeechRecognitionEventListener* listener) { 86 VLOG(1) << "CancelAllRequestsWithDelegate invoked."; 87 // listener_ is set to NULL if a fake result was received (see below), so 88 // check that listener_ matches the incoming parameter only when there is 89 // no fake result sent. 90 EXPECT_TRUE(should_send_fake_response_ || listener_ == listener); 91 did_cancel_all_ = true; 92} 93 94void FakeSpeechRecognitionManager::AbortAllSessionsForRenderView( 95 int render_process_id, int render_view_id) { 96 NOTREACHED(); 97} 98 99bool FakeSpeechRecognitionManager::HasAudioInputDevices() { return true; } 100 101bool FakeSpeechRecognitionManager::IsCapturingAudio() { return true; } 102 103string16 FakeSpeechRecognitionManager::GetAudioInputDeviceModel() { 104 return string16(); 105} 106 107int FakeSpeechRecognitionManager::GetSession(int render_process_id, 108 int render_view_id, 109 int request_id) const { 110 return session_ctx_.render_process_id == render_process_id && 111 session_ctx_.render_view_id == render_view_id && 112 session_ctx_.request_id == request_id; 113} 114 115const SpeechRecognitionSessionConfig& 116 FakeSpeechRecognitionManager::GetSessionConfig(int session_id) const { 117 EXPECT_EQ(session_id, session_id_); 118 return session_config_; 119} 120 121SpeechRecognitionSessionContext FakeSpeechRecognitionManager::GetSessionContext( 122 int session_id) const { 123 EXPECT_EQ(session_id, session_id_); 124 return session_ctx_; 125} 126 127void FakeSpeechRecognitionManager::SetFakeRecognitionResult() { 128 if (!session_id_) // Do a check in case we were cancelled.. 129 return; 130 131 VLOG(1) << "Setting fake recognition result."; 132 listener_->OnAudioEnd(session_id_); 133 SpeechRecognitionResult result; 134 result.hypotheses.push_back(SpeechRecognitionHypothesis( 135 ASCIIToUTF16(kTestResult), 1.0)); 136 SpeechRecognitionResults results; 137 results.push_back(result); 138 listener_->OnRecognitionResults(session_id_, results); 139 listener_->OnRecognitionEnd(session_id_); 140 session_id_ = 0; 141 listener_ = NULL; 142 VLOG(1) << "Finished setting fake recognition result."; 143} 144 145} // namespace content 146