10f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
20f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
30f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// found in the LICENSE file.
40f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
50f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include <vector>
60f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
70f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "base/compiler_specific.h"
80f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "base/logging.h"
90f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "base/message_loop/message_loop.h"
110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "base/run_loop.h"
120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "base/strings/string_piece.h"
130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "media/audio/audio_manager.h"
140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "media/audio/sounds/audio_stream_handler.h"
150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "media/audio/sounds/sounds_manager.h"
160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "media/audio/sounds/test_data.h"
170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)namespace media {
200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)class SoundsManagerTest : public testing::Test {
220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) public:
230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  SoundsManagerTest() {}
240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  virtual ~SoundsManagerTest() {}
250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    audio_manager_.reset(AudioManager::CreateForTesting());
280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    SoundsManager::Create();
290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  }
300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  virtual void TearDown() OVERRIDE {
320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    SoundsManager::Shutdown();
330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    audio_manager_.reset();
340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  }
350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
360f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  void SetObserverForTesting(AudioStreamHandler::TestObserver* observer) {
370f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    AudioStreamHandler::SetObserverForTesting(observer);
380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  }
390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) private:
410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  scoped_ptr<AudioManager> audio_manager_;
420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  base::MessageLoop message_loop_;
440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)};
450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST_F(SoundsManagerTest, Play) {
470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_TRUE(SoundsManager::Get());
480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  base::RunLoop run_loop;
500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  TestObserver observer(run_loop.QuitClosure());
510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  SetObserverForTesting(&observer);
530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(SoundsManager::Get()->Initialize(
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      kTestAudioKey,
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::StringPiece(kTestAudioData, arraysize(kTestAudioData))));
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_EQ(20,
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            SoundsManager::Get()->GetDuration(kTestAudioKey).InMicroseconds());
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(SoundsManager::Get()->Play(kTestAudioKey));
600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  run_loop.Run();
610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_EQ(1, observer.num_play_requests());
630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_EQ(1, observer.num_stop_requests());
640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_EQ(4, observer.cursor());
650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  SetObserverForTesting(NULL);
670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}  // namespace media
70