Index: chrome/browser/speech/speech_input_extension_apitest.cc |
=================================================================== |
--- chrome/browser/speech/speech_input_extension_apitest.cc (revision 195413) |
+++ chrome/browser/speech/speech_input_extension_apitest.cc (working copy) |
@@ -1,225 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "base/bind.h" |
-#include "base/command_line.h" |
-#include "base/message_loop.h" |
-#include "base/utf_string_conversions.h" |
-#include "chrome/browser/extensions/extension_apitest.h" |
-#include "chrome/browser/speech/speech_input_extension_api.h" |
-#include "chrome/browser/speech/speech_input_extension_manager.h" |
-#include "chrome/browser/ui/browser.h" |
-#include "chrome/common/chrome_notification_types.h" |
-#include "chrome/common/chrome_switches.h" |
-#include "content/public/browser/speech_recognition_event_listener.h" |
-#include "content/public/common/speech_recognition_error.h" |
-#include "content/public/common/speech_recognition_result.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-using content::BrowserThread; |
- |
-namespace net { |
-class URLRequestContextGetter; |
-} |
- |
-namespace { |
-const int kSessionIDForTests = 0; |
-} |
- |
-// Mock class used to test the extension speech input API. |
-class SpeechInputExtensionApiTest : public ExtensionApiTest, |
- public SpeechInputExtensionInterface { |
- public: |
- SpeechInputExtensionApiTest(); |
- virtual ~SpeechInputExtensionApiTest(); |
- |
- void SetRecordingDevicesAvailable(bool available) { |
- recording_devices_available_ = available; |
- } |
- |
- void SetRecognitionError(content::SpeechRecognitionErrorCode error) { |
- next_error_ = error; |
- } |
- |
- void SetRecognitionResult(const content::SpeechRecognitionResult& result) { |
- next_result_ = result; |
- } |
- |
- void SetRecognitionDelay(int result_delay_ms) { |
- result_delay_ms_ = result_delay_ms; |
- } |
- |
- // Used as delay when the corresponding call should not be dispatched. |
- static const int kDontDispatchCall = -1; |
- |
- // InProcessBrowserTest methods. |
- virtual void SetUpOnMainThread() OVERRIDE { |
- manager_ = SpeechInputExtensionManager::GetForProfile(browser()->profile()); |
- } |
- |
- // ExtensionApiTest methods. |
- virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
- ExtensionApiTest::SetUpCommandLine(command_line); |
- command_line->AppendSwitch(switches::kEnableExperimentalExtensionApis); |
- } |
- |
- // SpeechInputExtensionInterface methods. |
- virtual bool HasAudioInputDevices() OVERRIDE { |
- return recording_devices_available_; |
- } |
- |
- virtual bool IsCapturingAudio() OVERRIDE { |
- // Only the mock recognizer is supposed to be recording during testing. |
- return HasValidRecognizer(); |
- } |
- |
- virtual bool HasValidRecognizer() OVERRIDE { |
- return recognizer_is_valid_; |
- } |
- |
- virtual void StartRecording( |
- content::SpeechRecognitionEventListener* listener, |
- net::URLRequestContextGetter* context_getter, |
- const std::string& extension_name, |
- const std::string& language, |
- const std::string& grammar, |
- bool filter_profanities, |
- int render_process_id) OVERRIDE; |
- |
- virtual void StopRecording(bool recognition_failed) OVERRIDE; |
- |
- SpeechInputExtensionManager* GetManager() { |
- return manager_.get(); |
- } |
- |
- // Auxiliary class used to hook the API manager into the test during its |
- // lifetime. Required since browser() is not available during the set up |
- // or tear down callbacks, or during the test class construction. |
- class AutoManagerHook { |
- public: |
- explicit AutoManagerHook(SpeechInputExtensionApiTest* test) |
- : test_(test) { |
- test_->GetManager()->SetSpeechInputExtensionInterface(test_); |
- } |
- |
- ~AutoManagerHook() { |
- test_->GetManager()->SetSpeechInputExtensionInterface(NULL); |
- } |
- |
- private: |
- SpeechInputExtensionApiTest* test_; |
- }; |
- |
- private: |
- void ProvideResults(); |
- |
- bool recording_devices_available_; |
- bool recognizer_is_valid_; |
- content::SpeechRecognitionErrorCode next_error_; |
- content::SpeechRecognitionResult next_result_; |
- int result_delay_ms_; |
- |
- scoped_refptr<SpeechInputExtensionManager> manager_; |
-}; |
- |
-SpeechInputExtensionApiTest::SpeechInputExtensionApiTest() |
- : recording_devices_available_(true), |
- recognizer_is_valid_(false), |
- next_error_(content::SPEECH_RECOGNITION_ERROR_NONE), |
- result_delay_ms_(0) { |
-} |
- |
-SpeechInputExtensionApiTest::~SpeechInputExtensionApiTest() { |
-} |
- |
-void SpeechInputExtensionApiTest::StartRecording( |
- content::SpeechRecognitionEventListener* listener, |
- net::URLRequestContextGetter* context_getter, |
- const std::string& extension_name, |
- const std::string& language, |
- const std::string& grammar, |
- bool filter_profanities, |
- int render_process_id) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- recognizer_is_valid_ = true; |
- |
- // Notify that recording started. |
- MessageLoop::current()->PostDelayedTask( |
- FROM_HERE, |
- base::Bind(&SpeechInputExtensionManager::OnAudioStart, |
- GetManager(), |
- kSessionIDForTests), |
- base::TimeDelta()); |
- |
- // Notify sound start in the input device. |
- MessageLoop::current()->PostDelayedTask( |
- FROM_HERE, |
- base::Bind(&SpeechInputExtensionManager::OnSoundStart, |
- GetManager(), |
- kSessionIDForTests), |
- base::TimeDelta()); |
- |
- if (result_delay_ms_ != kDontDispatchCall) { |
- // Dispatch the recognition results. |
- MessageLoop::current()->PostDelayedTask( |
- FROM_HERE, |
- base::Bind(&SpeechInputExtensionApiTest::ProvideResults, this), |
- base::TimeDelta::FromMilliseconds(result_delay_ms_)); |
- } |
-} |
- |
-void SpeechInputExtensionApiTest::StopRecording(bool recognition_failed) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- recognizer_is_valid_ = false; |
-} |
- |
-void SpeechInputExtensionApiTest::ProvideResults() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- if (next_error_ != content::SPEECH_RECOGNITION_ERROR_NONE) { |
- GetManager()->OnRecognitionError( |
- kSessionIDForTests, content::SpeechRecognitionError(next_error_)); |
- return; |
- } |
- |
- GetManager()->OnSoundEnd(kSessionIDForTests); |
- GetManager()->OnAudioEnd(kSessionIDForTests); |
- content::SpeechRecognitionResults results; |
- results.push_back(next_result_); |
- GetManager()->OnRecognitionResults(kSessionIDForTests, results); |
- GetManager()->OnRecognitionEnd(kSessionIDForTests); |
-} |
- |
-// Every test should leave the manager in the idle state when finished. |
-IN_PROC_BROWSER_TEST_F(SpeechInputExtensionApiTest, StartStopTest) { |
- AutoManagerHook hook(this); |
- |
- SetRecognitionDelay(kDontDispatchCall); |
- ASSERT_TRUE(RunExtensionTest("speech_input/start_stop")) << message_; |
-} |
- |
-IN_PROC_BROWSER_TEST_F(SpeechInputExtensionApiTest, NoDevicesAvailable) { |
- AutoManagerHook hook(this); |
- |
- SetRecordingDevicesAvailable(false); |
- ASSERT_TRUE(RunExtensionTest("speech_input/start_error")) << message_; |
-} |
- |
-IN_PROC_BROWSER_TEST_F(SpeechInputExtensionApiTest, RecognitionSuccessful) { |
- AutoManagerHook hook(this); |
- |
- content::SpeechRecognitionResult result; |
- result.hypotheses.push_back( |
- content::SpeechRecognitionHypothesis( |
- UTF8ToUTF16("this is a test"), 0.99)); |
- SetRecognitionResult(result); |
- ASSERT_TRUE(RunExtensionTest("speech_input/recognition")) << message_; |
-} |
- |
-IN_PROC_BROWSER_TEST_F(SpeechInputExtensionApiTest, RecognitionError) { |
- AutoManagerHook hook(this); |
- |
- SetRecognitionError(content::SPEECH_RECOGNITION_ERROR_NETWORK); |
- ASSERT_TRUE(RunExtensionTest("speech_input/recognition_error")) << message_; |
-} |