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