Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(363)

Side by Side Diff: media/audio/virtual_audio_output_stream_unittest.cc

Issue 11298006: Browser-wide audio mirroring for TabCapture API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix more nits, disable for ios Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698