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

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: last nit 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
« no previous file with comments | « media/audio/virtual_audio_output_stream.cc ('k') | media/media.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
21 AudioParameters params,
22 base::MessageLoopProxy* message_loop)
23 : VirtualAudioInputStream(manager, params, message_loop) {}
24 ~MockVirtualAudioInputStream() {}
25
26 MOCK_METHOD2(AddOutputStream, void(VirtualAudioOutputStream* stream,
27 const AudioParameters& output_params));
28 MOCK_METHOD2(RemoveOutputStream, void(VirtualAudioOutputStream* stream,
29 const AudioParameters& output_params));
30
31 private:
32 DISALLOW_COPY_AND_ASSIGN(MockVirtualAudioInputStream);
33 };
34
35 class MockAudioDeviceListener : public AudioManager::AudioDeviceListener {
36 public:
37 MOCK_METHOD0(OnDeviceChange, void());
38 };
39
40 class VirtualAudioOutputStreamTest : public testing::Test {
41 public:
42 void ListenAndCreateVirtualOnAudioThread(
43 AudioManager* manager, AudioManager::AudioDeviceListener* listener) {
44 manager->AddOutputDeviceChangeListener(listener);
45
46 AudioParameters params(
47 AudioParameters::AUDIO_VIRTUAL, CHANNEL_LAYOUT_MONO, 8000, 8, 128);
48 AudioInputStream* stream = manager->MakeAudioInputStream(params, "1");
49 stream->Close();
50 signal_.Signal();
51 }
52
53 void RemoveListenerOnAudioThread(
54 AudioManager* manager, AudioManager::AudioDeviceListener* listener) {
55 manager->RemoveOutputDeviceChangeListener(listener);
56 signal_.Signal();
57 }
58
59 protected:
60 VirtualAudioOutputStreamTest() : signal_(false, false) {}
61
62 base::WaitableEvent signal_;
63
64 private:
65 DISALLOW_COPY_AND_ASSIGN(VirtualAudioOutputStreamTest);
66 };
67
68 TEST_F(VirtualAudioOutputStreamTest, StartStopStartStop) {
69 scoped_ptr<AudioManager> audio_manager(AudioManager::Create());
70
71 MessageLoop message_loop;
72
73 AudioParameters params(
74 AudioParameters::AUDIO_VIRTUAL, CHANNEL_LAYOUT_MONO, 8000, 8, 128);
75 AudioParameters output_params(
76 AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, 8000, 8, 128);
77
78 MockVirtualAudioInputStream input_stream(
79 static_cast<AudioManagerBase*>(audio_manager.get()),
80 params,
81 message_loop.message_loop_proxy());
82
83 EXPECT_CALL(input_stream, AddOutputStream(_, _)).Times(2);
84 EXPECT_CALL(input_stream, RemoveOutputStream(_, _)).Times(2);
85
86 scoped_ptr<VirtualAudioOutputStream> output_stream(
87 VirtualAudioOutputStream::MakeStream(
88 static_cast<AudioManagerBase*>(audio_manager.get()),
89 output_params,
90 message_loop.message_loop_proxy(),
91 &input_stream));
92
93 SineWaveAudioSource source(CHANNEL_LAYOUT_STEREO, 200.0, 128);
94 output_stream->Start(&source);
95 output_stream->Stop();
96 output_stream->Start(&source);
97 output_stream->Stop();
98 // Can't Close() here because we didn't create this output stream is not owned
99 // by the audio manager.
100 }
101
102 // Tests that we get notifications to reattach output streams when we create a
103 // VirtualAudioInputStream.
104 TEST_F(VirtualAudioOutputStreamTest, OutputStreamsNotified) {
105 scoped_ptr<AudioManager> audio_manager(AudioManager::Create());
106
107 MockAudioDeviceListener mock_listener;
108 EXPECT_CALL(mock_listener, OnDeviceChange()).Times(2);
109
110 audio_manager->GetMessageLoop()->PostTask(
111 FROM_HERE, base::Bind(
112 &VirtualAudioOutputStreamTest::ListenAndCreateVirtualOnAudioThread,
113 base::Unretained(this),
114 audio_manager.get(),
115 &mock_listener));
116
117 signal_.Wait();
118
119 audio_manager->GetMessageLoop()->PostTask(
120 FROM_HERE, base::Bind(
121 &VirtualAudioOutputStreamTest::RemoveListenerOnAudioThread,
122 base::Unretained(this),
123 audio_manager.get(),
124 &mock_listener));
125
126 signal_.Wait();
127 }
128
129 } // namespace media
OLDNEW
« no previous file with comments | « media/audio/virtual_audio_output_stream.cc ('k') | media/media.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698