blob: b8ea9c148ebbcd3d8f211c997092bb7b4d15de15 [file] [log] [blame]
Sham Rathodd4f15e32022-11-18 14:25:52 +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 "VtsHalHapticGeneratorTargetTest"
18
19#include <Utils.h>
20#include <aidl/Vintf.h>
Shunkai Yaoab59e6d2022-12-22 00:45:23 +000021#include <android/binder_enums.h>
Shraddha Basantwanic7d237d2022-12-18 15:01:14 +053022#include <map>
23#include <utility>
24#include <vector>
Shunkai Yaoab59e6d2022-12-22 00:45:23 +000025
Sham Rathodd4f15e32022-11-18 14:25:52 +053026#include "EffectHelper.h"
27
28using namespace android;
29
30using aidl::android::hardware::audio::effect::Capability;
31using aidl::android::hardware::audio::effect::Descriptor;
32using aidl::android::hardware::audio::effect::HapticGenerator;
33using aidl::android::hardware::audio::effect::IEffect;
34using aidl::android::hardware::audio::effect::IFactory;
35using aidl::android::hardware::audio::effect::kHapticGeneratorTypeUUID;
36using aidl::android::hardware::audio::effect::Parameter;
37
38/**
39 * Here we focus on specific parameter checking, general IEffect interfaces testing performed in
40 * VtsAudioEffectTargetTest.
41 */
42enum ParamName {
43 PARAM_INSTANCE_NAME,
44 PARAM_HAPTIC_SCALE_ID,
45 PARAM_HAPTIC_SCALE_VIBRATOR_SCALE,
46 PARAM_VIBRATION_INFORMATION_RESONANT_FREQUENCY,
47 PARAM_VIBRATION_INFORMATION_Q_FACTOR,
48 PARAM_VIBRATION_INFORMATION_MAX_AMPLITUDE,
49};
50using HapticGeneratorParamTestParam =
51 std::tuple<std::pair<std::shared_ptr<IFactory>, Descriptor>, int,
52 HapticGenerator::VibratorScale, float, float, float>;
53
54/*
55 * Testing parameter range, assuming the parameter supported by effect is in this range.
56 * Parameter should be within the valid range defined in the documentation,
57 * for any supported value test expects EX_NONE from IEffect.setParameter(),
58 * otherwise expect EX_ILLEGAL_ARGUMENT.
59 */
60
61// TODO : Update the test values once range/capability is updated by implementation
62const int MIN_ID = std::numeric_limits<int>::min();
63const int MAX_ID = std::numeric_limits<int>::max();
64const float MIN_FLOAT = std::numeric_limits<float>::min();
65const float MAX_FLOAT = std::numeric_limits<float>::max();
66
67const std::vector<int> kHapticScaleIdValues = {MIN_ID, 0, MAX_ID};
68const std::vector<HapticGenerator::VibratorScale> kVibratorScaleValues = {
Shunkai Yaoab59e6d2022-12-22 00:45:23 +000069 ndk::enum_range<HapticGenerator::VibratorScale>().begin(),
70 ndk::enum_range<HapticGenerator::VibratorScale>().end()};
Sham Rathodd4f15e32022-11-18 14:25:52 +053071
72const std::vector<float> kResonantFrequencyValues = {MIN_FLOAT, 100, MAX_FLOAT};
73const std::vector<float> kQFactorValues = {MIN_FLOAT, 100, MAX_FLOAT};
74const std::vector<float> kMaxAmplitude = {MIN_FLOAT, 100, MAX_FLOAT};
75
76class HapticGeneratorParamTest : public ::testing::TestWithParam<HapticGeneratorParamTestParam>,
77 public EffectHelper {
78 public:
79 HapticGeneratorParamTest()
80 : mParamHapticScaleId(std::get<PARAM_HAPTIC_SCALE_ID>(GetParam())),
81 mParamVibratorScale(std::get<PARAM_HAPTIC_SCALE_VIBRATOR_SCALE>(GetParam())),
82 mParamResonantFrequency(
83 std::get<PARAM_VIBRATION_INFORMATION_RESONANT_FREQUENCY>(GetParam())),
84 mParamQFactor(std::get<PARAM_VIBRATION_INFORMATION_Q_FACTOR>(GetParam())),
85 mParamMaxAmplitude(std::get<PARAM_VIBRATION_INFORMATION_MAX_AMPLITUDE>(GetParam())) {
86 std::tie(mFactory, mDescriptor) = std::get<PARAM_INSTANCE_NAME>(GetParam());
87 }
88 void SetUp() override {
89 ASSERT_NE(nullptr, mFactory);
90 ASSERT_NO_FATAL_FAILURE(create(mFactory, mEffect, mDescriptor));
91
Sham Rathodd4f15e32022-11-18 14:25:52 +053092 Parameter::Common common = EffectHelper::createParamCommon(
93 0 /* session */, 1 /* ioHandle */, 44100 /* iSampleRate */, 44100 /* oSampleRate */,
94 kInputFrameCount /* iFrameCount */, kOutputFrameCount /* oFrameCount */);
95 IEffect::OpenEffectReturn ret;
Shraddha Basantwanic7d237d2022-12-18 15:01:14 +053096 ASSERT_NO_FATAL_FAILURE(open(mEffect, common, std::nullopt, &ret, EX_NONE));
Sham Rathodd4f15e32022-11-18 14:25:52 +053097 ASSERT_NE(nullptr, mEffect);
98 }
99
100 void TearDown() override {
101 ASSERT_NO_FATAL_FAILURE(close(mEffect));
102 ASSERT_NO_FATAL_FAILURE(destroy(mFactory, mEffect));
103 }
104
Sham Rathodd4f15e32022-11-18 14:25:52 +0530105 static const long kInputFrameCount = 0x100, kOutputFrameCount = 0x100;
106 std::shared_ptr<IFactory> mFactory;
107 std::shared_ptr<IEffect> mEffect;
108 Descriptor mDescriptor;
109 int mParamHapticScaleId = 0;
110 HapticGenerator::VibratorScale mParamVibratorScale = HapticGenerator::VibratorScale::MUTE;
111 float mParamResonantFrequency = 0;
112 float mParamQFactor = 0;
113 float mParamMaxAmplitude = 0;
114
115 void SetAndGetHapticGeneratorParameters() {
116 for (auto& it : mTags) {
Shraddha Basantwanic7d237d2022-12-18 15:01:14 +0530117 auto& tag = std::get<ParamTestEnum::PARAM_TEST_TAG>(it);
118 auto& setHg = std::get<ParamTestEnum::PARAM_TEST_TARGET>(it);
Sham Rathodd4f15e32022-11-18 14:25:52 +0530119
120 // set parameter
121 Parameter expectParam;
122 Parameter::Specific specific;
Shraddha Basantwanic7d237d2022-12-18 15:01:14 +0530123 specific.set<Parameter::Specific::hapticGenerator>(setHg);
Sham Rathodd4f15e32022-11-18 14:25:52 +0530124 expectParam.set<Parameter::specific>(specific);
125 EXPECT_STATUS(EX_NONE, mEffect->setParameter(expectParam)) << expectParam.toString();
126
127 // get parameter
128 Parameter getParam;
129 Parameter::Id id;
130 HapticGenerator::Id hgId;
131 hgId.set<HapticGenerator::Id::commonTag>(tag);
132 id.set<Parameter::Id::hapticGeneratorTag>(hgId);
133 EXPECT_STATUS(EX_NONE, mEffect->getParameter(id, &getParam));
Shraddha Basantwanic7d237d2022-12-18 15:01:14 +0530134 EXPECT_EQ(expectParam, getParam) << expectParam.toString() << "\n"
135 << getParam.toString();
Sham Rathodd4f15e32022-11-18 14:25:52 +0530136 }
137 }
138
139 void addHapticScaleParam(int id, HapticGenerator::VibratorScale scale) {
Shraddha Basantwanic7d237d2022-12-18 15:01:14 +0530140 HapticGenerator setHg;
141 std::vector<HapticGenerator::HapticScale> hapticScales = {{.id = id, .scale = scale}};
142 setHg.set<HapticGenerator::hapticScales>(hapticScales);
143 mTags.push_back({HapticGenerator::hapticScales, setHg});
Sham Rathodd4f15e32022-11-18 14:25:52 +0530144 }
145
146 void addVibratorInformationParam(float resonantFrequencyHz, float qFactor, float maxAmplitude) {
147 HapticGenerator hg;
148 HapticGenerator::VibratorInformation vibrationInfo = {
149 .resonantFrequencyHz = resonantFrequencyHz,
150 .qFactor = qFactor,
151 .maxAmplitude = maxAmplitude};
152 hg.set<HapticGenerator::vibratorInfo>(vibrationInfo);
153 mTags.push_back({HapticGenerator::vibratorInfo, hg});
154 }
155
156 private:
Shraddha Basantwanic7d237d2022-12-18 15:01:14 +0530157 enum ParamTestEnum { PARAM_TEST_TAG, PARAM_TEST_TARGET };
158 std::vector<std::tuple<HapticGenerator::Tag, HapticGenerator>> mTags;
Sham Rathodd4f15e32022-11-18 14:25:52 +0530159
160 void CleanUp() { mTags.clear(); }
161};
162
163TEST_P(HapticGeneratorParamTest, SetAndGetHapticScale) {
164 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam(mParamHapticScaleId, mParamVibratorScale));
165 SetAndGetHapticGeneratorParameters();
166}
167
Shraddha Basantwanic7d237d2022-12-18 15:01:14 +0530168TEST_P(HapticGeneratorParamTest, SetAndGetMultipleHapticScales) {
169 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam(mParamHapticScaleId, mParamVibratorScale));
170 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam(mParamHapticScaleId, mParamVibratorScale));
171 SetAndGetHapticGeneratorParameters();
172}
173
Sham Rathodd4f15e32022-11-18 14:25:52 +0530174TEST_P(HapticGeneratorParamTest, SetAndGetVibratorInformation) {
175 EXPECT_NO_FATAL_FAILURE(addVibratorInformationParam(mParamResonantFrequency, mParamQFactor,
176 mParamMaxAmplitude));
177 SetAndGetHapticGeneratorParameters();
178}
179
180INSTANTIATE_TEST_SUITE_P(
181 HapticGeneratorValidTest, HapticGeneratorParamTest,
182 ::testing::Combine(testing::ValuesIn(EffectFactoryHelper::getAllEffectDescriptors(
183 IFactory::descriptor, kHapticGeneratorTypeUUID)),
184 testing::ValuesIn(kHapticScaleIdValues),
185 testing::ValuesIn(kVibratorScaleValues),
186 testing::ValuesIn(kResonantFrequencyValues),
187 testing::ValuesIn(kQFactorValues), testing::ValuesIn(kMaxAmplitude)),
188 [](const testing::TestParamInfo<HapticGeneratorParamTest::ParamType>& info) {
189 auto descriptor = std::get<PARAM_INSTANCE_NAME>(info.param).second;
190 std::string hapticScaleID = std::to_string(std::get<PARAM_HAPTIC_SCALE_ID>(info.param));
191 std::string hapticScaleVibScale = std::to_string(
192 static_cast<int>(std::get<PARAM_HAPTIC_SCALE_VIBRATOR_SCALE>(info.param)));
193 std::string resonantFrequency = std::to_string(
194 std::get<PARAM_VIBRATION_INFORMATION_RESONANT_FREQUENCY>(info.param));
195 std::string qFactor =
196 std::to_string(std::get<PARAM_VIBRATION_INFORMATION_Q_FACTOR>(info.param));
197 std::string maxAmplitude =
198 std::to_string(std::get<PARAM_VIBRATION_INFORMATION_MAX_AMPLITUDE>(info.param));
199 std::string name = "Implementor_" + descriptor.common.implementor + "_name_" +
200 descriptor.common.name + "_UUID_" +
201 descriptor.common.id.uuid.toString() + "_hapticScaleId" +
202 hapticScaleID + "_hapticScaleVibScale" + hapticScaleVibScale +
203 "_resonantFrequency" + resonantFrequency + "_qFactor" + qFactor +
204 "_maxAmplitude" + maxAmplitude;
205 std::replace_if(
206 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
207 return name;
208 });
209
210INSTANTIATE_TEST_SUITE_P(
211 HapticGeneratorInvalidTest, HapticGeneratorParamTest,
212 ::testing::Combine(testing::ValuesIn(EffectFactoryHelper::getAllEffectDescriptors(
213 IFactory::descriptor, kHapticGeneratorTypeUUID)),
214 testing::Values(MIN_ID - 1),
Shraddha Basantwanic7d237d2022-12-18 15:01:14 +0530215 testing::Values(HapticGenerator::VibratorScale::NONE),
Sham Rathodd4f15e32022-11-18 14:25:52 +0530216 testing::Values(MIN_FLOAT), testing::Values(MIN_FLOAT),
217 testing::Values(MIN_FLOAT)),
218 [](const testing::TestParamInfo<HapticGeneratorParamTest::ParamType>& info) {
219 auto descriptor = std::get<PARAM_INSTANCE_NAME>(info.param).second;
220 std::string hapticScaleID = std::to_string(std::get<PARAM_HAPTIC_SCALE_ID>(info.param));
221 std::string hapticScaleVibScale = std::to_string(
222 static_cast<int>(std::get<PARAM_HAPTIC_SCALE_VIBRATOR_SCALE>(info.param)));
223 std::string resonantFrequency = std::to_string(
224 std::get<PARAM_VIBRATION_INFORMATION_RESONANT_FREQUENCY>(info.param));
225 std::string qFactor =
226 std::to_string(std::get<PARAM_VIBRATION_INFORMATION_Q_FACTOR>(info.param));
227 std::string maxAmplitude =
228 std::to_string(std::get<PARAM_VIBRATION_INFORMATION_MAX_AMPLITUDE>(info.param));
229 std::string name = "Implementor_" + descriptor.common.implementor + "_name_" +
230 descriptor.common.name + "_UUID_" +
231 descriptor.common.id.uuid.toString() + "_hapticScaleId" +
232 hapticScaleID + "_hapticScaleVibScale" + hapticScaleVibScale +
233 "_resonantFrequency" + resonantFrequency + "_qFactor" + qFactor +
234 "_maxAmplitude" + maxAmplitude;
235 std::replace_if(
236 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
237 return name;
238 });
Sham Rathodd4f15e32022-11-18 14:25:52 +0530239GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(HapticGeneratorParamTest);
240
Shraddha Basantwanic7d237d2022-12-18 15:01:14 +0530241// Test HapticScale[] hapticScales parameter
242using HapticGeneratorScalesTestParam = std::tuple<std::pair<std::shared_ptr<IFactory>, Descriptor>>;
243class HapticGeneratorScalesTest : public ::testing::TestWithParam<HapticGeneratorScalesTestParam>,
244 public EffectHelper {
245 public:
246 HapticGeneratorScalesTest() {
247 std::tie(mFactory, mDescriptor) = std::get<PARAM_INSTANCE_NAME>(GetParam());
248 }
249
250 void SetUp() override {
251 ASSERT_NE(nullptr, mFactory);
252 ASSERT_NO_FATAL_FAILURE(create(mFactory, mEffect, mDescriptor));
253
254 Parameter::Common common = EffectHelper::createParamCommon(
255 0 /* session */, 1 /* ioHandle */, 44100 /* iSampleRate */, 44100 /* oSampleRate */,
256 kInputFrameCount /* iFrameCount */, kOutputFrameCount /* oFrameCount */);
257 IEffect::OpenEffectReturn ret;
258 ASSERT_NO_FATAL_FAILURE(open(mEffect, common, std::nullopt, &ret, EX_NONE));
259 ASSERT_NE(nullptr, mEffect);
260 }
261
262 void TearDown() override {
263 ASSERT_NO_FATAL_FAILURE(close(mEffect));
264 ASSERT_NO_FATAL_FAILURE(destroy(mFactory, mEffect));
265 CleanUp();
266 }
267
268 static const long kInputFrameCount = 0x100, kOutputFrameCount = 0x100;
269 std::shared_ptr<IFactory> mFactory;
270 std::shared_ptr<IEffect> mEffect;
271 Descriptor mDescriptor;
272
273 void addHapticScaleParam(std::vector<HapticGenerator::HapticScale> scales) {
274 mHapticScales.push_back(HapticGenerator::make<HapticGenerator::hapticScales>(scales));
275 for (const auto& scale : scales) {
276 expectMap.insert_or_assign(scale.id, scale.scale);
277 }
278 }
279
280 void SetHapticScaleParameters() {
281 // std::unordered_set<HapticGenerator::HapticScale> target;
282 for (auto& it : mHapticScales) {
283 Parameter::Specific specific =
284 Parameter::Specific::make<Parameter::Specific::hapticGenerator>(it);
285 Parameter param = Parameter::make<Parameter::specific>(specific);
286 EXPECT_STATUS(EX_NONE, mEffect->setParameter(param)) << param.toString();
287 }
288 }
289
290 void checkHapticScaleParameter() {
291 // get parameter
292 Parameter targetParam;
293 HapticGenerator::Id hgId = HapticGenerator::Id::make<HapticGenerator::Id::commonTag>(
294 HapticGenerator::hapticScales);
295 Parameter::Id id = Parameter::Id::make<Parameter::Id::hapticGeneratorTag>(hgId);
296 EXPECT_STATUS(EX_NONE, mEffect->getParameter(id, &targetParam));
297 ASSERT_EQ(Parameter::specific, targetParam.getTag());
298 Parameter::Specific specific = targetParam.get<Parameter::specific>();
299 ASSERT_EQ(Parameter::Specific::hapticGenerator, specific.getTag());
300 HapticGenerator hg = specific.get<Parameter::Specific::hapticGenerator>();
301 ASSERT_EQ(HapticGenerator::hapticScales, hg.getTag());
302 std::vector<HapticGenerator::HapticScale> scales = hg.get<HapticGenerator::hapticScales>();
303 ASSERT_EQ(scales.size(), expectMap.size());
304 for (const auto& scale : scales) {
305 auto itor = expectMap.find(scale.id);
306 ASSERT_NE(expectMap.end(), itor);
307 ASSERT_EQ(scale.scale, itor->second);
308 expectMap.erase(scale.id);
309 }
310 ASSERT_EQ(0ul, expectMap.size());
311 }
312
313 const static HapticGenerator::HapticScale kHapticScaleWithMinId;
314 const static HapticGenerator::HapticScale kHapticScaleWithMinIdNew;
315 const static HapticGenerator::HapticScale kHapticScale;
316 const static HapticGenerator::HapticScale kHapticScaleNew;
317 const static HapticGenerator::HapticScale kHapticScaleWithMaxId;
318 const static HapticGenerator::HapticScale kHapticScaleWithMaxIdNew;
319
320 std::vector<HapticGenerator> mHapticScales;
321
322 void CleanUp() {
323 mHapticScales.clear();
324 expectMap.clear();
325 }
326
327 private:
328 std::map<int /* trackID */, HapticGenerator::VibratorScale> expectMap;
329};
330
331const HapticGenerator::HapticScale HapticGeneratorScalesTest::kHapticScaleWithMinId = {
332 .id = MIN_ID, .scale = HapticGenerator::VibratorScale::MUTE};
333const HapticGenerator::HapticScale HapticGeneratorScalesTest::kHapticScaleWithMinIdNew = {
334 .id = MIN_ID, .scale = HapticGenerator::VibratorScale::VERY_LOW};
335const HapticGenerator::HapticScale HapticGeneratorScalesTest::kHapticScale = {
336 .id = 1, .scale = HapticGenerator::VibratorScale::LOW};
337const HapticGenerator::HapticScale HapticGeneratorScalesTest::kHapticScaleNew = {
338 .id = 1, .scale = HapticGenerator::VibratorScale::NONE};
339const HapticGenerator::HapticScale HapticGeneratorScalesTest::kHapticScaleWithMaxId = {
340 .id = MAX_ID, .scale = HapticGenerator::VibratorScale::VERY_HIGH};
341const HapticGenerator::HapticScale HapticGeneratorScalesTest::kHapticScaleWithMaxIdNew = {
342 .id = MAX_ID, .scale = HapticGenerator::VibratorScale::MUTE};
343
344TEST_P(HapticGeneratorScalesTest, SetAndUpdateOne) {
345 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScale}));
346 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
347 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScaleNew}));
348 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
349
350 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScaleWithMinId}));
351 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
352 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScaleWithMinIdNew}));
353 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
354
355 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScaleWithMaxId}));
356 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
357 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScaleWithMaxIdNew}));
358 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
359
360 EXPECT_NO_FATAL_FAILURE(checkHapticScaleParameter());
361}
362
363TEST_P(HapticGeneratorScalesTest, SetAndUpdateVector) {
364 EXPECT_NO_FATAL_FAILURE(
365 addHapticScaleParam({kHapticScale, kHapticScaleWithMaxId, kHapticScaleWithMinId}));
366 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
367 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam(
368 {kHapticScaleNew, kHapticScaleWithMaxIdNew, kHapticScaleWithMinIdNew}));
369 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
370
371 EXPECT_NO_FATAL_FAILURE(checkHapticScaleParameter());
372}
373
374TEST_P(HapticGeneratorScalesTest, SetAndUpdateMultipleVector) {
375 EXPECT_NO_FATAL_FAILURE(
376 addHapticScaleParam({kHapticScale, kHapticScaleWithMaxId, kHapticScaleWithMinId}));
377 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
378 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam(
379 {kHapticScaleNew, kHapticScaleWithMaxIdNew, kHapticScaleWithMinIdNew}));
380 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
381 EXPECT_NO_FATAL_FAILURE(
382 addHapticScaleParam({kHapticScale, kHapticScaleWithMaxId, kHapticScaleWithMinId}));
383 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
384
385 EXPECT_NO_FATAL_FAILURE(checkHapticScaleParameter());
386}
387
388TEST_P(HapticGeneratorScalesTest, SetOneAndAddMoreVector) {
389 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScale}));
390 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
391 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScaleWithMaxId, kHapticScaleWithMinId}));
392 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
393
394 EXPECT_NO_FATAL_FAILURE(checkHapticScaleParameter());
395}
396
397TEST_P(HapticGeneratorScalesTest, SetMultipleAndAddOneVector) {
398 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScaleWithMaxId, kHapticScaleWithMinId}));
399 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
400 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScale}));
401 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
402
403 EXPECT_NO_FATAL_FAILURE(checkHapticScaleParameter());
404}
405
406TEST_P(HapticGeneratorScalesTest, SetMultipleVectorRepeat) {
407 EXPECT_NO_FATAL_FAILURE(
408 addHapticScaleParam({kHapticScaleWithMaxId, kHapticScale, kHapticScaleWithMinId}));
409 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
410 EXPECT_NO_FATAL_FAILURE(
411 addHapticScaleParam({kHapticScaleWithMaxId, kHapticScale, kHapticScaleWithMinId}));
412 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
413 EXPECT_NO_FATAL_FAILURE(
414 addHapticScaleParam({kHapticScaleWithMaxId, kHapticScale, kHapticScaleWithMinId}));
415 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
416
417 EXPECT_NO_FATAL_FAILURE(checkHapticScaleParameter());
418}
419
420INSTANTIATE_TEST_SUITE_P(
421 HapticGeneratorScalesTest, HapticGeneratorScalesTest,
422 ::testing::Combine(testing::ValuesIn(EffectFactoryHelper::getAllEffectDescriptors(
423 IFactory::descriptor, kHapticGeneratorTypeUUID))),
424 [](const testing::TestParamInfo<HapticGeneratorScalesTest::ParamType>& info) {
425 auto descriptor = std::get<PARAM_INSTANCE_NAME>(info.param).second;
426 std::string name = "Implementor_" + descriptor.common.implementor + "_name_" +
427 descriptor.common.name + "_UUID_" +
428 descriptor.common.id.uuid.toString();
429 std::replace_if(
430 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
431 return name;
432 });
433GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(HapticGeneratorScalesTest);
434
Sham Rathodd4f15e32022-11-18 14:25:52 +0530435int main(int argc, char** argv) {
436 ::testing::InitGoogleTest(&argc, argv);
437 ABinderProcess_setThreadPoolMaxThreadCount(1);
438 ABinderProcess_startThreadPool();
439 return RUN_ALL_TESTS();
440}