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 |