blob: 5a32398b282e3403e71a3972c956968f193eac1b [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#include <aidl/Vintf.h>
22#define LOG_TAG "VtsHalHapticGeneratorTargetTest"
23#include <android-base/logging.h>
24#include <android/binder_enums.h>
25
Sham Rathodd4f15e32022-11-18 14:25:52 +053026#include "EffectHelper.h"
27
28using namespace android;
29
Sham Rathodd4f15e32022-11-18 14:25:52 +053030using aidl::android::hardware::audio::effect::Descriptor;
Shunkai Yaof8be1ac2023-03-06 18:41:27 +000031using aidl::android::hardware::audio::effect::getEffectTypeUuidHapticGenerator;
Sham Rathodd4f15e32022-11-18 14:25:52 +053032using aidl::android::hardware::audio::effect::HapticGenerator;
33using aidl::android::hardware::audio::effect::IEffect;
34using aidl::android::hardware::audio::effect::IFactory;
Sham Rathodd4f15e32022-11-18 14:25:52 +053035using aidl::android::hardware::audio::effect::Parameter;
Jaideep Sharma74498412023-09-13 15:25:25 +053036using android::hardware::audio::common::testing::detail::TestExecutionTracer;
Sham Rathodd4f15e32022-11-18 14:25:52 +053037
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(
Shunkai Yaof8be1ac2023-03-06 18:41:27 +0000183 IFactory::descriptor, getEffectTypeUuidHapticGenerator())),
Sham Rathodd4f15e32022-11-18 14:25:52 +0530184 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));
Shunkai Yao9e60e632023-06-23 04:34:50 +0000199 std::string name = getPrefix(descriptor) + "_hapticScaleId" + hapticScaleID +
200 "_hapticScaleVibScale" + hapticScaleVibScale + "_resonantFrequency" +
201 resonantFrequency + "_qFactor" + qFactor + "_maxAmplitude" +
202 maxAmplitude;
Sham Rathodd4f15e32022-11-18 14:25:52 +0530203 std::replace_if(
204 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
205 return name;
206 });
207
208INSTANTIATE_TEST_SUITE_P(
209 HapticGeneratorInvalidTest, HapticGeneratorParamTest,
210 ::testing::Combine(testing::ValuesIn(EffectFactoryHelper::getAllEffectDescriptors(
Shunkai Yaof8be1ac2023-03-06 18:41:27 +0000211 IFactory::descriptor, getEffectTypeUuidHapticGenerator())),
Shunkai Yao5ed80c52023-09-07 17:42:39 +0000212 testing::Values(MIN_ID),
Shraddha Basantwanic7d237d2022-12-18 15:01:14 +0530213 testing::Values(HapticGenerator::VibratorScale::NONE),
Sham Rathodd4f15e32022-11-18 14:25:52 +0530214 testing::Values(MIN_FLOAT), testing::Values(MIN_FLOAT),
215 testing::Values(MIN_FLOAT)),
216 [](const testing::TestParamInfo<HapticGeneratorParamTest::ParamType>& info) {
217 auto descriptor = std::get<PARAM_INSTANCE_NAME>(info.param).second;
218 std::string hapticScaleID = std::to_string(std::get<PARAM_HAPTIC_SCALE_ID>(info.param));
219 std::string hapticScaleVibScale = std::to_string(
220 static_cast<int>(std::get<PARAM_HAPTIC_SCALE_VIBRATOR_SCALE>(info.param)));
221 std::string resonantFrequency = std::to_string(
222 std::get<PARAM_VIBRATION_INFORMATION_RESONANT_FREQUENCY>(info.param));
223 std::string qFactor =
224 std::to_string(std::get<PARAM_VIBRATION_INFORMATION_Q_FACTOR>(info.param));
225 std::string maxAmplitude =
226 std::to_string(std::get<PARAM_VIBRATION_INFORMATION_MAX_AMPLITUDE>(info.param));
227 std::string name = "Implementor_" + descriptor.common.implementor + "_name_" +
228 descriptor.common.name + "_UUID_" +
229 descriptor.common.id.uuid.toString() + "_hapticScaleId" +
230 hapticScaleID + "_hapticScaleVibScale" + hapticScaleVibScale +
231 "_resonantFrequency" + resonantFrequency + "_qFactor" + qFactor +
232 "_maxAmplitude" + maxAmplitude;
233 std::replace_if(
234 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
235 return name;
236 });
Sham Rathodd4f15e32022-11-18 14:25:52 +0530237GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(HapticGeneratorParamTest);
238
Shraddha Basantwanic7d237d2022-12-18 15:01:14 +0530239// Test HapticScale[] hapticScales parameter
240using HapticGeneratorScalesTestParam = std::tuple<std::pair<std::shared_ptr<IFactory>, Descriptor>>;
241class HapticGeneratorScalesTest : public ::testing::TestWithParam<HapticGeneratorScalesTestParam>,
242 public EffectHelper {
243 public:
244 HapticGeneratorScalesTest() {
245 std::tie(mFactory, mDescriptor) = std::get<PARAM_INSTANCE_NAME>(GetParam());
246 }
247
248 void SetUp() override {
249 ASSERT_NE(nullptr, mFactory);
250 ASSERT_NO_FATAL_FAILURE(create(mFactory, mEffect, mDescriptor));
251
252 Parameter::Common common = EffectHelper::createParamCommon(
253 0 /* session */, 1 /* ioHandle */, 44100 /* iSampleRate */, 44100 /* oSampleRate */,
254 kInputFrameCount /* iFrameCount */, kOutputFrameCount /* oFrameCount */);
255 IEffect::OpenEffectReturn ret;
256 ASSERT_NO_FATAL_FAILURE(open(mEffect, common, std::nullopt, &ret, EX_NONE));
257 ASSERT_NE(nullptr, mEffect);
258 }
259
260 void TearDown() override {
261 ASSERT_NO_FATAL_FAILURE(close(mEffect));
262 ASSERT_NO_FATAL_FAILURE(destroy(mFactory, mEffect));
263 CleanUp();
264 }
265
266 static const long kInputFrameCount = 0x100, kOutputFrameCount = 0x100;
267 std::shared_ptr<IFactory> mFactory;
268 std::shared_ptr<IEffect> mEffect;
269 Descriptor mDescriptor;
270
271 void addHapticScaleParam(std::vector<HapticGenerator::HapticScale> scales) {
272 mHapticScales.push_back(HapticGenerator::make<HapticGenerator::hapticScales>(scales));
273 for (const auto& scale : scales) {
274 expectMap.insert_or_assign(scale.id, scale.scale);
275 }
276 }
277
278 void SetHapticScaleParameters() {
279 // std::unordered_set<HapticGenerator::HapticScale> target;
280 for (auto& it : mHapticScales) {
281 Parameter::Specific specific =
282 Parameter::Specific::make<Parameter::Specific::hapticGenerator>(it);
283 Parameter param = Parameter::make<Parameter::specific>(specific);
284 EXPECT_STATUS(EX_NONE, mEffect->setParameter(param)) << param.toString();
285 }
286 }
287
288 void checkHapticScaleParameter() {
289 // get parameter
290 Parameter targetParam;
291 HapticGenerator::Id hgId = HapticGenerator::Id::make<HapticGenerator::Id::commonTag>(
292 HapticGenerator::hapticScales);
293 Parameter::Id id = Parameter::Id::make<Parameter::Id::hapticGeneratorTag>(hgId);
294 EXPECT_STATUS(EX_NONE, mEffect->getParameter(id, &targetParam));
295 ASSERT_EQ(Parameter::specific, targetParam.getTag());
296 Parameter::Specific specific = targetParam.get<Parameter::specific>();
297 ASSERT_EQ(Parameter::Specific::hapticGenerator, specific.getTag());
298 HapticGenerator hg = specific.get<Parameter::Specific::hapticGenerator>();
299 ASSERT_EQ(HapticGenerator::hapticScales, hg.getTag());
300 std::vector<HapticGenerator::HapticScale> scales = hg.get<HapticGenerator::hapticScales>();
301 ASSERT_EQ(scales.size(), expectMap.size());
302 for (const auto& scale : scales) {
303 auto itor = expectMap.find(scale.id);
304 ASSERT_NE(expectMap.end(), itor);
305 ASSERT_EQ(scale.scale, itor->second);
306 expectMap.erase(scale.id);
307 }
308 ASSERT_EQ(0ul, expectMap.size());
309 }
310
311 const static HapticGenerator::HapticScale kHapticScaleWithMinId;
312 const static HapticGenerator::HapticScale kHapticScaleWithMinIdNew;
313 const static HapticGenerator::HapticScale kHapticScale;
314 const static HapticGenerator::HapticScale kHapticScaleNew;
315 const static HapticGenerator::HapticScale kHapticScaleWithMaxId;
316 const static HapticGenerator::HapticScale kHapticScaleWithMaxIdNew;
317
318 std::vector<HapticGenerator> mHapticScales;
319
320 void CleanUp() {
321 mHapticScales.clear();
322 expectMap.clear();
323 }
324
325 private:
326 std::map<int /* trackID */, HapticGenerator::VibratorScale> expectMap;
327};
328
329const HapticGenerator::HapticScale HapticGeneratorScalesTest::kHapticScaleWithMinId = {
330 .id = MIN_ID, .scale = HapticGenerator::VibratorScale::MUTE};
331const HapticGenerator::HapticScale HapticGeneratorScalesTest::kHapticScaleWithMinIdNew = {
332 .id = MIN_ID, .scale = HapticGenerator::VibratorScale::VERY_LOW};
333const HapticGenerator::HapticScale HapticGeneratorScalesTest::kHapticScale = {
334 .id = 1, .scale = HapticGenerator::VibratorScale::LOW};
335const HapticGenerator::HapticScale HapticGeneratorScalesTest::kHapticScaleNew = {
336 .id = 1, .scale = HapticGenerator::VibratorScale::NONE};
337const HapticGenerator::HapticScale HapticGeneratorScalesTest::kHapticScaleWithMaxId = {
338 .id = MAX_ID, .scale = HapticGenerator::VibratorScale::VERY_HIGH};
339const HapticGenerator::HapticScale HapticGeneratorScalesTest::kHapticScaleWithMaxIdNew = {
340 .id = MAX_ID, .scale = HapticGenerator::VibratorScale::MUTE};
341
342TEST_P(HapticGeneratorScalesTest, SetAndUpdateOne) {
343 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScale}));
344 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
345 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScaleNew}));
346 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
347
348 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScaleWithMinId}));
349 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
350 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScaleWithMinIdNew}));
351 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
352
353 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScaleWithMaxId}));
354 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
355 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScaleWithMaxIdNew}));
356 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
357
358 EXPECT_NO_FATAL_FAILURE(checkHapticScaleParameter());
359}
360
361TEST_P(HapticGeneratorScalesTest, SetAndUpdateVector) {
362 EXPECT_NO_FATAL_FAILURE(
363 addHapticScaleParam({kHapticScale, kHapticScaleWithMaxId, kHapticScaleWithMinId}));
364 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
365 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam(
366 {kHapticScaleNew, kHapticScaleWithMaxIdNew, kHapticScaleWithMinIdNew}));
367 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
368
369 EXPECT_NO_FATAL_FAILURE(checkHapticScaleParameter());
370}
371
372TEST_P(HapticGeneratorScalesTest, SetAndUpdateMultipleVector) {
373 EXPECT_NO_FATAL_FAILURE(
374 addHapticScaleParam({kHapticScale, kHapticScaleWithMaxId, kHapticScaleWithMinId}));
375 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
376 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam(
377 {kHapticScaleNew, kHapticScaleWithMaxIdNew, kHapticScaleWithMinIdNew}));
378 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
379 EXPECT_NO_FATAL_FAILURE(
380 addHapticScaleParam({kHapticScale, kHapticScaleWithMaxId, kHapticScaleWithMinId}));
381 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
382
383 EXPECT_NO_FATAL_FAILURE(checkHapticScaleParameter());
384}
385
386TEST_P(HapticGeneratorScalesTest, SetOneAndAddMoreVector) {
387 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScale}));
388 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
389 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScaleWithMaxId, kHapticScaleWithMinId}));
390 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
391
392 EXPECT_NO_FATAL_FAILURE(checkHapticScaleParameter());
393}
394
395TEST_P(HapticGeneratorScalesTest, SetMultipleAndAddOneVector) {
396 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScaleWithMaxId, kHapticScaleWithMinId}));
397 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
398 EXPECT_NO_FATAL_FAILURE(addHapticScaleParam({kHapticScale}));
399 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
400
401 EXPECT_NO_FATAL_FAILURE(checkHapticScaleParameter());
402}
403
404TEST_P(HapticGeneratorScalesTest, SetMultipleVectorRepeat) {
405 EXPECT_NO_FATAL_FAILURE(
406 addHapticScaleParam({kHapticScaleWithMaxId, kHapticScale, kHapticScaleWithMinId}));
407 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
408 EXPECT_NO_FATAL_FAILURE(
409 addHapticScaleParam({kHapticScaleWithMaxId, kHapticScale, kHapticScaleWithMinId}));
410 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
411 EXPECT_NO_FATAL_FAILURE(
412 addHapticScaleParam({kHapticScaleWithMaxId, kHapticScale, kHapticScaleWithMinId}));
413 EXPECT_NO_FATAL_FAILURE(SetHapticScaleParameters());
414
415 EXPECT_NO_FATAL_FAILURE(checkHapticScaleParameter());
416}
417
418INSTANTIATE_TEST_SUITE_P(
419 HapticGeneratorScalesTest, HapticGeneratorScalesTest,
420 ::testing::Combine(testing::ValuesIn(EffectFactoryHelper::getAllEffectDescriptors(
Shunkai Yaof8be1ac2023-03-06 18:41:27 +0000421 IFactory::descriptor, getEffectTypeUuidHapticGenerator()))),
Shraddha Basantwanic7d237d2022-12-18 15:01:14 +0530422 [](const testing::TestParamInfo<HapticGeneratorScalesTest::ParamType>& info) {
423 auto descriptor = std::get<PARAM_INSTANCE_NAME>(info.param).second;
424 std::string name = "Implementor_" + descriptor.common.implementor + "_name_" +
425 descriptor.common.name + "_UUID_" +
426 descriptor.common.id.uuid.toString();
427 std::replace_if(
428 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
429 return name;
430 });
431GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(HapticGeneratorScalesTest);
432
Sham Rathodd4f15e32022-11-18 14:25:52 +0530433int main(int argc, char** argv) {
434 ::testing::InitGoogleTest(&argc, argv);
Jaideep Sharma74498412023-09-13 15:25:25 +0530435 ::testing::UnitTest::GetInstance()->listeners().Append(new TestExecutionTracer());
Sham Rathodd4f15e32022-11-18 14:25:52 +0530436 ABinderProcess_setThreadPoolMaxThreadCount(1);
437 ABinderProcess_startThreadPool();
438 return RUN_ALL_TESTS();
439}