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