sounds_manager_unittest.cc revision 0f1bc08d4cfcc34181b0b5cbf065c40f687bf740
1// Copyright 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 <vector>
6
7#include "base/compiler_specific.h"
8#include "base/logging.h"
9#include "base/memory/scoped_ptr.h"
10#include "base/message_loop/message_loop.h"
11#include "base/run_loop.h"
12#include "base/strings/string_piece.h"
13#include "media/audio/audio_manager.h"
14#include "media/audio/sounds/audio_stream_handler.h"
15#include "media/audio/sounds/sounds_manager.h"
16#include "media/audio/sounds/test_data.h"
17#include "testing/gtest/include/gtest/gtest.h"
18
19namespace media {
20
21class SoundsManagerTest : public testing::Test {
22 public:
23  SoundsManagerTest() {}
24  virtual ~SoundsManagerTest() {}
25
26  virtual void SetUp() OVERRIDE {
27    audio_manager_.reset(AudioManager::Create());
28    SoundsManager::Create();
29
30    std::vector<base::StringPiece> resources;
31    for (size_t i = 0;
32         i < static_cast<size_t>(SoundsManager::SOUND_COUNT); ++i) {
33      resources.push_back(base::StringPiece(kTestAudioData,
34                                            arraysize(kTestAudioData)));
35    }
36    CHECK(SoundsManager::Get()->Initialize(resources));
37  }
38
39  virtual void TearDown() OVERRIDE {
40    SoundsManager::Shutdown();
41    audio_manager_.reset();
42  }
43
44  void SetObserverForTesting(AudioStreamHandler::TestObserver* observer) {
45    AudioStreamHandler::SetObserverForTesting(observer);
46  }
47
48 private:
49  scoped_ptr<AudioManager> audio_manager_;
50
51  base::MessageLoop message_loop_;
52};
53
54TEST_F(SoundsManagerTest, Play) {
55  ASSERT_TRUE(SoundsManager::Get());
56
57  base::RunLoop run_loop;
58  TestObserver observer(run_loop.QuitClosure());
59
60  SetObserverForTesting(&observer);
61
62  ASSERT_EQ(41, SoundsManager::Get()->GetDuration(
63      SoundsManager::SOUND_STARTUP).InMicroseconds());
64  ASSERT_TRUE(SoundsManager::Get()->Play(SoundsManager::SOUND_STARTUP));
65  run_loop.Run();
66
67  ASSERT_EQ(1, observer.num_play_requests());
68  ASSERT_EQ(1, observer.num_stop_requests());
69  ASSERT_EQ(4, observer.cursor());
70
71  SetObserverForTesting(NULL);
72}
73
74}  // namespace media
75