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

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

Issue 2761273003: Switching MediaStreamsManager from using AudioManager interface to AudioSystem one. (Closed)
Patch Set: Created 3 years, 9 months 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
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/audio/audio_system_impl.h" 5 #include "media/audio/audio_system_impl.h"
6 #include "base/memory/ptr_util.h" 6 #include "base/memory/ptr_util.h"
7 #include "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "base/single_thread_task_runner.h" 8 #include "base/single_thread_task_runner.h"
9 #include "base/task_runner_util.h" 9 #include "base/task_runner_util.h"
10 #include "base/threading/thread.h" 10 #include "base/threading/thread.h"
11 #include "base/threading/thread_checker.h" 11 #include "base/threading/thread_checker.h"
12 #include "base/threading/thread_task_runner_handle.h" 12 #include "base/threading/thread_task_runner_handle.h"
13 #include "media/audio/audio_device_description.h" 13 #include "media/audio/audio_device_description.h"
14 #include "media/audio/mock_audio_manager.h" 14 #include "media/audio/mock_audio_manager.h"
15 #include "media/base/test_helpers.h" 15 #include "media/base/test_helpers.h"
16 #include "testing/gmock/include/gmock/gmock.h" 16 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 18
19 namespace { 19 namespace {
20 const char* kNonDefaultDeviceId = "non-default-device-id"; 20 const char* kNonDefaultDeviceId = "non-default-device-id";
21 } 21 }
22
22 namespace media { 23 namespace media {
23 24
25 bool operator==(const media::AudioDeviceDescription& lhs,
26 const media::AudioDeviceDescription& rhs) {
27 return lhs.device_name == rhs.device_name && lhs.unique_id == rhs.unique_id &&
28 lhs.group_id == rhs.group_id;
29 }
30
24 class AudioSystemImplTest : public testing::TestWithParam<bool> { 31 class AudioSystemImplTest : public testing::TestWithParam<bool> {
25 public: 32 public:
26 AudioSystemImplTest() 33 AudioSystemImplTest()
27 : use_audio_thread_(GetParam()), 34 : use_audio_thread_(GetParam()),
28 audio_thread_("AudioSystemThread"), 35 audio_thread_("AudioSystemThread"),
29 input_params_(AudioParameters::AUDIO_PCM_LINEAR, 36 input_params_(AudioParameters::AUDIO_PCM_LINEAR,
30 CHANNEL_LAYOUT_MONO, 37 CHANNEL_LAYOUT_MONO,
31 AudioParameters::kTelephoneSampleRate, 38 AudioParameters::kTelephoneSampleRate,
32 16, 39 16,
33 AudioParameters::kTelephoneSampleRate / 10), 40 AudioParameters::kTelephoneSampleRate / 10),
(...skipping 13 matching lines...) Expand all
47 new media::MockAudioManager(audio_thread_.task_runner())); 54 new media::MockAudioManager(audio_thread_.task_runner()));
48 } else { 55 } else {
49 audio_manager_.reset(new media::MockAudioManager( 56 audio_manager_.reset(new media::MockAudioManager(
50 base::ThreadTaskRunnerHandle::Get().get())); 57 base::ThreadTaskRunnerHandle::Get().get()));
51 } 58 }
52 59
53 audio_manager_->SetInputStreamParameters(input_params_); 60 audio_manager_->SetInputStreamParameters(input_params_);
54 audio_manager_->SetOutputStreamParameters(output_params_); 61 audio_manager_->SetOutputStreamParameters(output_params_);
55 audio_manager_->SetDefaultOutputStreamParameters(default_output_params_); 62 audio_manager_->SetDefaultOutputStreamParameters(default_output_params_);
56 63
64 auto get_device_descriptions = [](const AudioDeviceDescriptions* source,
65 AudioDeviceDescriptions* destination) {
66 destination->insert(destination->end(), source->begin(), source->end());
67 };
68
69 audio_manager_->SetInputDeviceDescriptionsCallback(
70 base::Bind(get_device_descriptions,
71 base::Unretained(&input_device_descriptions_)));
72 audio_manager_->SetOutputDeviceDescriptionsCallback(
73 base::Bind(get_device_descriptions,
74 base::Unretained(&output_device_descriptions_)));
75
57 audio_system_ = media::AudioSystemImpl::Create(audio_manager_.get()); 76 audio_system_ = media::AudioSystemImpl::Create(audio_manager_.get());
58 EXPECT_EQ(AudioSystem::Get(), audio_system_.get()); 77 EXPECT_EQ(AudioSystem::Get(), audio_system_.get());
59 } 78 }
60 79
61 ~AudioSystemImplTest() override { 80 ~AudioSystemImplTest() override {
62 // Deleting |audio_manager_| on its thread. 81 // Deleting |audio_manager_| on its thread.
63 audio_system_.reset(); 82 audio_system_.reset();
64 EXPECT_EQ(AudioSystem::Get(), nullptr); 83 EXPECT_EQ(AudioSystem::Get(), nullptr);
65 audio_manager_.reset(); 84 audio_manager_.reset();
66 audio_thread_.Stop(); 85 audio_thread_.Stop();
67 } 86 }
68 87
69 void OnAudioParams(const AudioParameters& expected, 88 void OnAudioParams(const AudioParameters& expected,
70 const AudioParameters& received) { 89 const AudioParameters& received) {
71 EXPECT_TRUE(thread_checker_.CalledOnValidThread()); 90 EXPECT_TRUE(thread_checker_.CalledOnValidThread());
72 EXPECT_EQ(expected.AsHumanReadableString(), 91 EXPECT_EQ(expected.AsHumanReadableString(),
73 received.AsHumanReadableString()); 92 received.AsHumanReadableString());
74 AudioParametersReceived(); 93 AudioParametersReceived();
75 } 94 }
76 95
77 void OnHasInputDevices(bool result) { 96 void OnHasInputDevices(bool result) {
78 EXPECT_TRUE(thread_checker_.CalledOnValidThread()); 97 EXPECT_TRUE(thread_checker_.CalledOnValidThread());
79 HasInputDevicesCallback(result); 98 HasInputDevicesCallback(result);
80 } 99 }
81 100
101 void OnGetDeviceDescriptions(
102 const AudioDeviceDescriptions& expected_descriptions,
103 std::unique_ptr<AudioDeviceDescriptions> descriptions) {
104 EXPECT_TRUE(thread_checker_.CalledOnValidThread());
105 EXPECT_TRUE(descriptions);
106 EXPECT_NE(&expected_descriptions, descriptions.get());
107 EXPECT_EQ(expected_descriptions, *descriptions);
108 DeviceDescriptionsReceived();
109 }
110
82 void WaitForCallback() { 111 void WaitForCallback() {
83 if (!use_audio_thread_) { 112 if (!use_audio_thread_) {
84 base::RunLoop().RunUntilIdle(); 113 base::RunLoop().RunUntilIdle();
85 return; 114 return;
86 } 115 }
87 WaitableMessageLoopEvent event; 116 WaitableMessageLoopEvent event;
88 audio_thread_.task_runner()->PostTaskAndReply( 117 audio_thread_.task_runner()->PostTaskAndReply(
89 FROM_HERE, base::Bind(&base::DoNothing), event.GetClosure()); 118 FROM_HERE, base::Bind(&base::DoNothing), event.GetClosure());
90 // Runs the loop and waits for the |audio_thread_| to call event's closure, 119 // Runs the loop and waits for the |audio_thread_| to call event's closure,
91 // which means AudioSystem reply containing device parameters is already 120 // which means AudioSystem reply containing device parameters is already
92 // queued on the main thread. 121 // queued on the main thread.
93 event.RunAndWait(); 122 event.RunAndWait();
94 base::RunLoop().RunUntilIdle(); 123 base::RunLoop().RunUntilIdle();
95 } 124 }
96 125
126 // Mocks to verify that AudioSystem replied with an expected callback.
97 MOCK_METHOD0(AudioParametersReceived, void(void)); 127 MOCK_METHOD0(AudioParametersReceived, void(void));
98 MOCK_METHOD1(HasInputDevicesCallback, void(bool)); 128 MOCK_METHOD1(HasInputDevicesCallback, void(bool));
129 MOCK_METHOD0(DeviceDescriptionsReceived, void(void));
99 130
100 protected: 131 protected:
101 base::MessageLoop message_loop_; 132 base::MessageLoop message_loop_;
102 base::ThreadChecker thread_checker_; 133 base::ThreadChecker thread_checker_;
103 bool use_audio_thread_; 134 bool use_audio_thread_;
104 base::Thread audio_thread_; 135 base::Thread audio_thread_;
105 MockAudioManager::UniquePtr audio_manager_; 136 MockAudioManager::UniquePtr audio_manager_;
106 std::unique_ptr<media::AudioSystem> audio_system_; 137 std::unique_ptr<media::AudioSystem> audio_system_;
107 AudioParameters input_params_; 138 AudioParameters input_params_;
108 AudioParameters output_params_; 139 AudioParameters output_params_;
109 AudioParameters default_output_params_; 140 AudioParameters default_output_params_;
141 AudioDeviceDescriptions input_device_descriptions_;
142 AudioDeviceDescriptions output_device_descriptions_;
110 }; 143 };
111 144
112 TEST_P(AudioSystemImplTest, GetInputStreamParameters) { 145 TEST_P(AudioSystemImplTest, GetInputStreamParameters) {
113 EXPECT_CALL(*this, AudioParametersReceived()); 146 EXPECT_CALL(*this, AudioParametersReceived());
114 audio_system_->GetInputStreamParameters( 147 audio_system_->GetInputStreamParameters(
115 media::AudioDeviceDescription::kDefaultDeviceId, 148 media::AudioDeviceDescription::kDefaultDeviceId,
116 base::Bind(&AudioSystemImplTest::OnAudioParams, base::Unretained(this), 149 base::Bind(&AudioSystemImplTest::OnAudioParams, base::Unretained(this),
117 input_params_)); 150 input_params_));
118 WaitForCallback(); 151 WaitForCallback();
119 } 152 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 } 203 }
171 204
172 TEST_P(AudioSystemImplTest, HasNoInputDevices) { 205 TEST_P(AudioSystemImplTest, HasNoInputDevices) {
173 audio_manager_->SetHasInputDevices(false); 206 audio_manager_->SetHasInputDevices(false);
174 EXPECT_CALL(*this, HasInputDevicesCallback(false)); 207 EXPECT_CALL(*this, HasInputDevicesCallback(false));
175 audio_system_->HasInputDevices(base::Bind( 208 audio_system_->HasInputDevices(base::Bind(
176 &AudioSystemImplTest::OnHasInputDevices, base::Unretained(this))); 209 &AudioSystemImplTest::OnHasInputDevices, base::Unretained(this)));
177 WaitForCallback(); 210 WaitForCallback();
178 } 211 }
179 212
213 TEST_P(AudioSystemImplTest, GetInputDeviceDescriptionsNoInputDevices) {
214 output_device_descriptions_.emplace_back("output_device_name",
215 "output_device_id", "group_id");
216 EXPECT_EQ(0, static_cast<int>(input_device_descriptions_.size()));
217 EXPECT_EQ(1, static_cast<int>(output_device_descriptions_.size()));
218 EXPECT_CALL(*this, DeviceDescriptionsReceived());
219 audio_system_->GetDeviceDescriptions(
220 base::Bind(&AudioSystemImplTest::OnGetDeviceDescriptions,
221 base::Unretained(this), input_device_descriptions_),
222 true);
223 WaitForCallback();
224 }
225
226 TEST_P(AudioSystemImplTest, GetInputDeviceDescriptions) {
227 output_device_descriptions_.emplace_back("output_device_name",
228 "output_device_id", "group_id");
229 input_device_descriptions_.emplace_back("input_device_name1",
230 "input_device_id1", "group_id1");
231 input_device_descriptions_.emplace_back("input_device_name2",
232 "input_device_id2", "group_id2");
233 EXPECT_EQ(2, static_cast<int>(input_device_descriptions_.size()));
234 EXPECT_EQ(1, static_cast<int>(output_device_descriptions_.size()));
235 EXPECT_CALL(*this, DeviceDescriptionsReceived());
236 audio_system_->GetDeviceDescriptions(
237 base::Bind(&AudioSystemImplTest::OnGetDeviceDescriptions,
238 base::Unretained(this), input_device_descriptions_),
239 true);
240 WaitForCallback();
241 }
242
243 TEST_P(AudioSystemImplTest, GetOutputDeviceDescriptionsNoInputDevices) {
244 input_device_descriptions_.emplace_back("input_device_name",
245 "input_device_id", "group_id");
246 EXPECT_EQ(0, static_cast<int>(output_device_descriptions_.size()));
247 EXPECT_EQ(1, static_cast<int>(input_device_descriptions_.size()));
248 EXPECT_CALL(*this, DeviceDescriptionsReceived());
249 audio_system_->GetDeviceDescriptions(
250 base::Bind(&AudioSystemImplTest::OnGetDeviceDescriptions,
251 base::Unretained(this), output_device_descriptions_),
252 false);
253 WaitForCallback();
254 }
255
256 TEST_P(AudioSystemImplTest, GetOutputDeviceDescriptions) {
257 input_device_descriptions_.emplace_back("input_device_name",
258 "input_device_id", "group_id");
259 output_device_descriptions_.emplace_back("output_device_name1",
260 "output_device_id1", "group_id1");
261 output_device_descriptions_.emplace_back("output_device_name2",
262 "output_device_id2", "group_id2");
263 EXPECT_EQ(2, static_cast<int>(output_device_descriptions_.size()));
264 EXPECT_EQ(1, static_cast<int>(input_device_descriptions_.size()));
265 EXPECT_CALL(*this, DeviceDescriptionsReceived());
266 audio_system_->GetDeviceDescriptions(
267 base::Bind(&AudioSystemImplTest::OnGetDeviceDescriptions,
268 base::Unretained(this), output_device_descriptions_),
269 false);
270 WaitForCallback();
271 }
272
180 INSTANTIATE_TEST_CASE_P(, AudioSystemImplTest, testing::Values(false, true)); 273 INSTANTIATE_TEST_CASE_P(, AudioSystemImplTest, testing::Values(false, true));
181 274
182 } // namespace media 275 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698