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
3 // found in the LICENSE file.
5 // Unit tests for the TTS Controller.
7 #include "base/values.h"
8 #include "chrome/browser/speech/tts_controller.h"
9 #include "chrome/browser/speech/tts_platform.h"
10 #include "testing/gtest/include/gtest/gtest.h"
12 class TtsApiControllerTest
: public testing::Test
{
15 // Platform Tts implementation that does nothing.
16 class DummyTtsPlatformImpl
: public TtsPlatformImpl
{
18 DummyTtsPlatformImpl() {}
19 virtual ~DummyTtsPlatformImpl() {}
20 virtual bool PlatformImplAvailable() OVERRIDE
{ return true; }
23 const std::string
& utterance
,
24 const std::string
& lang
,
25 const VoiceData
& voice
,
26 const UtteranceContinuousParameters
& params
) OVERRIDE
{
29 virtual bool IsSpeaking() OVERRIDE
{ return false; }
30 virtual bool StopSpeaking() OVERRIDE
{ return true; }
31 virtual void Pause() OVERRIDE
{}
32 virtual void Resume() OVERRIDE
{}
33 virtual void GetVoices(std::vector
<VoiceData
>* out_voices
) OVERRIDE
{}
34 virtual std::string
error() OVERRIDE
{ return std::string(); }
35 virtual void clear_error() OVERRIDE
{}
36 virtual void set_error(const std::string
& error
) OVERRIDE
{}
39 // Subclass of TtsController with a public ctor and dtor.
40 class TestableTtsController
: public TtsController
{
42 TestableTtsController() {}
43 virtual ~TestableTtsController() {}
46 TEST_F(TtsApiControllerTest
, TestTtsControllerShutdown
) {
47 DummyTtsPlatformImpl platform_impl
;
48 TestableTtsController
* controller
=
49 new TestableTtsController();
50 controller
->SetPlatformImpl(&platform_impl
);
52 Utterance
* utterance1
= new Utterance(NULL
);
53 utterance1
->set_can_enqueue(true);
54 utterance1
->set_src_id(1);
55 controller
->SpeakOrEnqueue(utterance1
);
57 Utterance
* utterance2
= new Utterance(NULL
);
58 utterance2
->set_can_enqueue(true);
59 utterance2
->set_src_id(2);
60 controller
->SpeakOrEnqueue(utterance2
);
62 // Make sure that deleting the controller when there are pending
63 // utterances doesn't cause a crash.