fake_speech_recognition_manager.cc revision 868fa2fe829687343ffae624259930155e16dbd8
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/strings/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 101string16 FakeSpeechRecognitionManager::GetAudioInputDeviceModel() { 102 return string16(); 103} 104 105int FakeSpeechRecognitionManager::GetSession(int render_process_id, 106 int render_view_id, 107 int request_id) const { 108 return session_ctx_.render_process_id == render_process_id && 109 session_ctx_.render_view_id == render_view_id && 110 session_ctx_.request_id == request_id; 111} 112 113const SpeechRecognitionSessionConfig& 114 FakeSpeechRecognitionManager::GetSessionConfig(int session_id) const { 115 EXPECT_EQ(session_id, session_id_); 116 return session_config_; 117} 118 119SpeechRecognitionSessionContext FakeSpeechRecognitionManager::GetSessionContext( 120 int session_id) const { 121 EXPECT_EQ(session_id, session_id_); 122 return session_ctx_; 123} 124 125void FakeSpeechRecognitionManager::SetFakeRecognitionResult() { 126 if (!session_id_) // Do a check in case we were cancelled.. 127 return; 128 129 VLOG(1) << "Setting fake recognition result."; 130 listener_->OnAudioEnd(session_id_); 131 SpeechRecognitionResult result; 132 result.hypotheses.push_back(SpeechRecognitionHypothesis( 133 ASCIIToUTF16(kTestResult), 1.0)); 134 SpeechRecognitionResults results; 135 results.push_back(result); 136 listener_->OnRecognitionResults(session_id_, results); 137 listener_->OnRecognitionEnd(session_id_); 138 session_id_ = 0; 139 listener_ = NULL; 140 VLOG(1) << "Finished setting fake recognition result."; 141} 142 143} // namespace content 144