blob: 73fe077c34eb7eada176b345e78a70029b1689ff [file] [log] [blame]
Shraddha Basantwanif6a50272022-11-17 20:32:18 +05301/*
2 * Copyright (C) 2022 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#define LOG_TAG "VtsHalEnvironmentalReverbTest"
18
19#include <Utils.h>
20#include <aidl/Vintf.h>
21#include "EffectHelper.h"
22
23using namespace android;
24
25using aidl::android::hardware::audio::effect::Capability;
26using aidl::android::hardware::audio::effect::Descriptor;
27using aidl::android::hardware::audio::effect::EnvironmentalReverb;
28using aidl::android::hardware::audio::effect::IEffect;
29using aidl::android::hardware::audio::effect::IFactory;
30using aidl::android::hardware::audio::effect::kEnvReverbTypeUUID;
31using aidl::android::hardware::audio::effect::Parameter;
32
33/**
34 * Here we focus on specific parameter checking, general IEffect interfaces testing performed in
35 * VtsAudioEffectTargetTest.
36 * Testing parameter range, assuming the parameter supported by effect is in this range.
37 * This range is verified with IEffect.getDescriptor() and range defined in the documentation, for
38 * any index supported value test expects EX_NONE from IEffect.setParameter(), otherwise expects
39 * EX_ILLEGAL_ARGUMENT.
40 */
41const std::vector<int> kRoomLevelValues = {
42 EnvironmentalReverb::MIN_ROOM_LEVEL_MB - 1, EnvironmentalReverb::MIN_ROOM_LEVEL_MB,
43 EnvironmentalReverb::MAX_ROOM_LEVEL_MB, EnvironmentalReverb::MAX_ROOM_LEVEL_MB + 1};
44const std::vector<int> kRoomHfLevelValues = {
45 EnvironmentalReverb::MIN_ROOM_HF_LEVEL_MB - 1, EnvironmentalReverb::MIN_ROOM_HF_LEVEL_MB,
46 EnvironmentalReverb::MAX_ROOM_HF_LEVEL_MB, EnvironmentalReverb::MAX_ROOM_HF_LEVEL_MB + 1};
47const std::vector<int> kDecayTimeValues = {
48 EnvironmentalReverb::MIN_DECAY_TIME_MS - 1, EnvironmentalReverb::MIN_DECAY_TIME_MS,
49 EnvironmentalReverb::MAX_DECAY_TIME_MS, EnvironmentalReverb::MAX_DECAY_TIME_MS + 1};
50const std::vector<int> kDecayHfRatioValues = {
51 EnvironmentalReverb::MIN_DECAY_HF_RATIO_PM - 1, EnvironmentalReverb::MIN_DECAY_HF_RATIO_PM,
52 EnvironmentalReverb::MAX_DECAY_HF_RATIO_PM, EnvironmentalReverb::MAX_DECAY_HF_RATIO_PM + 1};
53const std::vector<int> kLevelValues = {
54 EnvironmentalReverb::MIN_LEVEL_MB - 1, EnvironmentalReverb::MIN_LEVEL_MB,
55 EnvironmentalReverb::MAX_LEVEL_MB, EnvironmentalReverb::MAX_LEVEL_MB + 1};
56const std::vector<int> kDelayValues = {
57 EnvironmentalReverb::MIN_DELAY_MS - 1, EnvironmentalReverb::MIN_DELAY_MS,
58 EnvironmentalReverb::MAX_DELAY_MS, EnvironmentalReverb::MAX_DELAY_MS + 1};
59const std::vector<int> kDiffusionValues = {
60 EnvironmentalReverb::MIN_DIFFUSION_PM - 1, EnvironmentalReverb::MIN_DIFFUSION_PM,
61 EnvironmentalReverb::MAX_DIFFUSION_PM, EnvironmentalReverb::MAX_DIFFUSION_PM + 1};
62const std::vector<int> kDensityValues = {
63 EnvironmentalReverb::MIN_DENSITY_PM - 1, EnvironmentalReverb::MIN_DENSITY_PM,
64 EnvironmentalReverb::MAX_DENSITY_PM, EnvironmentalReverb::MAX_DENSITY_PM + 1};
65
66class EnvironmentalReverbHelper : public EffectHelper {
67 public:
68 EnvironmentalReverbHelper(std::pair<std::shared_ptr<IFactory>, Descriptor> pair) {
69 std::tie(mFactory, mDescriptor) = pair;
70 }
71
72 void SetUpReverb() {
73 ASSERT_NE(nullptr, mFactory);
74 ASSERT_NO_FATAL_FAILURE(create(mFactory, mEffect, mDescriptor));
75
76 Parameter::Specific specific = getDefaultParamSpecific();
77 Parameter::Common common = EffectHelper::createParamCommon(
78 0 /* session */, 1 /* ioHandle */, 44100 /* iSampleRate */, 44100 /* oSampleRate */,
79 kInputFrameCount /* iFrameCount */, kOutputFrameCount /* oFrameCount */);
80 IEffect::OpenEffectReturn ret;
81 ASSERT_NO_FATAL_FAILURE(open(mEffect, common, specific, &ret, EX_NONE));
82 ASSERT_NE(nullptr, mEffect);
83 }
84
85 void TearDownReverb() {
86 ASSERT_NO_FATAL_FAILURE(close(mEffect));
87 ASSERT_NO_FATAL_FAILURE(destroy(mFactory, mEffect));
88 }
89
90 Parameter::Specific getDefaultParamSpecific() {
91 EnvironmentalReverb er = EnvironmentalReverb::make<EnvironmentalReverb::roomLevelMb>(
92 EnvironmentalReverb::MIN_ROOM_LEVEL_MB);
93 Parameter::Specific specific =
94 Parameter::Specific::make<Parameter::Specific::environmentalReverb>(er);
95 return specific;
96 }
97
98 static const long kInputFrameCount = 0x100, kOutputFrameCount = 0x100;
99 std::shared_ptr<IFactory> mFactory;
100 std::shared_ptr<IEffect> mEffect;
101 Descriptor mDescriptor;
102 int mRoomLevel = EnvironmentalReverb::MIN_ROOM_LEVEL_MB;
103 int mRoomHfLevel = EnvironmentalReverb::MAX_ROOM_HF_LEVEL_MB;
104 int mDecayTime = 1000;
105 int mDecayHfRatio = 500;
106 int mLevel = EnvironmentalReverb::MIN_LEVEL_MB;
107 int mDelay = 40;
108 int mDiffusion = EnvironmentalReverb::MAX_DIFFUSION_PM;
109 int mDensity = EnvironmentalReverb::MAX_DENSITY_PM;
110 bool mBypass = false;
111
112 void SetAndGetReverbParameters() {
113 for (auto& it : mTags) {
114 auto& tag = it.first;
115 auto& er = it.second;
116
117 // validate parameter
118 Descriptor desc;
119 ASSERT_STATUS(EX_NONE, mEffect->getDescriptor(&desc));
120 const bool valid = isTagInRange(it.first, it.second, desc);
121 const binder_exception_t expected = valid ? EX_NONE : EX_ILLEGAL_ARGUMENT;
122
123 // set
124 Parameter expectParam;
125 Parameter::Specific specific;
126 specific.set<Parameter::Specific::environmentalReverb>(er);
127 expectParam.set<Parameter::specific>(specific);
128 EXPECT_STATUS(expected, mEffect->setParameter(expectParam)) << expectParam.toString();
129
130 // only get if parameter in range and set success
131 if (expected == EX_NONE) {
132 Parameter getParam;
133 Parameter::Id id;
134 EnvironmentalReverb::Id erId;
135 erId.set<EnvironmentalReverb::Id::commonTag>(tag);
136 id.set<Parameter::Id::environmentalReverbTag>(erId);
137 // if set success, then get should match
138 EXPECT_STATUS(expected, mEffect->getParameter(id, &getParam));
139 EXPECT_EQ(expectParam, getParam);
140 }
141 }
142 }
143
144 void addRoomLevelParam() {
145 EnvironmentalReverb er;
146 er.set<EnvironmentalReverb::roomLevelMb>(mRoomLevel);
147 mTags.push_back({EnvironmentalReverb::roomLevelMb, er});
148 }
149
150 void addRoomHfLevelParam(int roomHfLevel) {
151 EnvironmentalReverb er;
152 er.set<EnvironmentalReverb::roomHfLevelMb>(roomHfLevel);
153 mTags.push_back({EnvironmentalReverb::roomHfLevelMb, er});
154 }
155
156 void addDecayTimeParam(int decayTime) {
157 EnvironmentalReverb er;
158 er.set<EnvironmentalReverb::decayTimeMs>(decayTime);
159 mTags.push_back({EnvironmentalReverb::decayTimeMs, er});
160 }
161
162 void addDecayHfRatioParam(int decayHfRatio) {
163 EnvironmentalReverb er;
164 er.set<EnvironmentalReverb::decayHfRatioPm>(decayHfRatio);
165 mTags.push_back({EnvironmentalReverb::decayHfRatioPm, er});
166 }
167
168 void addLevelParam(int level) {
169 EnvironmentalReverb er;
170 er.set<EnvironmentalReverb::levelMb>(level);
171 mTags.push_back({EnvironmentalReverb::levelMb, er});
172 }
173
174 void addDelayParam(int delay) {
175 EnvironmentalReverb er;
176 er.set<EnvironmentalReverb::delayMs>(delay);
177 mTags.push_back({EnvironmentalReverb::delayMs, er});
178 }
179
180 void addDiffusionParam(int diffusion) {
181 EnvironmentalReverb er;
182 er.set<EnvironmentalReverb::diffusionPm>(diffusion);
183 mTags.push_back({EnvironmentalReverb::diffusionPm, er});
184 }
185
186 void addDensityParam(int density) {
187 EnvironmentalReverb er;
188 er.set<EnvironmentalReverb::densityPm>(density);
189 mTags.push_back({EnvironmentalReverb::densityPm, er});
190 }
191
192 void addBypassParam(bool bypass) {
193 EnvironmentalReverb er;
194 er.set<EnvironmentalReverb::bypass>(bypass);
195 mTags.push_back({EnvironmentalReverb::bypass, er});
196 }
197
198 bool isTagInRange(const EnvironmentalReverb::Tag& tag, const EnvironmentalReverb er,
199 const Descriptor& desc) const {
200 const EnvironmentalReverb::Capability& erCap =
201 desc.capability.get<Capability::environmentalReverb>();
202 switch (tag) {
203 case EnvironmentalReverb::roomLevelMb: {
204 int roomLevel = er.get<EnvironmentalReverb::roomLevelMb>();
205 return isRoomLevelInRange(roomLevel);
206 }
207 case EnvironmentalReverb::roomHfLevelMb: {
208 int roomHfLevel = er.get<EnvironmentalReverb::roomHfLevelMb>();
209 return isRoomHfLevelInRange(roomHfLevel);
210 }
211 case EnvironmentalReverb::decayTimeMs: {
212 int decayTime = er.get<EnvironmentalReverb::decayTimeMs>();
213 return isDecayTimeInRange(erCap, decayTime);
214 }
215 case EnvironmentalReverb::decayHfRatioPm: {
216 int decayHfRatio = er.get<EnvironmentalReverb::decayHfRatioPm>();
217 return isDecayHfRatioInRange(decayHfRatio);
218 }
219 case EnvironmentalReverb::levelMb: {
220 int level = er.get<EnvironmentalReverb::levelMb>();
221 return isLevelInRange(level);
222 }
223 case EnvironmentalReverb::delayMs: {
224 int delay = er.get<EnvironmentalReverb::delayMs>();
225 return isDelayInRange(delay);
226 }
227 case EnvironmentalReverb::diffusionPm: {
228 int diffusion = er.get<EnvironmentalReverb::diffusionPm>();
229 return isDiffusionInRange(diffusion);
230 }
231 case EnvironmentalReverb::densityPm: {
232 int density = er.get<EnvironmentalReverb::densityPm>();
233 return isDensityInRange(density);
234 }
235 case EnvironmentalReverb::bypass: {
236 return true;
237 }
238 default:
239 return false;
240 }
241 return false;
242 }
243
244 bool isRoomLevelInRange(int roomLevel) const {
245 return roomLevel >= EnvironmentalReverb::MIN_ROOM_LEVEL_MB &&
246 roomLevel <= EnvironmentalReverb::MAX_ROOM_LEVEL_MB;
247 }
248
249 bool isRoomHfLevelInRange(int roomHfLevel) const {
250 return roomHfLevel >= EnvironmentalReverb::MIN_ROOM_HF_LEVEL_MB &&
251 roomHfLevel <= EnvironmentalReverb::MAX_ROOM_HF_LEVEL_MB;
252 }
253
254 bool isDecayTimeInRange(const EnvironmentalReverb::Capability& cap, int decayTime) const {
255 return decayTime >= EnvironmentalReverb::MIN_DECAY_TIME_MS &&
256 decayTime <= EnvironmentalReverb::MAX_DECAY_TIME_MS &&
257 decayTime <= cap.maxDecayTimeMs;
258 }
259
260 bool isDecayHfRatioInRange(int decayHfRatio) const {
261 return decayHfRatio >= EnvironmentalReverb::MIN_DECAY_HF_RATIO_PM &&
262 decayHfRatio <= EnvironmentalReverb::MAX_DECAY_HF_RATIO_PM;
263 }
264
265 bool isLevelInRange(int level) const {
266 return level >= EnvironmentalReverb::MIN_LEVEL_MB &&
267 level <= EnvironmentalReverb::MAX_LEVEL_MB;
268 }
269
270 bool isDelayInRange(int delay) const {
271 return delay >= EnvironmentalReverb::MIN_DELAY_MS &&
272 delay <= EnvironmentalReverb::MAX_DELAY_MS;
273 }
274
275 bool isDiffusionInRange(int diffusion) const {
276 return diffusion >= EnvironmentalReverb::MIN_DIFFUSION_PM &&
277 diffusion <= EnvironmentalReverb::MAX_DIFFUSION_PM;
278 }
279
280 bool isDensityInRange(int density) const {
281 return density >= EnvironmentalReverb::MIN_DENSITY_PM &&
282 density <= EnvironmentalReverb::MAX_DENSITY_PM;
283 }
284
285 private:
286 std::vector<std::pair<EnvironmentalReverb::Tag, EnvironmentalReverb>> mTags;
287 void CleanUp() { mTags.clear(); }
288};
289
290class EnvironmentalReverbRoomLevelTest
291 : public ::testing::TestWithParam<
292 std::tuple<std::pair<std::shared_ptr<IFactory>, Descriptor>, int>>,
293 public EnvironmentalReverbHelper {
294 public:
295 EnvironmentalReverbRoomLevelTest() : EnvironmentalReverbHelper(std::get<0>(GetParam())) {
296 mRoomLevel = std::get<1>(GetParam());
297 }
298
299 void SetUp() override { SetUpReverb(); }
300
301 void TearDown() override { TearDownReverb(); }
302};
303
304TEST_P(EnvironmentalReverbRoomLevelTest, SetAndGetRoomLevel) {
305 EXPECT_NO_FATAL_FAILURE(addRoomLevelParam());
306 SetAndGetReverbParameters();
307}
308
309INSTANTIATE_TEST_SUITE_P(
310 EnvironmentalReverbTest, EnvironmentalReverbRoomLevelTest,
311 ::testing::Combine(testing::ValuesIn(EffectFactoryHelper::getAllEffectDescriptors(
312 IFactory::descriptor, kEnvReverbTypeUUID)),
313 testing::ValuesIn(kRoomLevelValues)),
314 [](const testing::TestParamInfo<EnvironmentalReverbRoomLevelTest::ParamType>& info) {
315 auto descriptor = std::get<0>(info.param).second;
316 std::string roomLevel = std::to_string(std::get<1>(info.param));
317
318 std::string name = "Implementor_" + descriptor.common.implementor + "_name_" +
319 descriptor.common.name + "_UUID_" +
320 descriptor.common.id.uuid.toString() + "_roomLevel" + roomLevel;
321 std::replace_if(
322 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
323 return name;
324 });
325
326class EnvironmentalReverbRoomHfLevelTest
327 : public ::testing::TestWithParam<
328 std::tuple<std::pair<std::shared_ptr<IFactory>, Descriptor>, int>>,
329 public EnvironmentalReverbHelper {
330 public:
331 EnvironmentalReverbRoomHfLevelTest() : EnvironmentalReverbHelper(std::get<0>(GetParam())) {
332 mRoomHfLevel = std::get<1>(GetParam());
333 }
334
335 void SetUp() override { SetUpReverb(); }
336
337 void TearDown() override { TearDownReverb(); }
338};
339
340TEST_P(EnvironmentalReverbRoomHfLevelTest, SetAndGetRoomHfLevel) {
341 EXPECT_NO_FATAL_FAILURE(addRoomHfLevelParam(mRoomHfLevel));
342 SetAndGetReverbParameters();
343}
344
345INSTANTIATE_TEST_SUITE_P(
346 EnvironmentalReverbTest, EnvironmentalReverbRoomHfLevelTest,
347 ::testing::Combine(testing::ValuesIn(EffectFactoryHelper::getAllEffectDescriptors(
348 IFactory::descriptor, kEnvReverbTypeUUID)),
349 testing::ValuesIn(kRoomHfLevelValues)),
350 [](const testing::TestParamInfo<EnvironmentalReverbRoomHfLevelTest::ParamType>& info) {
351 auto descriptor = std::get<0>(info.param).second;
352 std::string roomHfLevel = std::to_string(std::get<1>(info.param));
353
354 std::string name = "Implementor_" + descriptor.common.implementor + "_name_" +
355 descriptor.common.name + "_UUID_" +
356 descriptor.common.id.uuid.toString() + "_roomHfLevel" + roomHfLevel;
357 std::replace_if(
358 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
359 return name;
360 });
361
362class EnvironmentalReverbDecayTimeTest
363 : public ::testing::TestWithParam<
364 std::tuple<std::pair<std::shared_ptr<IFactory>, Descriptor>, int>>,
365 public EnvironmentalReverbHelper {
366 public:
367 EnvironmentalReverbDecayTimeTest() : EnvironmentalReverbHelper(std::get<0>(GetParam())) {
368 mDecayTime = std::get<1>(GetParam());
369 }
370
371 void SetUp() override { SetUpReverb(); }
372
373 void TearDown() override { TearDownReverb(); }
374};
375
376TEST_P(EnvironmentalReverbDecayTimeTest, SetAndGetDecayTime) {
377 EXPECT_NO_FATAL_FAILURE(addDecayTimeParam(mDecayTime));
378 SetAndGetReverbParameters();
379}
380
381INSTANTIATE_TEST_SUITE_P(
382 EnvironmentalReverbTest, EnvironmentalReverbDecayTimeTest,
383 ::testing::Combine(testing::ValuesIn(EffectFactoryHelper::getAllEffectDescriptors(
384 IFactory::descriptor, kEnvReverbTypeUUID)),
385 testing::ValuesIn(kDecayTimeValues)),
386 [](const testing::TestParamInfo<EnvironmentalReverbDecayTimeTest::ParamType>& info) {
387 auto descriptor = std::get<0>(info.param).second;
388 std::string decayTime = std::to_string(std::get<1>(info.param));
389
390 std::string name = "Implementor_" + descriptor.common.implementor + "_name_" +
391 descriptor.common.name + "_UUID_" +
392 descriptor.common.id.uuid.toString() + "_decayTime" + decayTime;
393 std::replace_if(
394 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
395 return name;
396 });
397
398class EnvironmentalReverbDecayHfRatioTest
399 : public ::testing::TestWithParam<
400 std::tuple<std::pair<std::shared_ptr<IFactory>, Descriptor>, int>>,
401 public EnvironmentalReverbHelper {
402 public:
403 EnvironmentalReverbDecayHfRatioTest() : EnvironmentalReverbHelper(std::get<0>(GetParam())) {
404 mDecayHfRatio = std::get<1>(GetParam());
405 }
406
407 void SetUp() override { SetUpReverb(); }
408
409 void TearDown() override { TearDownReverb(); }
410};
411
412TEST_P(EnvironmentalReverbDecayHfRatioTest, SetAndGetDecayHfRatio) {
413 EXPECT_NO_FATAL_FAILURE(addDecayHfRatioParam(mDecayHfRatio));
414 SetAndGetReverbParameters();
415}
416
417INSTANTIATE_TEST_SUITE_P(
418 EnvironmentalReverbTest, EnvironmentalReverbDecayHfRatioTest,
419 ::testing::Combine(testing::ValuesIn(EffectFactoryHelper::getAllEffectDescriptors(
420 IFactory::descriptor, kEnvReverbTypeUUID)),
421 testing::ValuesIn(kDecayHfRatioValues)),
422 [](const testing::TestParamInfo<EnvironmentalReverbDecayHfRatioTest::ParamType>& info) {
423 auto descriptor = std::get<0>(info.param).second;
424 std::string decayHfRatio = std::to_string(std::get<1>(info.param));
425
426 std::string name = "Implementor_" + descriptor.common.implementor + "_name_" +
427 descriptor.common.name + "_UUID_" +
428 descriptor.common.id.uuid.toString() + "_decayHfRatio" +
429 decayHfRatio;
430 std::replace_if(
431 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
432 return name;
433 });
434
435class EnvironmentalReverbLevelTest
436 : public ::testing::TestWithParam<
437 std::tuple<std::pair<std::shared_ptr<IFactory>, Descriptor>, int>>,
438 public EnvironmentalReverbHelper {
439 public:
440 EnvironmentalReverbLevelTest() : EnvironmentalReverbHelper(std::get<0>(GetParam())) {
441 mLevel = std::get<1>(GetParam());
442 }
443
444 void SetUp() override { SetUpReverb(); }
445
446 void TearDown() override { TearDownReverb(); }
447};
448
449TEST_P(EnvironmentalReverbLevelTest, SetAndGetLevel) {
450 EXPECT_NO_FATAL_FAILURE(addLevelParam(mLevel));
451 SetAndGetReverbParameters();
452}
453
454INSTANTIATE_TEST_SUITE_P(
455 EnvironmentalReverbTest, EnvironmentalReverbLevelTest,
456 ::testing::Combine(testing::ValuesIn(EffectFactoryHelper::getAllEffectDescriptors(
457 IFactory::descriptor, kEnvReverbTypeUUID)),
458 testing::ValuesIn(kLevelValues)),
459 [](const testing::TestParamInfo<EnvironmentalReverbDecayHfRatioTest::ParamType>& info) {
460 auto descriptor = std::get<0>(info.param).second;
461 std::string level = std::to_string(std::get<1>(info.param));
462
463 std::string name = "Implementor_" + descriptor.common.implementor + "_name_" +
464 descriptor.common.name + "_UUID_" +
465 descriptor.common.id.uuid.toString() + "_level" + level;
466 std::replace_if(
467 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
468 return name;
469 });
470
471class EnvironmentalReverbDelayTest
472 : public ::testing::TestWithParam<
473 std::tuple<std::pair<std::shared_ptr<IFactory>, Descriptor>, int>>,
474 public EnvironmentalReverbHelper {
475 public:
476 EnvironmentalReverbDelayTest() : EnvironmentalReverbHelper(std::get<0>(GetParam())) {
477 mDelay = std::get<1>(GetParam());
478 }
479
480 void SetUp() override { SetUpReverb(); }
481
482 void TearDown() override { TearDownReverb(); }
483};
484
485TEST_P(EnvironmentalReverbDelayTest, SetAndGetDelay) {
486 EXPECT_NO_FATAL_FAILURE(addDelayParam(mDelay));
487 SetAndGetReverbParameters();
488}
489
490INSTANTIATE_TEST_SUITE_P(
491 EnvironmentalReverbTest, EnvironmentalReverbDelayTest,
492 ::testing::Combine(testing::ValuesIn(EffectFactoryHelper::getAllEffectDescriptors(
493 IFactory::descriptor, kEnvReverbTypeUUID)),
494 testing::ValuesIn(kDelayValues)),
495 [](const testing::TestParamInfo<EnvironmentalReverbDelayTest::ParamType>& info) {
496 auto descriptor = std::get<0>(info.param).second;
497 std::string delay = std::to_string(std::get<1>(info.param));
498
499 std::string name = "Implementor_" + descriptor.common.implementor + "_name_" +
500 descriptor.common.name + "_UUID_" +
501 descriptor.common.id.uuid.toString() + "_delay" + delay;
502 std::replace_if(
503 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
504 return name;
505 });
506
507class EnvironmentalReverbDiffusionTest
508 : public ::testing::TestWithParam<
509 std::tuple<std::pair<std::shared_ptr<IFactory>, Descriptor>, int>>,
510 public EnvironmentalReverbHelper {
511 public:
512 EnvironmentalReverbDiffusionTest() : EnvironmentalReverbHelper(std::get<0>(GetParam())) {
513 mDiffusion = std::get<1>(GetParam());
514 }
515
516 void SetUp() override { SetUpReverb(); }
517
518 void TearDown() override { TearDownReverb(); }
519};
520
521TEST_P(EnvironmentalReverbDiffusionTest, SetAndGetDiffusion) {
522 EXPECT_NO_FATAL_FAILURE(addDiffusionParam(mDiffusion));
523 SetAndGetReverbParameters();
524}
525
526INSTANTIATE_TEST_SUITE_P(
527 EnvironmentalReverbTest, EnvironmentalReverbDiffusionTest,
528 ::testing::Combine(testing::ValuesIn(EffectFactoryHelper::getAllEffectDescriptors(
529 IFactory::descriptor, kEnvReverbTypeUUID)),
530 testing::ValuesIn(kDiffusionValues)),
531 [](const testing::TestParamInfo<EnvironmentalReverbDiffusionTest::ParamType>& info) {
532 auto descriptor = std::get<0>(info.param).second;
533 std::string diffusion = std::to_string(std::get<1>(info.param));
534
535 std::string name = "Implementor_" + descriptor.common.implementor + "_name_" +
536 descriptor.common.name + "_UUID_" +
537 descriptor.common.id.uuid.toString() + "_diffusion" + diffusion;
538 std::replace_if(
539 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
540 return name;
541 });
542
543class EnvironmentalReverbDensityTest
544 : public ::testing::TestWithParam<
545 std::tuple<std::pair<std::shared_ptr<IFactory>, Descriptor>, int>>,
546 public EnvironmentalReverbHelper {
547 public:
548 EnvironmentalReverbDensityTest() : EnvironmentalReverbHelper(std::get<0>(GetParam())) {
549 mDensity = std::get<1>(GetParam());
550 }
551
552 void SetUp() override { SetUpReverb(); }
553
554 void TearDown() override { TearDownReverb(); }
555};
556
557TEST_P(EnvironmentalReverbDensityTest, SetAndGetDensity) {
558 EXPECT_NO_FATAL_FAILURE(addDensityParam(mDensity));
559 SetAndGetReverbParameters();
560}
561
562INSTANTIATE_TEST_SUITE_P(
563 EnvironmentalReverbTest, EnvironmentalReverbDensityTest,
564 ::testing::Combine(testing::ValuesIn(EffectFactoryHelper::getAllEffectDescriptors(
565 IFactory::descriptor, kEnvReverbTypeUUID)),
566 testing::ValuesIn(kDensityValues)),
567 [](const testing::TestParamInfo<EnvironmentalReverbDensityTest::ParamType>& info) {
568 auto descriptor = std::get<0>(info.param).second;
569 std::string density = std::to_string(std::get<1>(info.param));
570
571 std::string name = "Implementor_" + descriptor.common.implementor + "_name_" +
572 descriptor.common.name + "_UUID_" +
573 descriptor.common.id.uuid.toString() + "_density" + density;
574 std::replace_if(
575 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
576 return name;
577 });
578
579class EnvironmentalReverbBypassTest
580 : public ::testing::TestWithParam<
581 std::tuple<std::pair<std::shared_ptr<IFactory>, Descriptor>, bool>>,
582 public EnvironmentalReverbHelper {
583 public:
584 EnvironmentalReverbBypassTest() : EnvironmentalReverbHelper(std::get<0>(GetParam())) {
585 mBypass = std::get<1>(GetParam());
586 }
587
588 void SetUp() override { SetUpReverb(); }
589
590 void TearDown() override { TearDownReverb(); }
591};
592
593TEST_P(EnvironmentalReverbBypassTest, SetAndGetBypass) {
594 EXPECT_NO_FATAL_FAILURE(addBypassParam(mBypass));
595 SetAndGetReverbParameters();
596}
597
598INSTANTIATE_TEST_SUITE_P(
599 EnvironmentalReverbTest, EnvironmentalReverbBypassTest,
600 ::testing::Combine(testing::ValuesIn(EffectFactoryHelper::getAllEffectDescriptors(
601 IFactory::descriptor, kEnvReverbTypeUUID)),
602 testing::Bool()),
603 [](const testing::TestParamInfo<EnvironmentalReverbBypassTest::ParamType>& info) {
604 auto descriptor = std::get<0>(info.param).second;
605 std::string bypass = std::to_string(std::get<1>(info.param));
606
607 std::string name = "Implementor_" + descriptor.common.implementor + "_name_" +
608 descriptor.common.name + "_UUID_" +
609 descriptor.common.id.uuid.toString() + "_bypass" + bypass;
610 std::replace_if(
611 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
612 return name;
613 });
614
615int main(int argc, char** argv) {
616 ::testing::InitGoogleTest(&argc, argv);
617 ABinderProcess_setThreadPoolMaxThreadCount(1);
618 ABinderProcess_startThreadPool();
619 return RUN_ALL_TESTS();
620}