Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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. | |
| 4 | |
| 5 #include "base/message_loop.h" | |
| 6 #include "base/synchronization/waitable_event.h" | |
| 7 #include "media/audio/audio_manager.h" | |
| 8 #include "media/audio/simple_sources.h" | |
| 9 #include "media/audio/virtual_audio_input_stream.h" | |
| 10 #include "media/audio/virtual_audio_output_stream.h" | |
| 11 #include "testing/gmock/include/gmock/gmock.h" | |
| 12 #include "testing/gtest/include/gtest/gtest.h" | |
| 13 | |
| 14 using ::testing::_; | |
| 15 | |
| 16 namespace media { | |
| 17 | |
| 18 class MockVirtualAudioInputStream : public VirtualAudioInputStream { | |
| 19 public: | |
| 20 MockVirtualAudioInputStream(AudioManagerBase* manager, AudioParameters params) | |
| 21 : VirtualAudioInputStream(manager, params) {} | |
| 22 ~MockVirtualAudioInputStream() {} | |
| 23 | |
| 24 MOCK_METHOD2(AddOutputStream, void(VirtualAudioOutputStream* stream, | |
| 25 const AudioParameters& output_params)); | |
| 26 MOCK_METHOD2(RemoveOutputStream, void(VirtualAudioOutputStream* stream, | |
| 27 const AudioParameters& output_params)); | |
| 28 | |
| 29 private: | |
| 30 DISALLOW_COPY_AND_ASSIGN(MockVirtualAudioInputStream); | |
| 31 }; | |
| 32 | |
| 33 // Test VirtualAudioOutputStream that overrides the CalledOnAudioThread method. | |
| 34 class TestVirtualAudioOutputStream : public VirtualAudioOutputStream { | |
| 35 public: | |
| 36 TestVirtualAudioOutputStream(AudioManagerBase* manager, | |
| 37 AudioParameters params, | |
| 38 VirtualAudioInputStream* target) | |
| 39 : VirtualAudioOutputStream(manager, params, target) {} | |
| 40 | |
| 41 private: | |
| 42 virtual bool CalledOnAudioThread() OVERRIDE { return true; } | |
| 43 | |
| 44 DISALLOW_COPY_AND_ASSIGN(TestVirtualAudioOutputStream); | |
| 45 }; | |
| 46 | |
| 47 class MockAudioDeviceListener : public AudioManager::AudioDeviceListener { | |
| 48 public: | |
| 49 MOCK_METHOD0(OnDeviceChange, void()); | |
| 50 }; | |
| 51 | |
| 52 class VirtualAudioOutputStreamTest : public testing::Test { | |
| 53 public: | |
| 54 void AddListenerAndCreateVirtualOnAudioThread(AudioManager* manager, | |
| 55 AudioManager::AudioDeviceListener* listener) { | |
| 56 manager->AddOutputDeviceChangeListener(listener); | |
| 57 | |
| 58 AudioParameters params(AudioParameters::AUDIO_VIRTUAL, CHANNEL_LAYOUT_MONO, | |
| 59 8000, 8, 128); | |
| 60 AudioInputStream* stream = manager->MakeAudioInputStream(params, "1"); | |
| 61 stream->Close(); | |
| 62 signal_.Signal(); | |
| 63 } | |
| 64 | |
| 65 void RemoveListenerOnAudioThread(AudioManager* manager, | |
| 66 AudioManager::AudioDeviceListener* listener) { | |
| 67 manager->RemoveOutputDeviceChangeListener(listener); | |
| 68 signal_.Signal(); | |
| 69 } | |
| 70 | |
| 71 protected: | |
| 72 VirtualAudioOutputStreamTest() : signal_(false, false) {} | |
| 73 | |
| 74 base::WaitableEvent signal_; | |
| 75 | |
| 76 private: | |
| 77 DISALLOW_COPY_AND_ASSIGN(VirtualAudioOutputStreamTest); | |
| 78 }; | |
| 79 | |
| 80 TEST_F(VirtualAudioOutputStreamTest, StartStopStartStop) { | |
| 81 scoped_ptr<AudioManager> audio_manager(AudioManager::Create()); | |
| 82 | |
| 83 AudioParameters params(AudioParameters::AUDIO_VIRTUAL, CHANNEL_LAYOUT_MONO, | |
| 84 8000, 8, 128); | |
|
DaleCurtis
2012/12/03 19:27:28
Bad indent. Fix here and all over.
justinlin
2012/12/03 21:18:42
Done.
| |
| 85 AudioParameters output_params(AudioParameters::AUDIO_PCM_LINEAR, | |
| 86 CHANNEL_LAYOUT_MONO, 8000, 8, 128); | |
| 87 | |
| 88 MockVirtualAudioInputStream input_stream( | |
| 89 static_cast<AudioManagerBase*>(audio_manager.get()), params); | |
| 90 | |
| 91 EXPECT_CALL(input_stream, AddOutputStream(_, _)).Times(2); | |
| 92 EXPECT_CALL(input_stream, RemoveOutputStream(_, _)).Times(2); | |
| 93 | |
| 94 TestVirtualAudioOutputStream output_stream( | |
| 95 static_cast<AudioManagerBase*>(audio_manager.get()), output_params, | |
| 96 &input_stream); | |
| 97 | |
| 98 SineWaveAudioSource source(CHANNEL_LAYOUT_STEREO, 200.0, 128); | |
| 99 output_stream.Start(&source); | |
| 100 output_stream.Stop(); | |
| 101 output_stream.Start(&source); | |
| 102 output_stream.Stop(); | |
|
DaleCurtis
2012/12/03 19:27:28
No need to Close()?
justinlin
2012/12/03 21:18:42
We can't close here since this output stream is no
| |
| 103 } | |
| 104 | |
| 105 // Tests that we get notifications to reattach output streams when we create a | |
| 106 // VirtualAudioInputStream. | |
| 107 TEST_F(VirtualAudioOutputStreamTest, OutputStreamsNotified) { | |
| 108 scoped_ptr<AudioManager> audio_manager(AudioManager::Create()); | |
| 109 | |
| 110 MockAudioDeviceListener mock_listener; | |
| 111 EXPECT_CALL(mock_listener, OnDeviceChange()).Times(2); | |
| 112 | |
| 113 audio_manager->GetMessageLoop()->PostTask(FROM_HERE, base::Bind( | |
| 114 &VirtualAudioOutputStreamTest::AddListenerAndCreateVirtualOnAudioThread, | |
| 115 base::Unretained(this), audio_manager.get(), &mock_listener)); | |
| 116 | |
| 117 signal_.Wait(); | |
| 118 | |
| 119 audio_manager->GetMessageLoop()->PostTask(FROM_HERE, base::Bind( | |
| 120 &VirtualAudioOutputStreamTest::RemoveListenerOnAudioThread, | |
| 121 base::Unretained(this), audio_manager.get(), &mock_listener)); | |
| 122 | |
| 123 signal_.Wait(); | |
| 124 } | |
| 125 | |
| 126 } // namespace media | |
| OLD | NEW |