1 /*
2  * Copyright (c) 2021-2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <gtest/gtest.h>
17 
18 #include "string_wrapper.h"
19 #include "base_obj.h"
20 #include "bool_wrapper.h"
21 #include "int_wrapper.h"
22 #include "float_wrapper.h"
23 #include "long_wrapper.h"
24 #include "array_wrapper.h"
25 
26 #define private public
27 #define protected public
28 #include "operation.h"
29 #include "want.h"
30 #undef private
31 #undef protected
32 
33 using namespace testing::ext;
34 using namespace OHOS::AAFwk;
35 using namespace OHOS;
36 using OHOS::Parcel;
37 using OHOS::AppExecFwk::ElementName;
38 
39 namespace OHOS {
40 namespace AAFwk {
41 class WantBaseTest : public testing::Test {
42 public:
WantBaseTest()43     WantBaseTest()
44     {}
~WantBaseTest()45     ~WantBaseTest()
46     {}
47     static void SetUpTestCase(void);
48     static void TearDownTestCase(void);
49     void SetUp();
50     void TearDown();
51 
52     std::shared_ptr<Want> want_ = nullptr;
53 
54     void CompareWant(const std::shared_ptr<Want> &want1, const std::shared_ptr<Want> &want2) const;
55     bool CompareWant(const std::shared_ptr<Want> &want1, const std::shared_ptr<Want> &want2,
56         std::map<std::string, std::string> &keys) const;
57     void SendParcelTest(const std::shared_ptr<Want> &want, std::map<std::string, std::string> &keys) const;
58     void AddBoolParams(Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const;
59     void AddByteParams(Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const;
60     void AddCharParams(Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const;
61     void AddShortParams(Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const;
62     void AddIntParams(Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const;
63     void AddLongParams(Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const;
64     void AddFloatParams(Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const;
65     void AddDoubleParams(Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const;
66     void AddStringParams(Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const;
67 
68     std::string boolType = "bool";
69     std::string boolArrayType = "boolArray";
70     std::string byteType = "byte";
71     std::string byteArrayType = "byteArray";
72     std::string charType = "char";
73     std::string charArrayType = "charArray";
74     std::string shortType = "short";
75     std::string shortArrayType = "shortArray";
76     std::string intType = "int";
77     std::string intArrayType = "intArray";
78     std::string longType = "long";
79     std::string longArrayType = "longArray";
80     std::string floatType = "float";
81     std::string floatArrayType = "floatArray";
82     std::string doubleType = "double";
83     std::string doubleArrayType = "doubleArray";
84     std::string stringType = "string";
85     std::string stringArrayType = "stringArray";
86 
87     static const std::string URI_STRING_HEAD;
88     static const std::string URI_STRING_END;
89 };
90 
91 template<typename T>
CompareArrayData(const std::vector<T> & arr1,const std::vector<T> & arr2)92 bool CompareArrayData(const std::vector<T> &arr1, const std::vector<T> &arr2)
93 {
94     if (arr1.size() != arr2.size()) {
95         return false;
96     }
97 
98     for (std::uint32_t i = 0; i < arr1.size(); i++) {
99         if (arr1[i] != arr2[i]) {
100             return false;
101         }
102     }
103 
104     return true;
105 };
106 
107 enum type { FLAG_TEST_SINGLE = 0x01, FLAG_TEST_ARRAY, FLAG_TEST_BOTH };
108 
SetUpTestCase(void)109 void WantBaseTest::SetUpTestCase(void)
110 {}
111 
TearDownTestCase(void)112 void WantBaseTest::TearDownTestCase(void)
113 {}
114 
SetUp(void)115 void WantBaseTest::SetUp(void)
116 {
117     want_ = std::make_shared<Want>();
118 }
119 
TearDown(void)120 void WantBaseTest::TearDown(void)
121 {}
122 
123 const std::string WantBaseTest::URI_STRING_HEAD("#Intent;");
124 const std::string WantBaseTest::URI_STRING_END(";end");
125 
126 /**
127  * @tc.number: AaExecFwk_Want_Type_0100
128  * @tc.name: SetType/GetType
129  * @tc.desc: Validate when normally entering a string
130  */
131 HWTEST_F(WantBaseTest, AaExecFwk_Want_Type_0100, Function | MediumTest | Level1)
132 {
133     if (want_ != nullptr) {
134         std::string description = "liuuy";
135         want_->SetType(description);
136         EXPECT_STREQ(description.c_str(), want_->GetType().c_str());
137     }
138 }
139 
140 /**
141  * @tc.number: AaFwk_Want_Action_0100
142  * @tc.name: SetAction/GetAction
143  * @tc.desc: Validate when normally entering a string
144  */
145 HWTEST_F(WantBaseTest, AaFwk_Want_Action_0100, Function | MediumTest | Level1)
146 {
147     if (want_ != nullptr) {
148         std::string actiondescription = "liuuy";
149         want_->SetAction(actiondescription);
150         EXPECT_STREQ(actiondescription.c_str(), want_->GetAction().c_str());
151     }
152 }
153 
154 /**
155  * @tc.number: AaFwk_Want_Bundle_0100
156  * @tc.name: SetBundle/GetBundle
157  * @tc.desc: Validate when normally entering a string
158  */
159 HWTEST_F(WantBaseTest, AaFwk_Want_Bundle_0100, Function | MediumTest | Level1)
160 {
161     if (want_ != nullptr) {
162         std::string bundleName = "liuuy";
163         want_->SetBundle(bundleName);
164         EXPECT_STREQ(bundleName.c_str(), want_->GetBundle().c_str());
165     }
166 }
167 
168 /**
169  * @tc.number: AaFwk_Want_DeviceId_0100
170  * @tc.name: SetDeviceId/GetDeviceId
171  * @tc.desc: Validate when normally entering a string
172  */
173 HWTEST_F(WantBaseTest, AaFwk_Want_DeviceId_0100, Function | MediumTest | Level1)
174 {
175     if (want_ != nullptr) {
176         std::string DeviceId = "liuuy";
177         want_->SetDeviceId(DeviceId);
178         EXPECT_STREQ(DeviceId.c_str(), want_->GetDeviceId().c_str());
179     }
180 }
181 
182 /**
183  * @tc.number: AaFwk_Want_ModuleName_0100
184  * @tc.name: SetModuleName/GetModuleName
185  * @tc.desc: Validate when normally entering a string
186  */
187 HWTEST_F(WantBaseTest, AaFwk_Want_ModuleName_0100, Function | MediumTest | Level1)
188 {
189     if (want_ != nullptr) {
190         std::string ModuleName = "liuuy";
191         want_->SetModuleName(ModuleName);
192         EXPECT_STREQ(ModuleName.c_str(), want_->GetModuleName().c_str());
193     }
194 }
195 /**
196  * @tc.number: AaFwk_Want_Parcelable_0100
197  * @tc.name: Marshalling/Unmarshalling
198  * @tc.desc: marshalling Want, and then check result.
199  */
200 HWTEST_F(WantBaseTest, AaFwk_Want_Parcelable_0100, Function | MediumTest | Level1)
201 {
202     std::shared_ptr<Want> WantIn_ = std::make_shared<Want>();
203     if (WantIn_ == nullptr) {
204         return;
205     }
206 
207     WantIn_->SetAction("12345");
208     WantIn_->SetFlags(123);
209 
210     WantIn_->SetAction("12345");
211     WantIn_->SetFlags(123);
212     WantIn_->AddEntity("12345");
213     WantParams wantParams;
214     std::string keyStr = "12345667";
215     bool valueBool = true;
216     wantParams.SetParam(keyStr, Boolean::Box(valueBool));
217     WantIn_->SetParams(wantParams);
218     OHOS::AppExecFwk::ElementName element;
219     element.SetAbilityName("12345");
220     element.SetBundleName("12345");
221     element.SetDeviceID("12345");
222     WantIn_->SetElement(element);
223     WantIn_->SetType("12345");
224     size_t pos1;
225     size_t pos2;
226     bool result = false;
227 
228     Parcel in;
229     pos1 = in.GetWritePosition();
230     result = WantIn_->Marshalling(in);
231     pos2 = in.GetWritePosition();
232     EXPECT_EQ(result, true);
233     GTEST_LOG_(INFO) << " Marshalling: pos1: " << pos1 << ", pos2: " << pos2 << ", result: " << result;
234 
235     pos1 = in.GetWritePosition();
236     result = WantIn_->Marshalling(in);
237     pos2 = in.GetWritePosition();
238     EXPECT_EQ(result, true);
239     GTEST_LOG_(INFO) << " Marshalling: pos1: " << pos1 << ", pos2: " << pos2 << ", result: " << result;
240 
241     pos1 = in.GetReadPosition();
242     std::shared_ptr<Want> WantOut_(Want::Unmarshalling(in));
243     if (WantOut_ != nullptr) {
244         pos2 = in.GetReadPosition();
245         CompareWant(WantIn_, WantOut_);
246         EXPECT_EQ(valueBool, Boolean::Unbox(IBoolean::Query(WantOut_->GetParams().GetParam(keyStr))));
247         GTEST_LOG_(INFO) << " Unmarshalling: pos1: " << pos1 << ", pos2: " << pos2 << ", result: " << result;
248     }
249 
250     pos1 = in.GetReadPosition();
251     std::shared_ptr<Want> WantOut2_(Want::Unmarshalling(in));
252     if (WantOut2_ != nullptr) {
253         pos2 = in.GetReadPosition();
254         CompareWant(WantIn_, WantOut2_);
255         EXPECT_EQ(valueBool, Boolean::Unbox(IBoolean::Query(WantOut2_->GetParams().GetParam(keyStr))));
256         GTEST_LOG_(INFO) << " Unmarshalling: pos1: " << pos1 << ", pos2: " << pos2 << ", result: " << result;
257     }
258 }
259 /**
260  * @tc.number: AaFwk_Want_Parcelable_0200
261  * @tc.name: Marshalling/Unmarshalling
262  * @tc.desc: marshalling Want, and then check result.
263  */
264 HWTEST_F(WantBaseTest, AaFwk_Want_Parcelable_0200, Function | MediumTest | Level1)
265 {
266     std::shared_ptr<Want> WantIn_ = std::make_shared<Want>();
267     if (WantIn_ == nullptr) {
268         return;
269     }
270     WantIn_->SetAction("@#¥#3243adsafdf_中文");
271     WantIn_->SetFlags(123);
272     WantIn_->AddEntity("@#¥#3243adsafdf_中文");
273     WantParams wantParams;
274     std::string keyStr = "@#¥#3243adsafdf_中文";
275     long valueLong = 123;
276     wantParams.SetParam(keyStr, Long::Box(valueLong));
277     WantIn_->SetParams(wantParams);
278     OHOS::AppExecFwk::ElementName element;
279     element.SetAbilityName("@#¥#3243adsafdf_中文");
280     element.SetBundleName("@#¥#3243adsafdf_中文");
281     element.SetDeviceID("@#¥#3243adsafdf_中文");
282     WantIn_->SetElement(element);
283     WantIn_->SetType("@#¥#3243adsafdf_中文");
284     size_t pos1;
285     size_t pos2;
286     bool result = false;
287     Parcel in;
288     pos1 = in.GetWritePosition();
289     result = WantIn_->Marshalling(in);
290     pos2 = in.GetWritePosition();
291     EXPECT_EQ(result, true);
292     GTEST_LOG_(INFO) << "Marshalling: pos1: " << pos1 << ", pos2: " << pos2 << ", result: " << result;
293     pos1 = in.GetWritePosition();
294     result = WantIn_->Marshalling(in);
295     pos2 = in.GetWritePosition();
296     EXPECT_EQ(result, true);
297     pos1 = in.GetReadPosition();
298     std::shared_ptr<Want> WantOut_(Want::Unmarshalling(in));
299     if (WantOut_ != nullptr) {
300         pos2 = in.GetReadPosition();
301         CompareWant(WantIn_, WantOut_);
302         long retLong = Long::Unbox(ILong::Query(WantOut_->GetParams().GetParam(keyStr)));
303         EXPECT_EQ(valueLong, retLong);
304         GTEST_LOG_(INFO) << "Unmarshalling: pos1: " << pos1 << ", pos2: " << pos2 << ", result: " << result;
305     }
306     pos1 = in.GetReadPosition();
307     std::shared_ptr<Want> WantOut2_(Want::Unmarshalling(in));
308     if (WantOut2_ != nullptr) {
309         pos2 = in.GetReadPosition();
310         CompareWant(WantIn_, WantOut2_);
311         long retLong = Long::Unbox(ILong::Query(WantOut2_->GetParams().GetParam(keyStr)));
312         EXPECT_EQ(valueLong, retLong);
313     }
314 }
315 
316 /**
317  * @tc.number: AaFwk_Want_Parcelable_0300
318  * @tc.name: Marshalling/Unmarshalling
319  * @tc.desc: marshalling Want, and then check result.
320  */
321 HWTEST_F(WantBaseTest, AaFwk_Want_Parcelable_0300, Function | MediumTest | Level1)
322 {
323     std::shared_ptr<Want> WantIn_ = std::make_shared<Want>();
324     if (WantIn_ == nullptr) {
325         return;
326     }
327 
328     WantIn_->SetAction("");
329     WantIn_->SetFlags(123);
330     WantIn_->AddEntity("");
331     WantParams wantParams;
332     std::string keyStr = "";
333     int valueInt = 123;
334     wantParams.SetParam(keyStr, Integer::Box(valueInt));
335     WantIn_->SetParams(wantParams);
336     OHOS::AppExecFwk::ElementName element;
337     element.SetAbilityName("");
338     element.SetBundleName("");
339     element.SetDeviceID("");
340     WantIn_->SetElement(element);
341     WantIn_->SetType("");
342 
343     size_t pos1;
344     size_t pos2;
345     bool result = false;
346 
347     Parcel in;
348     pos1 = in.GetWritePosition();
349     result = WantIn_->Marshalling(in);
350     pos2 = in.GetWritePosition();
351     EXPECT_EQ(result, true);
352     GTEST_LOG_(INFO) << "Marshalling: pos1: " << pos1 << ", pos2: " << pos2 << ", result: " << result;
353 
354     pos1 = in.GetWritePosition();
355     result = WantIn_->Marshalling(in);
356     pos2 = in.GetWritePosition();
357     EXPECT_EQ(result, true);
358     GTEST_LOG_(INFO) << "Marshalling: pos1: " << pos1 << ", pos2: " << pos2 << ", result: " << result;
359 
360     pos1 = in.GetReadPosition();
361     std::shared_ptr<Want> WantOut_(Want::Unmarshalling(in));
362     if (WantOut_ != nullptr) {
363         pos2 = in.GetReadPosition();
364         CompareWant(WantIn_, WantOut_);
365         EXPECT_EQ(valueInt, Integer::Unbox(IInteger::Query(WantOut_->GetParams().GetParam(keyStr))));
366         GTEST_LOG_(INFO) << "Unmarshalling: pos1: " << pos1 << ", pos2: " << pos2 << ", result: " << result;
367     }
368 
369     pos1 = in.GetReadPosition();
370     std::shared_ptr<Want> WantOut2_(Want::Unmarshalling(in));
371     if (WantOut2_ != nullptr) {
372         pos2 = in.GetReadPosition();
373         CompareWant(WantIn_, WantOut2_);
374         EXPECT_EQ(valueInt, Integer::Unbox(IInteger::Query(WantOut2_->GetParams().GetParam(keyStr))));
375         GTEST_LOG_(INFO) << "Unmarshalling: pos1: " << pos1 << ", pos2: " << pos2 << ", result: " << result;
376     }
377 }
378 
379 /**
380  * @tc.number: AaFwk_Want_Parcelable_0400
381  * @tc.name: Marshalling/Unmarshalling
382  * @tc.desc: marshalling Want, and then check result.
383  */
384 HWTEST_F(WantBaseTest, AaFwk_Want_Parcelable_0400, Function | MediumTest | Level1)
385 {
386     std::shared_ptr<Want> WantIn_ = std::make_shared<Want>();
387     if (WantIn_ == nullptr) {
388         return;
389     }
390 
391     WantIn_->SetAction("12345");
392     WantIn_->SetFlags(123);
393     WantIn_->AddEntity("12345");
394     WantIn_->AddEntity("@#¥#3243adsafdf_中文");
395     WantIn_->AddEntity("");
396     WantParams wantParams;
397     std::string keyStr = "12345667";
398     std::string valueString = "123";
399     wantParams.SetParam(keyStr, String::Box(valueString));
400     WantIn_->SetParams(wantParams);
401     OHOS::AppExecFwk::ElementName element;
402     element.SetAbilityName("12345");
403     element.SetBundleName("12345");
404     element.SetDeviceID("12345");
405     WantIn_->SetElement(element);
406     WantIn_->SetType("12345");
407 
408     size_t pos1;
409     size_t pos2;
410     bool result = false;
411 
412     Parcel in;
413     pos1 = in.GetWritePosition();
414     result = WantIn_->Marshalling(in);
415     pos2 = in.GetWritePosition();
416     EXPECT_EQ(result, true);
417     GTEST_LOG_(INFO) << "Marshalling: pos1: " << pos1 << ", pos2: " << pos2 << ", result: " << result;
418 
419     pos1 = in.GetWritePosition();
420     result = WantIn_->Marshalling(in);
421     pos2 = in.GetWritePosition();
422     EXPECT_EQ(result, true);
423     GTEST_LOG_(INFO) << "Marshalling: pos1: " << pos1 << ", pos2: " << pos2 << ", result: " << result;
424 
425     pos1 = in.GetReadPosition();
426     std::shared_ptr<Want> WantOut_(Want::Unmarshalling(in));
427     if (WantOut_ != nullptr) {
428         pos2 = in.GetReadPosition();
429         CompareWant(WantIn_, WantOut_);
430         EXPECT_EQ(valueString, String::Unbox(IString::Query(WantOut_->GetParams().GetParam(keyStr))));
431         GTEST_LOG_(INFO) << "Unmarshalling: pos1: " << pos1 << ", pos2: " << pos2 << ", result: " << result;
432     }
433 
434     pos1 = in.GetReadPosition();
435     std::shared_ptr<Want> WantOut2_(Want::Unmarshalling(in));
436     if (WantOut2_ != nullptr) {
437         pos2 = in.GetReadPosition();
438         CompareWant(WantIn_, WantOut2_);
439         EXPECT_EQ(valueString, String::Unbox(IString::Query(WantOut2_->GetParams().GetParam(keyStr))));
440         GTEST_LOG_(INFO) << "Unmarshalling: pos1: " << pos1 << ", pos2: " << pos2 << ", result: " << result;
441     }
442 }
443 
444 /**
445  * @tc.number: AaFwk_Want_Parcelable_0500
446  * @tc.name: Marshalling/Unmarshalling
447  * @tc.desc: marshalling Want, and then check result.
448  */
449 HWTEST_F(WantBaseTest, AaFwk_Want_Parcelable_0500, Function | MediumTest | Level1)
450 {
451     GTEST_LOG_(INFO) << "AaFwk_Want_Parcelable_005 start";
452     std::shared_ptr<Want> WantIn_ = std::make_shared<Want>();
453     if (WantIn_ == nullptr) {
454         return;
455     }
456 
457     WantIn_->SetAction("system.test.action");
458     WantIn_->SetFlags(64);
459     WantIn_->AddEntity("system.test.entity");
460 
461     OHOS::AppExecFwk::ElementName element;
462     element.SetAbilityName("system.test.abilityname");
463     element.SetBundleName("system.test.bundlename");
464     element.SetDeviceID("system.test.deviceid");
465     WantIn_->SetElement(element);
466 
467     WantParams wantParams;
468     std::string keyStr = "system.test.wantparams.key";
469     std::string MIMEKEY = "mime-type";
470     wantParams.SetParam(MIMEKEY, String::Box("system.test.uritype"));
471 
472     std::string valueString = "system.wantparams.value.content.test";
473     wantParams.SetParam(keyStr, String::Box(valueString));
474     WantIn_->SetParams(wantParams);
475 
476     // want SetParam  arraydata  test
477     std::vector<bool> boolArrayValue = {true, false, true};
478     WantIn_->SetParam(std::string("bool_arraykey"), boolArrayValue);
479 
480     std::vector<byte> byteArrayValue = {'?', 'a', '\\'};
481     WantIn_->SetParam(std::string("byte_arraykey"), byteArrayValue);
482 
483     std::vector<zchar> charArrayValue = {U'e', U'l', U'l', U'o'};
484     WantIn_->SetParam(std::string("char_arraykey"), charArrayValue);
485 
486     std::vector<short> shortArrayValue = {-1, 0, 1};
487     WantIn_->SetParam(std::string("short_arraykey"), shortArrayValue);
488 
489     std::vector<int> intArrayValue = {-10, 0, 10};
490     WantIn_->SetParam(std::string("int_arraykey"), intArrayValue);
491 
492     std::vector<long> longArrayValue = {-100, 0, 100};
493     WantIn_->SetParam(std::string("long_arraykey"), longArrayValue);
494 
495     std::vector<float> floatArrayValue = {-100.1, 0.1, 100.1};
496     WantIn_->SetParam(std::string("float_arraykey"), floatArrayValue);
497 
498     std::vector<double> doubleArrayValue = {-1000.1, 0.1, 1000.1};
499     WantIn_->SetParam(std::string("double_arraykey"), doubleArrayValue);
500 
501     std::vector<std::string> stringArrayValue = {"stringtest1", "string@test2", "string@!#test2"};
502     WantIn_->SetParam(std::string("string_arraykey"), stringArrayValue);
503 
504     Want wantCopy(*WantIn_);
505     std::vector<std::string> teststringArrayValue1 = WantIn_->GetStringArrayParam(std::string("string_arraykey"));
506     std::vector<std::string> teststringArrayValue2 = wantCopy.GetStringArrayParam(std::string("string_arraykey"));
507     bool copyarraycompare = CompareArrayData<std::string>(teststringArrayValue1, teststringArrayValue1);
508     EXPECT_EQ(copyarraycompare, true);
509     std::string str = (copyarraycompare == true) ? "true" : "false";
510     GTEST_LOG_(INFO) << "copyarraycompare=" << str.c_str();
511 
512     Parcel in;
513     bool result = false;
514     result = WantIn_->Marshalling(in);
515     EXPECT_EQ(result, true);
516     std::shared_ptr<Want> WantOut_(Want::Unmarshalling(in));
517     if (WantOut_ != nullptr) {
518         GTEST_LOG_(INFO) << "WantOut_->GetAction().c_str(): " << WantOut_->GetAction().c_str();
519         EXPECT_STREQ(WantOut_->GetAction().c_str(), std::string("system.test.action").c_str());
520 
521         int flags = WantOut_->GetFlags();
522         GTEST_LOG_(INFO) << "WantOut_->GetFlags(): " << flags;
523         EXPECT_EQ(static_cast<int>(flags), 64);
524 
525         bool hasentity = WantOut_->HasEntity("system.test.entity");
526         GTEST_LOG_(INFO) << "WantOut_->HasEntity(system.test.entity)" << hasentity;
527         EXPECT_EQ(hasentity, true);
528 
529         WantOut_->RemoveEntity(std::string("system.test.entity"));
530         hasentity = WantOut_->HasEntity(std::string("system.test.entity"));
531         GTEST_LOG_(INFO) << "WantOut_->RemoveEntity(system.test.entity)" << hasentity;
532         EXPECT_EQ(hasentity, false);
533 
534         std::string outtype = WantOut_->GetType();
535         GTEST_LOG_(INFO) << "WantOut_->GetType()" << outtype.c_str();
536         EXPECT_STREQ(outtype.c_str(), std::string("system.test.uritype").c_str());
537 
538         element = WantOut_->GetElement();
539         GTEST_LOG_(INFO) << "element.GetAbilityName().c_str(): " << element.GetAbilityName().c_str();
540         EXPECT_STREQ(element.GetAbilityName().c_str(), std::string("system.test.abilityname").c_str());
541 
542         GTEST_LOG_(INFO) << "element->GetBundleName().c_str(): " << element.GetBundleName().c_str();
543         EXPECT_STREQ(element.GetBundleName().c_str(), std::string("system.test.bundlename").c_str());
544 
545         EXPECT_STREQ(element.GetDeviceID().c_str(), std::string("system.test.deviceid").c_str());
546 
547         std::string param_content = WantOut_->GetStringParam(keyStr);
548         GTEST_LOG_(INFO) << "WantOut_->GetStringParam(keyStr): " << param_content.c_str();
549 
550         // want SetParam  arraydata test
551         std::vector<bool> retboolArray;
552         retboolArray = WantOut_->GetBoolArrayParam(std::string("bool_arraykey"));
553 
554         bool arraycompare = CompareArrayData<bool>(retboolArray, boolArrayValue);
555         EXPECT_EQ(arraycompare, true);
556 
557         std::vector<byte> retbyteArrayValue;
558         retbyteArrayValue = WantOut_->GetByteArrayParam(std::string("byte_arraykey"));
559         arraycompare = CompareArrayData<byte>(retbyteArrayValue, byteArrayValue);
560         EXPECT_EQ(arraycompare, true);
561 
562         std::vector<zchar> retcharArrayValue;
563         retcharArrayValue = WantOut_->GetCharArrayParam(std::string("char_arraykey"));
564         arraycompare = CompareArrayData<zchar>(retcharArrayValue, charArrayValue);
565         EXPECT_EQ(arraycompare, true);
566 
567         std::vector<short> retshortArrayValue;
568         retshortArrayValue = WantOut_->GetShortArrayParam(std::string("short_arraykey"));
569         arraycompare = CompareArrayData<short>(retshortArrayValue, shortArrayValue);
570         EXPECT_EQ(arraycompare, true);
571 
572         std::vector<int> retintArrayValue;
573         retintArrayValue = WantOut_->GetIntArrayParam(std::string("int_arraykey"));
574         arraycompare = CompareArrayData<int>(retintArrayValue, intArrayValue);
575         EXPECT_EQ(arraycompare, true);
576 
577         std::vector<long> retlonArrayValue;
578         retlonArrayValue = WantOut_->GetLongArrayParam(std::string("long_arraykey"));
579         arraycompare = CompareArrayData<long>(retlonArrayValue, longArrayValue);
580         EXPECT_EQ(arraycompare, true);
581 
582         std::vector<float> retfloatArrayValue;
583         retfloatArrayValue = WantOut_->GetFloatArrayParam(std::string("float_arraykey"));
584         arraycompare = CompareArrayData<float>(retfloatArrayValue, floatArrayValue);
585         EXPECT_EQ(arraycompare, true);
586 
587         std::vector<double> retdoubleArrayValue;
588         retdoubleArrayValue = WantOut_->GetDoubleArrayParam(std::string("double_arraykey"));
589         arraycompare = CompareArrayData<double>(retdoubleArrayValue, doubleArrayValue);
590         EXPECT_EQ(arraycompare, true);
591 
592         std::vector<std::string> retstringArrayValue;
593         retstringArrayValue = WantOut_->GetStringArrayParam(std::string("string_arraykey"));
594         arraycompare = CompareArrayData<std::string>(retstringArrayValue, stringArrayValue);
595         EXPECT_EQ(arraycompare, true);
596 
597         GTEST_LOG_(INFO) << "AaFwk_Want_Parcelable_005 end";
598     }
599 }
600 
CompareWant(const std::shared_ptr<Want> & want1,const std::shared_ptr<Want> & want2) const601 void WantBaseTest::CompareWant(const std::shared_ptr<Want> &want1, const std::shared_ptr<Want> &want2) const
602 {
603     Operation opt1 = want1->GetOperation();
604     Operation opt2 = want2->GetOperation();
605     EXPECT_EQ(opt1.GetDeviceId(), opt2.GetDeviceId());
606     EXPECT_EQ(opt1.GetBundleName(), opt2.GetBundleName());
607     EXPECT_EQ(opt1.GetAbilityName(), opt2.GetAbilityName());
608 
609     EXPECT_EQ(want1->GetAction(), want2->GetAction());
610     EXPECT_EQ(want1->GetFlags(), want2->GetFlags());
611     EXPECT_EQ(want1->GetType(), want2->GetType());
612     EXPECT_EQ(want1->CountEntities(), want2->CountEntities());
613 
614     int count = want1->CountEntities();
615     std::vector<std::string> entities1 = want1->GetEntities();
616     std::vector<std::string> entities2 = want2->GetEntities();
617     for (int i = 0; i < count; i++) {
618         EXPECT_EQ(entities1.at(i), entities2.at(i));
619     }
620 
621     OHOS::AppExecFwk::ElementName element1 = want1->GetElement();
622     OHOS::AppExecFwk::ElementName element2 = want2->GetElement();
623     EXPECT_EQ(element1.GetURI(), element1.GetURI());
624 
625     std::set<std::string> key1;
626     std::set<std::string> key2;
627     key1 = want1->GetParams().KeySet();
628     key2 = want2->GetParams().KeySet();
629     EXPECT_EQ(key1.size(), key2.size());
630 
631     std::set<std::string>::iterator iter1 = key1.begin();
632     std::set<std::string>::iterator iter2 = key2.begin();
633     for (; (iter1 != key1.end() && iter2 != key2.end()); iter1++, iter2++) {
634         EXPECT_EQ(*iter1, *iter2);
635     }
636 }
637 
CompareWant(const std::shared_ptr<Want> & want1,const std::shared_ptr<Want> & want2,std::map<std::string,std::string> & keys) const638 bool WantBaseTest::CompareWant(const std::shared_ptr<Want> &want1, const std::shared_ptr<Want> &want2,
639     std::map<std::string, std::string> &keys) const
640 {
641     if (want1 == nullptr || want2 == nullptr) {
642         return false;
643     }
644     EXPECT_STREQ(want1->GetAction().c_str(), want2->GetAction().c_str());
645     EXPECT_EQ(want1->CountEntities(), want2->CountEntities());
646 
647     if (want1->CountEntities() != want2->CountEntities()) {
648         return false;
649     }
650 
651     int count = want1->CountEntities();
652 
653     std::vector<std::string> entities1 = want1->GetEntities();
654     std::vector<std::string> entities2 = want2->GetEntities();
655     for (int i = 0; i < count; i++) {
656         EXPECT_EQ(entities1.at(i), entities2.at(i));
657     }
658     EXPECT_EQ(want1->GetFlags(), want2->GetFlags());
659     EXPECT_EQ(want1->GetElement(), want2->GetElement());
660 
661     for (auto it = keys.begin(); it != keys.end(); it++) {
662         if (it->second == boolType) {
663             bool v1 = want1->GetBoolParam(it->first, false);
664             bool v2 = want2->GetBoolParam(it->first, false);
665             EXPECT_EQ(v1, v2);
666             EXPECT_EQ(v1, true);
667         } else if (it->second == boolArrayType) {
668             std::vector<bool> v1 = want1->GetBoolArrayParam(it->first);
669             std::vector<bool> v2 = want2->GetBoolArrayParam(it->first);
670             EXPECT_EQ(v1, v2);
671         } else if (it->second == byteType) {
672             byte v1 = want1->GetByteParam(it->first, 'j');
673             byte v2 = want2->GetByteParam(it->first, 'k');
674             EXPECT_EQ(v1, v2);
675         } else if (it->second == byteArrayType) {
676             std::vector<byte> v1 = want1->GetByteArrayParam(it->first);
677             std::vector<byte> v2 = want2->GetByteArrayParam(it->first);
678             EXPECT_EQ(v1, v2);
679         } else if (it->second == charType) {
680             zchar v1 = want1->GetCharParam(it->first, 0x01AB);
681             zchar v2 = want2->GetCharParam(it->first, 0x02CD);
682             EXPECT_EQ(v1, v2);
683         } else if (it->second == charArrayType) {
684             std::vector<zchar> v1 = want1->GetCharArrayParam(it->first);
685             std::vector<zchar> v2 = want2->GetCharArrayParam(it->first);
686             EXPECT_EQ(v1, v2);
687         } else if (it->second == shortType) {
688             short default1 = 123;
689             short default2 = 456;
690             short v1 = want1->GetShortParam(it->first, default1);
691             short v2 = want2->GetShortParam(it->first, default2);
692             EXPECT_EQ(v1, v2);
693         } else if (it->second == shortArrayType) {
694             std::vector<short> v1 = want1->GetShortArrayParam(it->first);
695             std::vector<short> v2 = want2->GetShortArrayParam(it->first);
696             EXPECT_EQ(v1, v2);
697         } else if (it->second == intType) {
698             int default1 = 1230000;
699             int default2 = 4560000;
700             int v1 = want1->GetIntParam(it->first, default1);
701             int v2 = want2->GetIntParam(it->first, default2);
702             EXPECT_EQ(v1, v2);
703         } else if (it->second == intArrayType) {
704             std::vector<int> v1 = want1->GetIntArrayParam(it->first);
705             std::vector<int> v2 = want2->GetIntArrayParam(it->first);
706             EXPECT_EQ(v1, v2);
707         } else if (it->second == longType) {
708             long default1 = 1e8;
709             long default2 = 2e8;
710             long v1 = want1->GetLongParam(it->first, default1);
711             long v2 = want2->GetLongParam(it->first, default2);
712             EXPECT_EQ(v1, v2);
713         } else if (it->second == longArrayType) {
714             std::vector<long> v1 = want1->GetLongArrayParam(it->first);
715             std::vector<long> v2 = want2->GetLongArrayParam(it->first);
716             EXPECT_EQ(v1, v2);
717         } else if (it->second == floatType) {
718             float default1 = 12.3;
719             float default2 = 45.6;
720             float v1 = want1->GetFloatParam(it->first, default1);
721             float v2 = want2->GetFloatParam(it->first, default2);
722             EXPECT_EQ(v1, v2);
723         } else if (it->second == floatArrayType) {
724             std::vector<float> v1 = want1->GetFloatArrayParam(it->first);
725             std::vector<float> v2 = want2->GetFloatArrayParam(it->first);
726             EXPECT_EQ(v1, v2);
727         } else if (it->second == doubleType) {
728             double default1 = 12.3;
729             double default2 = 45.6;
730             double v1 = want1->GetDoubleParam(it->first, default1);
731             double v2 = want2->GetDoubleParam(it->first, default2);
732             EXPECT_EQ(v1, v2);
733         } else if (it->second == doubleArrayType) {
734             std::vector<double> v1 = want1->GetDoubleArrayParam(it->first);
735             std::vector<double> v2 = want2->GetDoubleArrayParam(it->first);
736             EXPECT_EQ(v1, v2);
737         } else if (it->second == stringType) {
738             std::string v1 = want1->GetStringParam(it->first);
739             std::string v2 = want2->GetStringParam(it->first);
740             EXPECT_EQ(v1, v2);
741         } else if (it->second == stringArrayType) {
742             std::vector<std::string> v1 = want1->GetStringArrayParam(it->first);
743             std::vector<std::string> v2 = want2->GetStringArrayParam(it->first);
744             EXPECT_EQ(v1, v2);
745         }
746     }
747 
748     return true;
749 }
750 
SendParcelTest(const std::shared_ptr<Want> & want,std::map<std::string,std::string> & keys) const751 void WantBaseTest::SendParcelTest(const std::shared_ptr<Want> &want, std::map<std::string, std::string> &keys) const
752 {
753     size_t pos1;
754     size_t pos2;
755     Parcel data;
756     bool result = false;
757 
758     pos1 = data.GetWritePosition();
759     result = data.WriteParcelable(want.get());
760     pos2 = data.GetWritePosition();
761     EXPECT_EQ(result, true);
762     GTEST_LOG_(INFO) << "SendParcelTest: pos1: " << pos1 << ", pos2: " << pos2 << ", result: " << result;
763 
764     std::shared_ptr<Want> wantNew(data.ReadParcelable<Want>());
765     EXPECT_NE(wantNew, nullptr);
766 
767     if (wantNew != nullptr) {
768         result = CompareWant(want, wantNew, keys);
769         EXPECT_EQ(result, true);
770     }
771 }
772 
AddBoolParams(Want & want,std::map<std::string,std::string> & keys,int loop,unsigned int flag) const773 void WantBaseTest::AddBoolParams(
774     Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const
775 {
776     std::string key;
777     std::string boolKey = "boolKey";
778     std::string boolArrayKey = "boolArrayKey";
779     for (int i = 0; i < loop; i++) {
780         if (flag & FLAG_TEST_SINGLE) {
781             bool boolValue = true;
782             keys[boolKey + std::to_string(i)] = boolType;
783             want.SetParam(boolKey + std::to_string(i), boolValue);
784         }
785 
786         if (flag & FLAG_TEST_ARRAY) {
787             std::vector<bool> boolArrayValue = {true, false, true};
788             keys[key] = boolArrayType;
789             want.SetParam(key, boolArrayValue);
790         }
791     }
792 }
793 
AddByteParams(Want & want,std::map<std::string,std::string> & keys,int loop,unsigned int flag) const794 void WantBaseTest::AddByteParams(
795     Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const
796 {
797     std::string key;
798     std::string byteKey = "byteKey";
799     std::string byteArrayKey = "byteArrayKey";
800     for (int i = 0; i < loop; i++) {
801         if (flag & FLAG_TEST_SINGLE) {
802             byte byteValue = 'z';
803             key = byteKey + std::to_string(i);
804             keys[key] = byteType;
805             want.SetParam(key, byteValue);
806         }
807 
808         if (flag & FLAG_TEST_ARRAY) {
809             std::vector<byte> byteArrayValue = {'?', 'a', '\\'};
810             key = byteArrayKey + std::to_string(i);
811             keys[key] = byteArrayType;
812             want.SetParam(key, byteArrayValue);
813         }
814     }
815 }
816 
AddCharParams(Want & want,std::map<std::string,std::string> & keys,int loop,unsigned int flag) const817 void WantBaseTest::AddCharParams(
818     Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const
819 {
820     std::string key;
821     std::string charKey = "charKey";
822     std::string charArrayKey = "charArrayKey";
823     for (int i = 0; i < loop; i++) {
824         if (flag & FLAG_TEST_SINGLE) {
825             zchar charValue = U'h';
826             key = charKey + std::to_string(i);
827             keys[key] = charType;
828             want.SetParam(key, charValue);
829         }
830 
831         if (flag & FLAG_TEST_ARRAY) {
832             std::vector<zchar> charArrayValue = {U'e', U'l', U'l', U'o'};
833             key = charArrayKey + std::to_string(i);
834             keys[key] = charArrayType;
835             want.SetParam(key, charArrayValue);
836         }
837     }
838 }
839 
AddShortParams(Want & want,std::map<std::string,std::string> & keys,int loop,unsigned int flag) const840 void WantBaseTest::AddShortParams(
841     Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const
842 {
843     std::string key;
844     std::string shortKey = "shortKey";
845     std::string shortArrayKey = "shortArrayKey";
846     for (int i = 0; i < loop; i++) {
847         if (flag & FLAG_TEST_SINGLE) {
848             short shortValue = 1;
849             key = shortKey + std::to_string(i);
850             keys[key] = shortType;
851             want.SetParam(key, shortValue);
852         }
853 
854         if (flag & FLAG_TEST_ARRAY) {
855             std::vector<short> shortArrayValue = {-1, 0, 1};
856             key = shortArrayKey + std::to_string(i);
857             keys[key] = shortArrayType;
858             want.SetParam(key, shortArrayValue);
859         }
860     }
861 }
862 
AddIntParams(Want & want,std::map<std::string,std::string> & keys,int loop,unsigned int flag) const863 void WantBaseTest::AddIntParams(Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const
864 {
865     std::string key;
866     std::string intKey = "intKey";
867     std::string intArrayKey = "intArrayKey";
868     for (int i = 0; i < loop; i++) {
869         if (flag & FLAG_TEST_SINGLE) {
870             int intValue = 10;
871             key = intKey + std::to_string(i);
872             keys[key] = intType;
873             want.SetParam(key, intValue);
874         }
875 
876         if (flag & FLAG_TEST_ARRAY) {
877             std::vector<int> intArrayValue = {-10, 0, 10};
878             key = intArrayKey + std::to_string(i);
879             keys[key] = intArrayType;
880             want.SetParam(key, intArrayValue);
881         }
882     }
883 }
884 
AddLongParams(Want & want,std::map<std::string,std::string> & keys,int loop,unsigned int flag) const885 void WantBaseTest::AddLongParams(
886     Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const
887 {
888     std::string key;
889     std::string longKey = "longKey";
890     std::string longArrayKey = "longArrayKey";
891     for (int i = 0; i < loop; i++) {
892         if (flag & FLAG_TEST_SINGLE) {
893             long longValue = 100L;
894             key = longKey + std::to_string(i);
895             keys[key] = longType;
896             want.SetParam(key, longValue);
897         }
898 
899         if (flag & FLAG_TEST_ARRAY) {
900             std::vector<long> longArrayValue = {-100, 0, 100};
901             key = longArrayKey + std::to_string(i);
902             keys[key] = longArrayType;
903             want.SetParam(key, longArrayValue);
904         }
905     }
906 }
907 
AddFloatParams(Want & want,std::map<std::string,std::string> & keys,int loop,unsigned int flag) const908 void WantBaseTest::AddFloatParams(
909     Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const
910 {
911     std::string key;
912     std::string floatKey = "floatKey";
913     std::string floatArrayKey = "floatArrayKey";
914     for (int i = 0; i < loop; i++) {
915         if (flag & FLAG_TEST_SINGLE) {
916             float floatValue = 100.1f;
917             key = floatKey + std::to_string(i);
918             keys[key] = floatType;
919             want.SetParam(key, floatValue);
920         }
921 
922         if (flag & FLAG_TEST_ARRAY) {
923             std::vector<float> floatArrayValue = {-100.1, 0.1, 100.1};
924             key = floatArrayKey + std::to_string(i);
925             keys[key] = floatArrayType;
926             want.SetParam(key, floatArrayValue);
927         }
928     }
929 }
930 
AddDoubleParams(Want & want,std::map<std::string,std::string> & keys,int loop,unsigned int flag) const931 void WantBaseTest::AddDoubleParams(
932     Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const
933 {
934     std::string key;
935     std::string doubleKey = "doubleKey";
936     std::string doubleArrayKey = "doubleArrayKey";
937     for (int i = 0; i < loop; i++) {
938         if (flag & FLAG_TEST_SINGLE) {
939             double doubleValue = 1000.1;
940             key = doubleKey + std::to_string(i);
941             keys[key] = doubleType;
942             want.SetParam(key, doubleValue);
943         }
944 
945         if (flag & FLAG_TEST_ARRAY) {
946             std::vector<double> doubleArrayValue = {-1000.1, 0.1, 1000.1};
947             key = doubleArrayKey + std::to_string(i);
948             keys[key] = doubleArrayType;
949             want.SetParam(key, doubleArrayValue);
950         }
951     }
952 }
953 
AddStringParams(Want & want,std::map<std::string,std::string> & keys,int loop,unsigned int flag) const954 void WantBaseTest::AddStringParams(
955     Want &want, std::map<std::string, std::string> &keys, int loop, unsigned int flag) const
956 {
957     std::string key;
958     std::string stringKey = "stringKey";
959     std::string stringArrayKey = "stringArrayKey";
960     for (int i = 0; i < loop; i++) {
961         if (flag & FLAG_TEST_SINGLE) {
962             string stringValue = "zzzz";
963             key = stringKey + std::to_string(i);
964             keys[key] = stringType;
965             want.SetParam(key, stringValue);
966         }
967 
968         if (flag & FLAG_TEST_ARRAY) {
969             std::vector<std::string> stringArrayValue = {"??", "aa", "\\\\"};
970             key = stringArrayKey + std::to_string(i);
971             keys[key] = stringArrayType;
972             want.SetParam(key, stringArrayValue);
973         }
974     }
975 }
976 
977 /**
978  * @tc.number: AaFwk_Want_Parcelable_0600
979  * @tc.name: parcelable
980  * @tc.desc: Verify parcelable.
981  */
982 HWTEST_F(WantBaseTest, AaFwk_Want_Parcelable_0600, Function | MediumTest | Level1)
983 {
984     std::string action = "want.action.test";
985     unsigned int flag = 0x789;
986     std::string entity = "want.entity.test";
987     OHOS::AppExecFwk::ElementName element("bundlename", "appname", "abilityname");
988 
989     std::shared_ptr<Want> want = std::make_shared<Want>();
990     if (want != nullptr) {
991         want->SetAction(action);
992         want->AddEntity(entity);
993         want->AddFlags(flag);
994         want->SetElement(element);
995 
996         std::map<std::string, std::string> keys;
997 
998         SendParcelTest(want, keys);
999     }
1000 }
1001 
1002 /**
1003  * @tc.number: AaFwk_Want_Parcelable_0700
1004  * @tc.name: parcelable
1005  * @tc.desc: Verify parcelable.
1006  */
1007 HWTEST_F(WantBaseTest, AaFwk_Want_Parcelable_0700, Function | MediumTest | Level1)
1008 {
1009     std::string action = "want.action.test";
1010     unsigned int flag = 0x789;
1011     std::string entity = "want.entity.test";
1012     OHOS::AppExecFwk::ElementName element("bundlename", "appname", "abilityname");
1013 
1014     std::shared_ptr<Want> want = std::make_shared<Want>();
1015     if (want != nullptr) {
1016         want->SetAction(action);
1017         want->AddEntity(entity);
1018         want->AddFlags(flag);
1019         want->SetElement(element);
1020 
1021         int loop = 1;
1022         std::map<std::string, std::string> keys;
1023 
1024         AddByteParams(*(want.get()), keys, loop, FLAG_TEST_BOTH);
1025         AddCharParams(*(want.get()), keys, loop, FLAG_TEST_BOTH);
1026         AddShortParams(*(want.get()), keys, loop, FLAG_TEST_BOTH);
1027         AddIntParams(*(want.get()), keys, loop, FLAG_TEST_BOTH);
1028         AddLongParams(*(want.get()), keys, loop, FLAG_TEST_BOTH);
1029         AddFloatParams(*(want.get()), keys, loop, FLAG_TEST_BOTH);
1030         AddDoubleParams(*(want.get()), keys, loop, FLAG_TEST_BOTH);
1031         AddStringParams(*(want.get()), keys, loop, FLAG_TEST_BOTH);
1032 
1033         SendParcelTest(want, keys);
1034     }
1035 }
1036 
1037 /**
1038  * @tc.number: AaFwk_Want_Parcelable_0800
1039  * @tc.name: parcelable
1040  * @tc.desc: Verify parcelable.
1041  */
1042 HWTEST_F(WantBaseTest, AaFwk_Want_Parcelable_0800, Function | MediumTest | Level1)
1043 {
1044     std::string action = "want.action.test";
1045     unsigned int flag = 0x789;
1046     std::string entity = "want.entity.test";
1047     OHOS::AppExecFwk::ElementName element("bundlename", "appname", "abilityname");
1048 
1049     std::shared_ptr<Want> want = std::make_shared<Want>();
1050     if (want != nullptr) {
1051         want->SetAction(action);
1052         want->AddEntity(entity);
1053         want->AddFlags(flag);
1054         want->SetElement(element);
1055         std::map<std::string, std::string> keys;
1056 
1057         SendParcelTest(want, keys);
1058     }
1059 }
1060 
1061 /**
1062  * @tc.number: AaFwk_Want_FormatMimeType_0100
1063  * @tc.name: formatMimeType
1064  * @tc.desc: formats data of a specified MIME type.
1065  */
1066 HWTEST_F(WantBaseTest, AaFwk_Want_FormatMimeType_0100, Function | MediumTest | Level1)
1067 {
1068     std::string mimeType = "Application/Envoy";
1069     std::string mimeTypeResult = "application/envoy";
1070 
1071     EXPECT_EQ(mimeTypeResult, Want::FormatMimeType(mimeType));
1072 }
1073 
1074 /**
1075  * @tc.number: AaFwk_Want_FormatMimeType_0200
1076  * @tc.name: formatMimeType
1077  * @tc.desc: formats data of a specified MIME type.
1078  */
1079 HWTEST_F(WantBaseTest, AaFwk_Want_FormatMimeType_0200, Function | MediumTest | Level1)
1080 {
1081     std::string mimeType = "APPLICATION/ENVOY";
1082     std::string mimeTypeResult = "application/envoy";
1083 
1084     EXPECT_EQ(mimeTypeResult, Want::FormatMimeType(mimeType));
1085 }
1086 
1087 /**
1088  * @tc.number: AaFwk_Want_FormatMimeType_0300
1089  * @tc.name: formatMimeType
1090  * @tc.desc: formats data of a specified MIME type.
1091  */
1092 HWTEST_F(WantBaseTest, AaFwk_Want_FormatMimeType_0300, Function | MediumTest | Level1)
1093 {
1094     std::string mimeType = " Appl icati on/ Envoy ";
1095     std::string mimeTypeResult = "application/envoy";
1096 
1097     EXPECT_EQ(mimeTypeResult, Want::FormatMimeType(mimeType));
1098 }
1099 
1100 /**
1101  * @tc.number: AaFwk_Want_FormatMimeType_0400
1102  * @tc.name: formatMimeType
1103  * @tc.desc: formats data of a specified MIME type.
1104  */
1105 HWTEST_F(WantBaseTest, AaFwk_Want_FormatMimeType_0400, Function | MediumTest | Level1)
1106 {
1107     std::string mimeType = " Appl icati on/ Envoy ; yovnE ;no itaci lppA ";
1108     std::string mimeTypeResult = "application/envoy";
1109 
1110     EXPECT_EQ(mimeTypeResult, Want::FormatMimeType(mimeType));
1111 }
1112 
1113 /**
1114  * @tc.number:  AaFwk_Want_ParseUri_ToUri_0100
1115  * @tc.name: ParseUri and ToUri
1116  * @tc.desc: Verify the function when Want is empty.
1117  */
1118 HWTEST_F(WantBaseTest, AaFwk_Want_ParseUri_ToUri_0100, Function | MediumTest | Level1)
1119 {
1120     std::size_t pos = 0;
1121     std::size_t content = 0;
1122     std::size_t head = 0;
1123     Want wantOrigin;
1124 
1125     std::string uri = wantOrigin.ToUri();
1126 
1127     head = uri.find(WantBaseTest::URI_STRING_HEAD, pos);
1128     EXPECT_EQ(head, pos);
1129     if (head != std::string::npos) {
1130         pos += head + WantBaseTest::URI_STRING_HEAD.length() - 1;
1131     }
1132 
1133     content = uri.find(WantBaseTest::URI_STRING_END, pos);
1134     EXPECT_EQ(content, pos);
1135     if (content != std::string::npos) {
1136         pos += WantBaseTest::URI_STRING_END.length();
1137     }
1138 
1139     EXPECT_EQ(uri.length(), pos);
1140 
1141     Want *wantNew = Want::ParseUri(uri);
1142     EXPECT_NE(wantNew, nullptr);
1143 
1144     if (wantNew != nullptr) {
1145         EXPECT_EQ(wantNew->GetAction(), std::string(""));
1146         for (auto entity : wantNew->GetEntities()) {
1147             EXPECT_EQ(entity, std::string(""));
1148         }
1149         OHOS::AppExecFwk::ElementName element;
1150         EXPECT_EQ(wantNew->GetElement(), element);
1151         EXPECT_EQ(static_cast<int>(wantNew->GetFlags()), 0);
1152 
1153         delete wantNew;
1154     }
1155 }
1156 
1157 /**
1158  * @tc.number:  AaFwk_Want_ParseUri_ToUri_0200
1159  * @tc.name: ParseUri and ToUri
1160  * @tc.desc: Verify the function when Want only has action/entity/flag/element.
1161  */
1162 HWTEST_F(WantBaseTest, AaFwk_Want_ParseUri_ToUri_0200, Function | MediumTest | Level1)
1163 {
1164     std::string search;
1165 
1166     std::string action = Want::ACTION_PLAY;
1167     std::string entity = Want::ENTITY_VIDEO;
1168     unsigned int flag = 0x0f0f0f0f;
1169     std::string flagStr = "0x0f0f0f0f";
1170     std::string device = "device1";
1171     std::string bundle = "bundle1";
1172     std::string ability = "ability1";
1173     OHOS::AppExecFwk::ElementName element(device, bundle, ability);
1174 
1175     Want wantOrigin;
1176     wantOrigin.SetAction(action);
1177     wantOrigin.AddEntity(entity);
1178     wantOrigin.AddFlags(flag);
1179     wantOrigin.SetElement(element);
1180 
1181     std::string uri = wantOrigin.ToUri();
1182     Want *wantNew = Want::ParseUri(uri);
1183     EXPECT_NE(wantNew, nullptr);
1184 
1185     if (wantNew != nullptr) {
1186         EXPECT_EQ(wantNew->GetAction(), action);
1187         for (auto entityItem : wantNew->GetEntities()) {
1188             EXPECT_EQ(entityItem, entity);
1189         }
1190         EXPECT_EQ(wantNew->GetElement().GetDeviceID(), device);
1191         EXPECT_EQ(wantNew->GetElement().GetBundleName(), bundle);
1192         EXPECT_EQ(wantNew->GetElement().GetAbilityName(), ability);
1193         EXPECT_EQ(wantNew->GetFlags(), flag);
1194 
1195         delete wantNew;
1196         wantNew = nullptr;
1197     }
1198 }
1199 
1200 /**
1201  * @tc.number:  AaFwk_Want_ParseUri_ToUri_0300
1202  * @tc.name: ParseUri and ToUri
1203  * @tc.desc:  Verify the function when Want only has parameter and the parameter
1204  *            has only 1 float type element.
1205  */
1206 HWTEST_F(WantBaseTest, AaFwk_Want_ParseUri_ToUri_0300, Function | MediumTest | Level1)
1207 {
1208     std::string search;
1209     std::string substring;
1210     std::size_t pos = 0;
1211     std::size_t length = 0;
1212     std::size_t result = 0;
1213     std::size_t delims = 0;
1214     std::size_t head = 0;
1215     Want wantOrigin;
1216     std::string keyFloat = "keyFloat";
1217     float valueFloatOrigin = 123.4;
1218     wantOrigin.SetParam(keyFloat, valueFloatOrigin);
1219 
1220     std::string uri = wantOrigin.ToUri();
1221 
1222     search = WantBaseTest::URI_STRING_HEAD;
1223     result = uri.find(search, pos);
1224     EXPECT_EQ(result, pos);
1225     if (result != std::string::npos) {
1226         head = result + search.length();
1227     }
1228     length += head;
1229 
1230     search = Float::SIGNATURE + std::string(".") + keyFloat + std::string("=");
1231     result = uri.find(search);
1232     EXPECT_NE(result, std::string::npos);
1233     EXPECT_GE(result, head);
1234     length += search.length();
1235     if (result != std::string::npos) {
1236         pos = result + search.length();
1237         delims = uri.find(";", pos);
1238         if (delims != std::string::npos) {
1239             substring = uri.substr(pos, delims - pos);
1240             float valueFloatNew = Float::Unbox(Float::Parse(substring));
1241             EXPECT_EQ(valueFloatNew, valueFloatOrigin);
1242             length += substring.length() + 1;
1243         }
1244     }
1245 
1246     search = WantBaseTest::URI_STRING_END;
1247     result = uri.find(search);
1248     EXPECT_NE(result, std::string::npos);
1249     EXPECT_GE(result, head);
1250     if (result != std::string::npos) {
1251         length += search.length() - 1;
1252     }
1253 
1254     EXPECT_EQ(uri.length(), length);
1255 
1256     Want *wantNew = Want::ParseUri(uri);
1257     EXPECT_NE(wantNew, nullptr);
1258 
1259     if (wantNew != nullptr) {
1260         float floatNew = wantNew->GetFloatParam(keyFloat, 0.1);
1261         float floatOld = wantOrigin.GetFloatParam(keyFloat, 1.1);
1262         EXPECT_EQ(floatNew, floatOld);
1263         delete wantNew;
1264     }
1265 }
1266 
1267 /**
1268  * @tc.number:  AaFwk_Want_ParseUri_ToUri_0400
1269  * @tc.name: ParseUri and ToUri
1270  * @tc.desc: Verify the function when Want only has parameter and the parameter
1271  *           has only one float and one string type element.
1272  */
1273 HWTEST_F(WantBaseTest, AaFwk_Want_ParseUri_ToUri_0400, Function | MediumTest | Level1)
1274 {
1275     std::string search;
1276     std::string substring;
1277     std::size_t pos = 0;
1278     std::size_t length = 0;
1279     std::size_t result = 0;
1280     std::size_t delims = 0;
1281     std::size_t head = 0;
1282     Want wantOrigin;
1283     std::string keyFloat = "keyFloat";
1284     std::string keyString = "keyString";
1285     float valueFloatOrigin = 123.4;
1286     std::string valueStringOrigin = "abcd";
1287     wantOrigin.SetParam(keyFloat, valueFloatOrigin);
1288     wantOrigin.SetParam(keyString, valueStringOrigin);
1289 
1290     std::string uri = wantOrigin.ToUri();
1291 
1292     search = WantBaseTest::URI_STRING_HEAD;
1293     result = uri.find(search, pos);
1294     EXPECT_NE(result, std::string::npos);
1295     EXPECT_EQ(result, pos);
1296     if (result != std::string::npos) {
1297         head = result + search.length();
1298     }
1299     length += head;
1300 
1301     search = Float::SIGNATURE + std::string(".") + keyFloat + std::string("=");
1302     result = uri.find(search);
1303     EXPECT_NE(result, std::string::npos);
1304     EXPECT_GE(result, head);
1305     length += search.length();
1306     if (result != std::string::npos) {
1307         pos = result + search.length();
1308         delims = uri.find(";", pos);
1309         if (delims != std::string::npos) {
1310             substring = uri.substr(pos, delims - pos);
1311             float valueFloatNew = Float::Unbox(Float::Parse(substring));
1312             EXPECT_EQ(valueFloatNew, valueFloatOrigin);
1313             length += substring.length() + 1;
1314         }
1315     }
1316 
1317     search = String::SIGNATURE + std::string(".") + keyString + std::string("=");
1318     result = uri.find(search);
1319     EXPECT_NE(result, std::string::npos);
1320     EXPECT_GE(result, head);
1321     length += search.length();
1322     if (result != std::string::npos) {
1323         pos = result + search.length();
1324         delims = uri.find(";", result);
1325         if (delims != std::string::npos) {
1326             std::string substring = uri.substr(pos, delims - pos);
1327             std::string valueStringNew = String::Unbox(String::Parse(substring));
1328             EXPECT_EQ(valueStringNew, valueStringOrigin);
1329             length += substring.length() + 1;
1330         }
1331     }
1332 
1333     search = WantBaseTest::URI_STRING_END;
1334     result = uri.find(search);
1335     EXPECT_NE(result, std::string::npos);
1336     EXPECT_GE(result, head);
1337     if (result != std::string::npos) {
1338         length += search.length() - 1;
1339     }
1340 
1341     EXPECT_EQ(uri.length(), length);
1342 
1343     Want *wantNew = Want::ParseUri(uri);
1344     EXPECT_NE(wantNew, nullptr);
1345 
1346     if (wantNew != nullptr) {
1347         float floatNew = wantNew->GetFloatParam(keyFloat, 0);
1348         float floatOld = wantOrigin.GetFloatParam(keyFloat, 1);
1349         EXPECT_EQ(floatNew, floatOld);
1350 
1351         std::string stringNew = wantNew->GetStringParam(keyString);
1352         std::string stringOld = wantOrigin.GetStringParam(keyString);
1353         EXPECT_EQ(stringNew, stringOld);
1354 
1355         delete wantNew;
1356     }
1357 }
1358 
1359 /**
1360  * @tc.number:  AaFwk_Want_ParseUri_ToUri_0500
1361  * @tc.name: ParseUri and ToUri
1362  * @tc.desc: Verify the function when Want only has parameter and the parameter
1363  *           has only one float array type element.
1364  */
1365 HWTEST_F(WantBaseTest, AaFwk_Want_ParseUri_ToUri_0500, Function | MediumTest | Level1)
1366 {
1367     std::string search;
1368     std::string substring;
1369     std::size_t pos = 0;
1370     std::size_t length = 0;
1371     std::size_t result = 0;
1372     std::size_t delims = 0;
1373     std::size_t head = 0;
1374     Want wantOrigin;
1375     std::string keyFloatArray = "keyFloatArray";
1376     std::vector<float> valueFloatArrayOrigin = {1.1, 2.1, 3.1};
1377     wantOrigin.SetParam(keyFloatArray, valueFloatArrayOrigin);
1378 
1379     std::string uri = wantOrigin.ToUri();
1380 
1381     search = WantBaseTest::URI_STRING_HEAD;
1382     result = uri.find(search, pos);
1383     EXPECT_NE(result, std::string::npos);
1384     EXPECT_EQ(result, pos);
1385     if (result != std::string::npos) {
1386         head = result + search.length();
1387     }
1388     length += head;
1389 
1390     search = Array::SIGNATURE + std::string(".") + keyFloatArray + std::string("=");
1391     result = uri.find(search);
1392     EXPECT_NE(result, std::string::npos);
1393     EXPECT_GE(result, head);
1394     length += search.length();
1395     if (result != std::string::npos) {
1396         pos = result + search.length();
1397         delims = uri.find(";", result);
1398         if (delims != std::string::npos) {
1399             std::string substring = uri.substr(pos, delims - pos);
1400             sptr<IArray> array = Array::Parse(substring);
1401             std::vector<float> valueFloatArrayNew;
1402             auto func = [&valueFloatArrayNew](
__anon9b13f04c0102( IInterface *object) 1403                             IInterface *object) { valueFloatArrayNew.push_back(Float::Unbox(IFloat::Query(object))); };
1404             Array::ForEach(array, func);
1405             EXPECT_EQ(valueFloatArrayNew, valueFloatArrayOrigin);
1406             length += substring.length() + 1;
1407         }
1408     }
1409 
1410     search = WantBaseTest::URI_STRING_END;
1411     result = uri.find(search);
1412     EXPECT_NE(result, std::string::npos);
1413     EXPECT_GE(result, head);
1414     if (result != std::string::npos) {
1415         length += search.length() - 1;
1416     }
1417 
1418     EXPECT_EQ(uri.length(), length);
1419 
1420     Want *wantNew = Want::ParseUri(uri);
1421     EXPECT_NE(wantNew, nullptr);
1422 
1423     if (wantNew != nullptr) {
1424         std::vector<float> arrayNew = wantNew->GetFloatArrayParam(keyFloatArray);
1425         std::vector<float> arrayOld = wantOrigin.GetFloatArrayParam(keyFloatArray);
1426         EXPECT_EQ(arrayNew, arrayOld);
1427         delete wantNew;
1428     }
1429 }
1430 
1431 /**
1432  * @tc.number:  AaFwk_Want_ParseUri_ToUri_0600
1433  * @tc.name: ParseUri and ToUri
1434  * @tc.desc: Verify the function when Want only has parameter and the parameter
1435  *           has only one int array and one string array type element
1436  */
1437 HWTEST_F(WantBaseTest, AaFwk_Want_ParseUri_ToUri_0600, Function | MediumTest | Level1)
1438 {
1439     std::string search;
1440     std::string substring;
1441     std::size_t pos = 0;
1442     std::size_t length = 0;
1443     std::size_t result = 0;
1444     std::size_t delims = 0;
1445     std::size_t head = 0;
1446     Want wantOrigin;
1447     std::string keyFloatArray = "keyFloatArray";
1448     std::string keyStringArray = "keyStringArray";
1449     std::vector<float> valueFloatArrayOrigin = {1.1, 2.1, 3.1};
1450     std::vector<std::string> valueStringArrayOrigin = {"aa", "bb", "cc"};
1451     wantOrigin.SetParam(keyFloatArray, valueFloatArrayOrigin);
1452     wantOrigin.SetParam(keyStringArray, valueStringArrayOrigin);
1453 
1454     std::string uri = wantOrigin.ToUri();
1455 
1456     search = WantBaseTest::URI_STRING_HEAD;
1457     result = uri.find(search, pos);
1458     EXPECT_NE(result, std::string::npos);
1459     EXPECT_EQ(result, pos);
1460     if (result != std::string::npos) {
1461         head = result + search.length();
1462     }
1463     length += head;
1464 
1465     search = Array::SIGNATURE + std::string(".") + keyFloatArray + std::string("=");
1466     result = uri.find(search);
1467     EXPECT_NE(result, std::string::npos);
1468     EXPECT_GE(result, head);
1469     length += search.length();
1470     if (result != std::string::npos) {
1471         pos = result + search.length();
1472         delims = uri.find(";", result);
1473         if (delims != std::string::npos) {
1474             std::string substring = uri.substr(pos, delims - pos);
1475             sptr<IArray> array = Array::Parse(substring);
1476             std::vector<float> valueFloatArrayNew;
1477             auto func = [&valueFloatArrayNew](
__anon9b13f04c0202( IInterface *object) 1478                             IInterface *object) { valueFloatArrayNew.push_back(Float::Unbox(IFloat::Query(object))); };
1479             Array::ForEach(array, func);
1480             EXPECT_EQ(valueFloatArrayNew, valueFloatArrayOrigin);
1481             length += substring.length() + 1;
1482         }
1483     }
1484 
1485     search = Array::SIGNATURE + std::string(".") + keyStringArray + std::string("=");
1486     result = uri.find(search);
1487     EXPECT_NE(result, std::string::npos);
1488     EXPECT_GE(result, head);
1489     length += search.length();
1490     if (result != std::string::npos) {
1491         pos = result + search.length();
1492         delims = uri.find(";", result);
1493         if (delims != std::string::npos) {
1494             std::string substring = uri.substr(pos, delims - pos);
1495             sptr<IArray> array = Array::Parse(substring);
1496             std::vector<std::string> valueStringArrayNew;
__anon9b13f04c0302(IInterface *object) 1497             auto func = [&valueStringArrayNew](IInterface *object) {
1498                 valueStringArrayNew.push_back(String::Unbox(IString::Query(object)));
1499             };
1500             Array::ForEach(array, func);
1501             EXPECT_EQ(valueStringArrayNew, valueStringArrayOrigin);
1502             length += substring.length() + 1;
1503         }
1504     }
1505 
1506     search = WantBaseTest::URI_STRING_END;
1507     result = uri.find(search);
1508     EXPECT_NE(result, std::string::npos);
1509     EXPECT_GE(result, head);
1510     if (result != std::string::npos) {
1511         length += search.length() - 1;
1512     }
1513 
1514     EXPECT_EQ(uri.length(), length);
1515 
1516     Want *wantNew = Want::ParseUri(uri);
1517     EXPECT_NE(wantNew, nullptr);
1518 
1519     if (wantNew != nullptr) {
1520         std::vector<float> arrayFloatNew = wantNew->GetFloatArrayParam(keyFloatArray);
1521         std::vector<float> arrayFloatOld = wantOrigin.GetFloatArrayParam(keyFloatArray);
1522         EXPECT_EQ(arrayFloatNew, arrayFloatOld);
1523 
1524         std::vector<std::string> arrayStringNew = wantNew->GetStringArrayParam(keyStringArray);
1525         std::vector<std::string> arrayStringOld = wantOrigin.GetStringArrayParam(keyStringArray);
1526         EXPECT_EQ(arrayStringNew, arrayStringOld);
1527 
1528         delete wantNew;
1529     }
1530 }
1531 
1532 /**
1533  * @tc.number:  AaFwk_Want_ParseUri_ToUri_0700
1534  * @tc.name: ParseUri and ToUri
1535  * @tc.desc: Verify the function when the length of input string is 0.
1536  */
1537 HWTEST_F(WantBaseTest, AaFwk_Want_ParseUri_ToUri_0700, Function | MediumTest | Level1)
1538 {
1539     std::string uri;
1540     EXPECT_EQ(static_cast<int>(uri.length()), 0);
1541 
1542     Want *want = Want::ParseUri(uri);
1543     EXPECT_EQ(want, nullptr);
1544 
1545     if (want != nullptr) {
1546         delete want;
1547     }
1548 }
1549 
1550 /**
1551  * @tc.number:  AaFwk_Want_ParseUri_ToUri_0800
1552  * @tc.name: ParseUri and ToUri
1553  * @tc.desc: Verify the function when the action etc. are empty.
1554  */
1555 HWTEST_F(WantBaseTest, AaFwk_Want_ParseUri_ToUri_0800, Function | MediumTest | Level1)
1556 {
1557     std::string empty;
1558     std::string uri = "#Intent;action=;entity=;device=;bundle=;ability=;flag=;end";
1559     EXPECT_NE(static_cast<int>(uri.length()), 0);
1560 
1561     Want *want = Want::ParseUri(uri);
1562     EXPECT_NE(want, nullptr);
1563 
1564     if (want != nullptr) {
1565         EXPECT_EQ(want->GetAction(), empty);
1566         for (auto entityItem : want->GetEntities()) {
1567             EXPECT_EQ(entityItem, empty);
1568         }
1569         EXPECT_EQ(want->GetFlags(), (unsigned int)0);
1570         OHOS::AppExecFwk::ElementName element;
1571         EXPECT_EQ(want->GetElement(), element);
1572         EXPECT_EQ(want->HasParameter(empty), false);
1573         delete want;
1574     }
1575 }
1576 
1577 /**
1578  * @tc.number:  AaFwk_Want_ParseUri_ToUri_0900
1579  * @tc.name: ParseUri and ToUri
1580  * @tc.desc: Verify the function when flag is not number.
1581  */
1582 HWTEST_F(WantBaseTest, AaFwk_Want_ParseUri_ToUri_0900, Function | MediumTest | Level1)
1583 {
1584     std::string empty;
1585     std::string uri = "#Intent;action=want.action.VIEW;flag=\"123\";end";
1586     EXPECT_NE(static_cast<int>(uri.length()), 0);
1587 
1588     Want *want = Want::ParseUri(uri);
1589     EXPECT_EQ(want, nullptr);
1590     if (want != nullptr) {
1591         delete want;
1592         want = nullptr;
1593     }
1594 }
1595 
1596 /**
1597  * @tc.number:  AaFwk_Want_ParseUri_ToUri_1000
1598  * @tc.name: ParseUri and ToUri
1599  * @tc.desc: Verify the function when head is not "#Intent".
1600  */
1601 HWTEST_F(WantBaseTest, AaFwk_Want_ParseUri_ToUri_1000, Function | MediumTest | Level1)
1602 {
1603     std::string empty;
1604     std::string uri = "action=want.action.VIEW;end";
1605     EXPECT_NE(static_cast<int>(uri.length()), 0);
1606 
1607     Want *want = Want::ParseUri(uri);
1608     EXPECT_EQ(want, nullptr);
1609     if (want != nullptr) {
1610         delete want;
1611         want = nullptr;
1612     }
1613 }
1614 
1615 /**
1616  * @tc.number:  AaFwk_Want_ParseUri_ToUri_1100
1617  * @tc.name: ParseUri and ToUri
1618  * @tc.desc: Verify the function when flag is empty.
1619  */
1620 HWTEST_F(WantBaseTest, AaFwk_Want_ParseUri_ToUri_1100, Function | MediumTest | Level1)
1621 {
1622     std::string empty;
1623     std::string uri = "#Intent;flag=;end";
1624     EXPECT_NE(static_cast<int>(uri.length()), 0);
1625 
1626     Want *want = Want::ParseUri(uri);
1627     EXPECT_NE(want, nullptr);
1628 
1629     if (want != nullptr) {
1630         EXPECT_EQ(want->GetFlags(), static_cast<unsigned int>(0));
1631         delete want;
1632     }
1633 }
1634 
1635 /**
1636  * @tc.number:  AaFwk_Want_ParseUri_ToUri_1200
1637  * @tc.name: ParseUri and ToUri
1638  * @tc.desc: Verify the function when x is capital.
1639  */
1640 HWTEST_F(WantBaseTest, AaFwk_Want_ParseUri_ToUri_1200, Function | MediumTest | Level1)
1641 {
1642     std::string empty;
1643     unsigned int flag = 0X12345678;
1644     std::string uri = "#Intent;flag=0X12345678;end";
1645     EXPECT_NE(static_cast<int>(uri.length()), 0);
1646 
1647     Want *want = Want::ParseUri(uri);
1648     EXPECT_NE(want, nullptr);
1649 
1650     if (want != nullptr) {
1651         EXPECT_EQ(want->GetFlags(), flag);
1652         delete want;
1653     }
1654 }
1655 
1656 /**
1657  * @tc.number:  AaFwk_Want_ParseUri_ToUri_1300
1658  * @tc.name: ParseUri and ToUri
1659  * @tc.desc: Verify the function when special character.
1660  */
1661 HWTEST_F(WantBaseTest, AaFwk_Want_ParseUri_ToUri_1300, Function | MediumTest | Level1)
1662 {
1663     std::string action = "\\";
1664     std::string entity = "../../../jj/j=075/./.;;/07507399/\\\\;;--==.com.\a\b\tfoobar.vide\073\\075";
1665     unsigned int flag = 0x0f0f0f0f;
1666     std::string flagStr = "0x0f0f0f0f";
1667     std::string key = "\\kkk=.=;";
1668     std::string value = "==\\\\\\.;\\;\\;\\=\\\073075\\\\075073";
1669 
1670     Want wantOrigin;
1671     wantOrigin.SetAction(action);
1672     wantOrigin.AddEntity(entity);
1673     wantOrigin.AddFlags(flag);
1674     wantOrigin.SetParam(key, value);
1675 
1676     std::string uri = wantOrigin.ToUri();
1677 
1678     Want *wantNew = Want::ParseUri(uri);
1679     EXPECT_NE(wantNew, nullptr);
1680 
1681     if (wantNew != nullptr) {
1682         EXPECT_STREQ(wantNew->GetAction().c_str(), action.c_str());
1683         for (auto entityItem : wantNew->GetEntities()) {
1684             EXPECT_EQ(entityItem, entity);
1685         }
1686         EXPECT_EQ(wantNew->GetFlags(), flag);
1687         EXPECT_EQ(wantNew->GetStringParam(key), value);
1688 
1689         delete wantNew;
1690         wantNew = nullptr;
1691     }
1692 }
1693 
1694 /**
1695  * @tc.number:  AaFwk_Want_ParseUri_ToUri_1400
1696  * @tc.name: ParseUri and ToUri
1697  * @tc.desc: Verify the function when no '=' or only has a '='.
1698  */
1699 HWTEST_F(WantBaseTest, AaFwk_Want_ParseUri_ToUri_1400, Function | MediumTest | Level1)
1700 {
1701     std::string uri = "#Intent;action;end";
1702     Want *want = Want::ParseUri(uri);
1703     EXPECT_EQ(want, nullptr);
1704     if (want != nullptr) {
1705         delete want;
1706         want = nullptr;
1707     }
1708 
1709     uri = "#Intent;entity;end";
1710     want = Want::ParseUri(uri);
1711     EXPECT_EQ(want, nullptr);
1712     if (want != nullptr) {
1713         delete want;
1714         want = nullptr;
1715     }
1716 
1717     uri = "#Intent;device;end";
1718     want = Want::ParseUri(uri);
1719     EXPECT_EQ(want, nullptr);
1720     if (want != nullptr) {
1721         delete want;
1722         want = nullptr;
1723     }
1724 
1725     uri = "#Intent;bundle;end";
1726     want = Want::ParseUri(uri);
1727     EXPECT_EQ(want, nullptr);
1728     if (want != nullptr) {
1729         delete want;
1730         want = nullptr;
1731     }
1732 
1733     uri = "#Intent;ability;end";
1734     want = Want::ParseUri(uri);
1735     EXPECT_EQ(want, nullptr);
1736     if (want != nullptr) {
1737         delete want;
1738         want = nullptr;
1739     }
1740 
1741     uri = "#Intent;flag;end";
1742     want = Want::ParseUri(uri);
1743     EXPECT_EQ(want, nullptr);
1744     if (want != nullptr) {
1745         delete want;
1746         want = nullptr;
1747     }
1748 
1749     uri = "#Intent;param;end";
1750     want = Want::ParseUri(uri);
1751     EXPECT_EQ(want, nullptr);
1752     if (want != nullptr) {
1753         delete want;
1754         want = nullptr;
1755     }
1756 
1757     uri = "#Intent;=;end";
1758     want = Want::ParseUri(uri);
1759     EXPECT_NE(want, nullptr);
1760     if (want != nullptr) {
1761         delete want;
1762         want = nullptr;
1763     }
1764 
1765     uri = "#Intent;abc=;end";
1766     want = Want::ParseUri(uri);
1767     EXPECT_NE(want, nullptr);
1768     if (want != nullptr) {
1769         delete want;
1770         want = nullptr;
1771     }
1772 
1773     uri = "#Intent;=abc;end";
1774     want = Want::ParseUri(uri);
1775     EXPECT_NE(want, nullptr);
1776     if (want != nullptr) {
1777         delete want;
1778         want = nullptr;
1779     }
1780 
1781     uri = "#Intent;xxxx=yyy;end";
1782     want = Want::ParseUri(uri);
1783     EXPECT_NE(want, nullptr);
1784     if (want != nullptr) {
1785         delete want;
1786         want = nullptr;
1787     }
1788 
1789     uri = "#Intent;;;;;;end";
1790     want = Want::ParseUri(uri);
1791     EXPECT_NE(want, nullptr);
1792     if (want != nullptr) {
1793         delete want;
1794         want = nullptr;
1795     }
1796 }
1797 
1798 /**
1799  * @tc.number:  AaFwk_Want_Flags_0100
1800  * @tc.name: SetFlags/AddFlags/GetFlags/RemoveFlags
1801  * @tc.desc: Verify SetFlags/AddFlags/GetFlags/RemoveFlags.
1802  */
1803 HWTEST_F(WantBaseTest, AaFwk_Want_Flags_0100, Function | MediumTest | Level1)
1804 {
1805     int flags = 3;
1806     int returnsflags;
1807     int description = 8;
1808 
1809     want_->SetFlags(description);
1810     want_->AddFlags(flags);
1811     returnsflags = want_->GetFlags();
1812     EXPECT_EQ(11, returnsflags);
1813 
1814     want_->RemoveFlags(flags);
1815     returnsflags = want_->GetFlags();
1816     EXPECT_EQ(description, returnsflags);
1817 }
1818 
1819 /**
1820  * @tc.number:  AaFwk_Want_MakeMainAbility_0100
1821  * @tc.name: MakeMainAbility
1822  * @tc.desc: Verify MakeMainAbility.
1823  */
1824 HWTEST_F(WantBaseTest, AaFwk_Want_MakeMainAbility_0100, Function | MediumTest | Level1)
1825 {
1826     ElementName elementName;
1827 
1828     std::string action("action.system.home");
1829     std::string entity("entity.system.home");
1830 
1831     Want *wantNew = want_->MakeMainAbility(elementName);
1832     if (wantNew != nullptr) {
1833         std::vector<std::string> entities = wantNew->GetEntities();
1834 
1835         EXPECT_EQ((size_t)1, entities.size());
1836         if (entities.size() > 0) {
1837             EXPECT_EQ(entity, entities.at(0));
1838         }
1839         EXPECT_EQ(action, wantNew->GetAction());
1840         EXPECT_EQ(elementName, wantNew->GetElement());
1841 
1842         delete wantNew;
1843         wantNew = nullptr;
1844     }
1845 }
1846 
1847 /**
1848  * @tc.number:  AaFwk_Want_ClearWant_0100
1849  * @tc.name: ClearWant
1850  * @tc.desc: Verify ClearWant.
1851  */
1852 HWTEST_F(WantBaseTest, AaFwk_Want_ClearWant_0100, Function | MediumTest | Level1)
1853 {
1854     Want want;
1855     ElementName elementName;
1856     std::string empty = "";
1857     want_->ClearWant(&want);
1858 
1859     EXPECT_EQ((uint)0, want_->GetFlags());
1860     EXPECT_EQ(empty, want_->GetType());
1861     EXPECT_EQ(empty, want_->GetAction());
1862     EXPECT_EQ(elementName, want_->GetElement());
1863     EXPECT_EQ((size_t)0, want_->GetEntities().size());
1864     EXPECT_EQ(0, want_->CountEntities());
1865 }
1866 
1867 /**
1868  * @tc.number:  AaFwk_Want_replaceParams_0100
1869  * @tc.name: replaceParams(wantParams)
1870  * @tc.desc: Verify the function when the input string is empty.
1871  */
1872 HWTEST_F(WantBaseTest, AaFwk_Want_replaceParams_0100, Function | MediumTest | Level1)
1873 {
1874     WantParams wantParams;
1875     std::string keyStr = "123";
1876     std::string valueStr = "123";
1877     wantParams.SetParam(keyStr, String::Box(valueStr));
1878     want_->ReplaceParams(wantParams);
1879 
1880     EXPECT_EQ(valueStr, String::Unbox(IString::Query(want_->GetParams().GetParam(keyStr))));
1881 }
1882 
1883 /**
1884  * @tc.number:  AaFwk_Want_setElement_0100
1885  * @tc.name:setElement / setElementName
1886  * @tc.desc: Verify the function when the input string is empty.
1887  */
1888 HWTEST_F(WantBaseTest, AaFwk_Want_setElement_0100, Function | MediumTest | Level1)
1889 {
1890     std::string valueStr1 = "xxxxx";
1891     std::string valueStr2 = "uaid";
1892     std::string valueStr3 = "uaygfi";
1893 
1894     OHOS::AppExecFwk::ElementName elementname1;
1895     OHOS::AppExecFwk::ElementName elementname2;
1896     OHOS::AppExecFwk::ElementName elementname3;
1897     ElementName elementname4;
1898     elementname1.SetAbilityName(valueStr1);
1899     elementname2.SetDeviceID(valueStr2);
1900     elementname3.SetBundleName(valueStr3);
1901     want_->SetElement(elementname1);
1902     EXPECT_EQ(valueStr1, want_->GetElement().GetAbilityName());
1903 
1904     want_->SetElement(elementname2);
1905     EXPECT_EQ(valueStr2, want_->GetElement().GetDeviceID());
1906 
1907     want_->SetElement(elementname3);
1908     EXPECT_EQ(valueStr3, want_->GetElement().GetBundleName());
1909 
1910     want_->SetElementName(valueStr3, valueStr1);
1911     EXPECT_EQ(valueStr1, want_->GetElement().GetAbilityName());
1912     EXPECT_EQ(valueStr3, want_->GetElement().GetBundleName());
1913 
1914     want_->SetElementName(valueStr2, valueStr3, valueStr1);
1915     EXPECT_EQ(valueStr1, want_->GetElement().GetAbilityName());
1916     EXPECT_EQ(valueStr2, want_->GetElement().GetDeviceID());
1917     EXPECT_EQ(valueStr3, want_->GetElement().GetBundleName());
1918 }
1919 
1920 /**
1921  * @tc.number:  AaFwk_Want_Action_0200
1922  * @tc.name:SetAction / GetAction
1923  * @tc.desc: Verify the function when the input string is empty.
1924  */
1925 HWTEST_F(WantBaseTest, AaFwk_Want_Action_0200, Function | MediumTest | Level1)
1926 {
1927     std::string setValue;
1928     want_->SetAction(setValue);
1929     EXPECT_EQ(setValue, want_->GetAction());
1930 }
1931 
1932 /**
1933  * @tc.number:  AaFwk_Want_Action_0300
1934  * @tc.name:SetAction / GetAction
1935  * @tc.desc: Verify the function when the input string contains special characters.
1936  */
1937 HWTEST_F(WantBaseTest, AaFwk_Want_Action_0300, Function | MediumTest | Level1)
1938 {
1939     std::string setValue("action.system.com");
1940     want_->SetAction(setValue);
1941     EXPECT_STREQ(setValue.c_str(), want_->GetAction().c_str());
1942 }
1943 
1944 using testByteType = std::tuple<std::string, std::string, byte, byte, byte>;
1945 class WantParametersBoolArrayTest : public testing::TestWithParam<testByteType> {
1946 public:
WantParametersBoolArrayTest()1947     WantParametersBoolArrayTest()
1948     {
1949         want_ = nullptr;
1950     }
~WantParametersBoolArrayTest()1951     ~WantParametersBoolArrayTest()
1952     {
1953         want_ = nullptr;
1954     }
1955     static void SetUpTestCase(void);
1956     static void TearDownTestCase(void);
1957     void SetUp();
1958     void TearDown();
1959     std::shared_ptr<Want> want_;
1960 };
1961 
SetUpTestCase(void)1962 void WantParametersBoolArrayTest::SetUpTestCase(void)
1963 {}
1964 
TearDownTestCase(void)1965 void WantParametersBoolArrayTest::TearDownTestCase(void)
1966 {}
1967 
SetUp(void)1968 void WantParametersBoolArrayTest::SetUp(void)
1969 {
1970     want_ = std::make_shared<Want>();
1971 }
1972 
TearDown(void)1973 void WantParametersBoolArrayTest::TearDown(void)
1974 {}
1975 
1976 /**
1977  * @tc.number:  AaFwk_Want_BoolArray_0100
1978  * @tc.name:SetBoolArrayParam/GetBoolArrayParam
1979  * @tc.desc: Verify when parameter change.
1980  */
1981 HWTEST_P(WantParametersBoolArrayTest, AaFwk_Want_BoolArray_0100, Function | MediumTest | Level1)
1982 {
1983     std::string setKey = std::get<0>(GetParam());
1984     std::string getKey = std::get<1>(GetParam());
1985     byte setValue = std::get<2>(GetParam());
1986     byte defaultValue = std::get<3>(GetParam());
1987     byte result = std::get<4>(GetParam());
1988     want_->SetParam(setKey, setValue);
1989     EXPECT_EQ(result, want_->GetByteParam(getKey, defaultValue));
1990 }
1991 
1992 INSTANTIATE_TEST_SUITE_P(WantParametersBoolArrayTestCaseP, WantParametersBoolArrayTest,
1993     testing::Values(testByteType("", "aa", '#', 'U', 'U'), testByteType("", "", 'N', 'K', 'N'),
1994         testByteType("1*中_aR", "aa", 'a', '%', '%'), testByteType("1*中_aR", "1*中_aR", 'a', 'z', 'a')));
1995 
1996 using testBoolArrayType = std::tuple<std::string, std::string, std::vector<bool>, std::vector<bool>, std::vector<bool>>;
1997 class WantBoolArrayParamTest : public testing::TestWithParam<testBoolArrayType> {
1998 public:
WantBoolArrayParamTest()1999     WantBoolArrayParamTest()
2000     {
2001         want_ = nullptr;
2002     }
~WantBoolArrayParamTest()2003     ~WantBoolArrayParamTest()
2004     {
2005         want_ = nullptr;
2006     }
2007     static void SetUpTestCase(void);
2008     static void TearDownTestCase(void);
2009     void SetUp();
2010     void TearDown();
2011     std::shared_ptr<Want> want_;
2012 };
2013 
SetUpTestCase(void)2014 void WantBoolArrayParamTest::SetUpTestCase(void)
2015 {}
2016 
TearDownTestCase(void)2017 void WantBoolArrayParamTest::TearDownTestCase(void)
2018 {}
2019 
SetUp(void)2020 void WantBoolArrayParamTest::SetUp(void)
2021 {
2022     want_ = std::make_shared<Want>();
2023 }
2024 
TearDown(void)2025 void WantBoolArrayParamTest::TearDown(void)
2026 {}
2027 
2028 /**
2029  * @tc.number:  AaFwk_Want_BoolArray_0200
2030  * @tc.name:SetBoolArrayParam/GetBoolArrayParam
2031  * @tc.desc: Verify when parameter change.
2032  */
2033 HWTEST_P(WantBoolArrayParamTest, AaFwk_Want_BoolArray_0200, Function | MediumTest | Level1)
2034 {
2035     std::string setKey = std::get<0>(GetParam());
2036     std::string getKey = std::get<1>(GetParam());
2037     std::vector<bool> setValue = std::get<2>(GetParam());
2038     std::vector<bool> defaultValue = std::get<3>(GetParam());
2039     std::vector<bool> result = std::get<4>(GetParam());
2040     want_->SetParam(setKey, setValue);
2041     EXPECT_EQ(result, want_->GetBoolArrayParam(getKey));
2042 }
2043 
2044 INSTANTIATE_TEST_SUITE_P(WantBoolArrayParamTestCaseP, WantBoolArrayParamTest,
2045     testing::Values(testBoolArrayType("", "aa", {true, false}, {}, {}),
2046         testBoolArrayType("", "", {true, false}, {}, {true, false}),
2047         testBoolArrayType("1*中_aR", "aa", {true, false}, {}, {}),
2048         testBoolArrayType("1*中_aR", "1*中_aR", {false, true}, {}, {false, true})));
2049 
2050 using testCharArrayType =
2051     std::tuple<std::string, std::string, std::vector<zchar>, std::vector<zchar>, std::vector<zchar>>;
2052 class WantCharArrayParamTest : public testing::TestWithParam<testCharArrayType> {
2053 public:
WantCharArrayParamTest()2054     WantCharArrayParamTest()
2055     {
2056         want_ = nullptr;
2057     }
~WantCharArrayParamTest()2058     ~WantCharArrayParamTest()
2059     {
2060         want_ = nullptr;
2061     }
2062     static void SetUpTestCase(void);
2063     static void TearDownTestCase(void);
2064     void SetUp();
2065     void TearDown();
2066     std::shared_ptr<Want> want_;
2067 };
2068 
SetUpTestCase(void)2069 void WantCharArrayParamTest::SetUpTestCase(void)
2070 {}
2071 
TearDownTestCase(void)2072 void WantCharArrayParamTest::TearDownTestCase(void)
2073 {}
2074 
SetUp(void)2075 void WantCharArrayParamTest::SetUp(void)
2076 {
2077     want_ = std::make_shared<Want>();
2078 }
2079 
TearDown(void)2080 void WantCharArrayParamTest::TearDown(void)
2081 {}
2082 
2083 /**
2084  * @tc.number:  AaFwk_Want_Parameters_CharArray_0100
2085  * @tc.name: SetParam/GetCharArrayParam
2086  * @tc.desc: Verify when parameter change.
2087  */
2088 HWTEST_P(WantCharArrayParamTest, AaFwk_Want_Parameters_CharArray_0100, Function | MediumTest | Level1)
2089 {
2090     std::string setKey = std::get<0>(GetParam());
2091     std::string getKey = std::get<1>(GetParam());
2092     std::vector<zchar> setValue = std::get<2>(GetParam());
2093     std::vector<zchar> defaultValue = std::get<3>(GetParam());
2094     std::vector<zchar> result = std::get<4>(GetParam());
2095     want_->SetParam(setKey, setValue);
2096     EXPECT_EQ(result, want_->GetCharArrayParam(getKey));
2097 }
2098 
2099 INSTANTIATE_TEST_SUITE_P(WantCharArrayParamTestCaseP, WantCharArrayParamTest,
2100     testing::Values(testCharArrayType("", "aa", {U'中', U'文'}, {}, {}),
2101         testCharArrayType("", "", {U'中', U'文'}, {}, {U'中', U'文'}),
2102         testCharArrayType("1*中_aR", "aa", {U'中', U'文'}, {}, {}),
2103         testCharArrayType("1*中_aR", "1*中_aR", {U'中', U'文'}, {}, {U'中', U'文'})));
2104 
2105 /**
2106  * @tc.number:  AaFwk_Want_Parameters_CharArray_0200
2107  * @tc.name:  GetCharArrayParam
2108  * @tc.desc: Verify when the value is char array.
2109  */
2110 HWTEST_F(WantCharArrayParamTest, AaFwk_Want_Parameters_CharArray_0200, Function | MediumTest | Level1)
2111 {
2112     std::vector<zchar> defaultValue;
2113     std::string getKey("aa");
2114     EXPECT_EQ(defaultValue, want_->GetCharArrayParam(getKey));
2115 }
2116 
2117 /**
2118  * @tc.number:  AaFwk_Want_Parameters_CharArray_0300
2119  * @tc.name:  SetParam/GetCharArrayParam
2120  * @tc.desc: Verify when the value is char array.
2121  */
2122 HWTEST_F(WantCharArrayParamTest, AaFwk_Want_Parameters_CharArray_0300, Function | MediumTest | Level1)
2123 {
2124     std::string emptyStr("ff");
2125     std::vector<zchar> firstValue({U'中', U'文'});
2126     std::vector<zchar> secondValue({U'字', U'符'});
2127     std::vector<zchar> thirdValue({U'集', U'英'});
2128     std::string keyStr("aa");
2129     want_->SetParam(emptyStr, firstValue);
2130     want_->SetParam(emptyStr, firstValue);
2131     want_->SetParam(emptyStr, secondValue);
2132     std::vector<zchar> defaultValue;
2133     EXPECT_EQ(defaultValue, want_->GetCharArrayParam(keyStr));
2134     want_->SetParam(emptyStr, thirdValue);
2135     EXPECT_EQ(thirdValue, want_->GetCharArrayParam(emptyStr));
2136 }
2137 
2138 /**
2139  * @tc.number: AaFwk_Want_Parameters_CharArray_0400
2140  * @tc.name:  SetParam/GetCharArrayParam
2141  * @tc.desc: Verify when the value is char array.
2142  */
2143 HWTEST_F(WantCharArrayParamTest, AaFwk_Want_Parameters_CharArray_0400, Function | MediumTest | Level1)
2144 {
2145     std::string firstKey("%1uH3");
2146     std::vector<zchar> firstValue({U'中', U'文'});
2147     std::vector<zchar> secondValue({U'字', U'符'});
2148     std::vector<zchar> defaultValue;
2149     std::string secondKey("aa");
2150     want_->SetParam(firstKey, firstValue);
2151     want_->SetParam(firstKey, firstValue);
2152     want_->SetParam(firstKey, secondValue);
2153     EXPECT_EQ(secondValue, want_->GetCharArrayParam(firstKey));
2154     want_->SetParam(firstKey, firstValue);
2155     EXPECT_EQ(defaultValue, want_->GetCharArrayParam(secondKey));
2156 }
2157 
2158 using testCharType = std::tuple<std::string, std::string, zchar, zchar, zchar>;
2159 class WantCharParamTest : public testing::TestWithParam<testCharType> {
2160 public:
WantCharParamTest()2161     WantCharParamTest()
2162     {
2163         want_ = nullptr;
2164     }
~WantCharParamTest()2165     ~WantCharParamTest()
2166     {
2167         want_ = nullptr;
2168     }
2169     static void SetUpTestCase(void);
2170     static void TearDownTestCase(void);
2171     void SetUp();
2172     void TearDown();
2173     std::shared_ptr<Want> want_;
2174 };
2175 
SetUpTestCase(void)2176 void WantCharParamTest::SetUpTestCase(void)
2177 {}
2178 
TearDownTestCase(void)2179 void WantCharParamTest::TearDownTestCase(void)
2180 {}
2181 
SetUp(void)2182 void WantCharParamTest::SetUp(void)
2183 {
2184     want_ = std::make_shared<Want>();
2185 }
2186 
TearDown(void)2187 void WantCharParamTest::TearDown(void)
2188 {}
2189 
2190 /**
2191  * @tc.number: AaFwk_Want_Parameters_Char_0100
2192  * @tc.name:  SetParam/GetCharParam
2193  * @tc.desc: Verify when the value is char array.
2194  */
2195 HWTEST_P(WantCharParamTest, AaFwk_Want_Parameters_Char_0100, Function | MediumTest | Level1)
2196 {
2197     std::string setKey = std::get<0>(GetParam());
2198     std::string getKey = std::get<1>(GetParam());
2199     zchar setValue = std::get<2>(GetParam());
2200     zchar defaultValue = std::get<3>(GetParam());
2201     zchar result = std::get<4>(GetParam());
2202     want_->SetParam(setKey, setValue);
2203     EXPECT_EQ(result, want_->GetCharParam(getKey, defaultValue));
2204 }
2205 
2206 INSTANTIATE_TEST_SUITE_P(WantParametersCharTestCaseP, WantCharParamTest,
2207     testing::Values(testCharType("", "aa", U'#', U'中', U'中'), testCharType("", "", U'中', U'K', U'中'),
2208         testCharType("1*中_aR", "aa", U'a', U'中', U'中'), testCharType("1*中_aR", "1*中_aR", U'中', U'z', U'中')));
2209 
2210 /**
2211  * @tc.number: AaFwk_Want_Parameters_Char_0200
2212  * @tc.name:  SetParam/GetCharParam
2213  * @tc.desc: Verify when the value is char
2214  */
2215 HWTEST_F(WantCharParamTest, AaFwk_Want_Parameters_Char_0200, Function | MediumTest | Level1)
2216 {
2217     zchar defaultValue = U'文';
2218     std::string getKey("aa");
2219     EXPECT_EQ(defaultValue, want_->GetCharParam(getKey, defaultValue));
2220 }
2221 
2222 /**
2223  * @tc.number: AaFwk_Want_Parameters_Char_0300
2224  * @tc.name:  SetParam/GetCharParam
2225  * @tc.desc: Verify when the value is char.
2226  */
2227 HWTEST_F(WantCharParamTest, AaFwk_Want_Parameters_Char_0300, Function | MediumTest | Level1)
2228 {
2229     std::string emptyStr("jj");
2230     zchar firstValue = U'中';
2231     zchar secondValue = U'文';
2232     zchar thirdValue = U'字';
2233     zchar firstDefaultValue = U'符';
2234     zchar secondDefaultValue = U'集';
2235     std::string keyStr("aa");
2236     want_->SetParam(emptyStr, firstValue);
2237     want_->SetParam(emptyStr, firstValue);
2238     want_->SetParam(emptyStr, secondValue);
2239     EXPECT_EQ(firstDefaultValue, want_->GetCharParam(keyStr, firstDefaultValue));
2240     want_->SetParam(emptyStr, thirdValue);
2241     EXPECT_EQ(thirdValue, want_->GetCharParam(emptyStr, secondDefaultValue));
2242 }
2243 
2244 /**
2245  * @tc.number: AaFwk_Want_Parameters_Char_0400
2246  * @tc.name:  SetParam/GetCharParam
2247  * @tc.desc: Verify when the value is char.
2248  */
2249 HWTEST_F(WantCharParamTest, AaFwk_Want_Parameters_Char_0400, Function | MediumTest | Level1)
2250 {
2251     std::string firstKey("%1uH3");
2252     zchar firstValue = U'中';
2253     zchar secondValue = U'文';
2254     zchar firstDefaultValue = U'字';
2255     zchar secondDefaultValue = U'符';
2256     std::string secondKey("aa");
2257     want_->SetParam(firstKey, firstValue);
2258     want_->SetParam(firstKey, firstValue);
2259     want_->SetParam(firstKey, secondValue);
2260     EXPECT_EQ(secondValue, want_->GetCharParam(firstKey, firstDefaultValue));
2261     want_->SetParam(firstKey, firstValue);
2262     EXPECT_EQ(secondDefaultValue, want_->GetCharParam(secondKey, secondDefaultValue));
2263 }
2264 
2265 using testDoubleArrayType =
2266     std::tuple<std::string, std::string, std::vector<double>, std::vector<double>, std::vector<double>>;
2267 class WantDoubleArrayParamTest : public testing::TestWithParam<testDoubleArrayType> {
2268 public:
WantDoubleArrayParamTest()2269     WantDoubleArrayParamTest()
2270     {
2271         want_ = nullptr;
2272     }
~WantDoubleArrayParamTest()2273     ~WantDoubleArrayParamTest()
2274     {
2275         want_ = nullptr;
2276     }
2277     static void SetUpTestCase(void);
2278     static void TearDownTestCase(void);
2279     void SetUp();
2280     void TearDown();
2281     std::shared_ptr<Want> want_;
2282 };
2283 
SetUpTestCase(void)2284 void WantDoubleArrayParamTest::SetUpTestCase(void)
2285 {}
2286 
TearDownTestCase(void)2287 void WantDoubleArrayParamTest::TearDownTestCase(void)
2288 {}
2289 
SetUp(void)2290 void WantDoubleArrayParamTest::SetUp(void)
2291 {
2292     want_ = std::make_shared<Want>();
2293 }
2294 
TearDown(void)2295 void WantDoubleArrayParamTest::TearDown(void)
2296 {}
2297 
2298 /**
2299  * @tc.number: AaFwk_Want_DoubleArray_0100
2300  * @tc.name:  SetParam/GetDoubleArrayParam
2301  * @tc.desc: Verify when parameter change.
2302  */
2303 HWTEST_P(WantDoubleArrayParamTest, AaFwk_Want_DoubleArray_0100, Function | MediumTest | Level1)
2304 {
2305     std::string setKey = std::get<0>(GetParam());
2306     std::string getKey = std::get<1>(GetParam());
2307     std::vector<double> setValue = std::get<2>(GetParam());
2308     std::vector<double> defaultValue = std::get<3>(GetParam());
2309     std::vector<double> result = std::get<4>(GetParam());
2310     want_->SetParam(setKey, setValue);
2311     EXPECT_EQ(result, want_->GetDoubleArrayParam(getKey));
2312 }
2313 
2314 INSTANTIATE_TEST_SUITE_P(WantDoubleArrayParamTestCaseP, WantDoubleArrayParamTest,
2315     testing::Values(testDoubleArrayType("", "aa", {-1.1, -2.1}, {}, {}),
2316         testDoubleArrayType("", "", {-41.1, -42.1}, {}, {-41.1, -42.1}),
2317         testDoubleArrayType("1*中_aR", "aa", {50.1, 51.1}, {}, {}),
2318         testDoubleArrayType("1*中_aR", "1*中_aR", {5000.1, 5001.1}, {}, {5000.1, 5001.1})));
2319 
2320 /**
2321  * @tc.number: AaFwk_Want_DoubleArray_0200
2322  * @tc.name:  SetParam/GetDoubleArrayParam
2323  * @tc.desc: Verify when parameter change.
2324  */
2325 HWTEST_F(WantDoubleArrayParamTest, AaFwk_Want_DoubleArray_0200, Function | MediumTest | Level1)
2326 {
2327     std::vector<double> defaultValue;
2328     std::string key = "aa";
2329     EXPECT_EQ(defaultValue, want_->GetDoubleArrayParam(key));
2330 }
2331 
2332 /**
2333  * @tc.number: AaFwk_Want_DoubleArray_0300
2334  * @tc.name:  SetParam/GetDoubleArrayParam
2335  * @tc.desc: set empty-string key repeatedly, but get param of another nonexistent key
2336  */
2337 HWTEST_F(WantDoubleArrayParamTest, AaFwk_Want_DoubleArray_0300, Function | MediumTest | Level1)
2338 {
2339     std::vector<double> defaultValue;
2340     std::string setKey1 = "cc";
2341     std::string setKey2 = "aa";
2342     std::vector<double> setValue1 = {1.1, 2.1};
2343     std::vector<double> setValue2 = {5.1, 6.1};
2344     want_->SetParam(setKey1, setValue1);
2345     want_->SetParam(setKey1, setValue1);
2346     setValue1 = {2.1, 3.1};
2347     want_->SetParam(setKey1, setValue1);
2348     EXPECT_EQ(defaultValue, want_->GetDoubleArrayParam(setKey2));
2349     setValue1 = {4.1, 5.1};
2350     want_->SetParam(setKey1, setValue1);
2351     EXPECT_EQ(setValue1, want_->GetDoubleArrayParam(setKey1));
2352 }
2353 
2354 /**
2355  * @tc.number: AaFwk_Want_DoubleArray_0400
2356  * @tc.name:  SetParam/GetDoubleArrayParam
2357  * @tc.desc: set empty-string key repeatedly, then get param of the key
2358  */
2359 HWTEST_F(WantDoubleArrayParamTest, AaFwk_Want_DoubleArray_0400, Function | MediumTest | Level1)
2360 {
2361     std::vector<double> defaultValue;
2362     std::string setKey1 = "%1uH3";
2363     std::string setKey2 = "aa";
2364     std::vector<double> setValue1 = {-1.1, -2.1};
2365     std::vector<double> setValue2 = {9.1, 10.1};
2366     want_->SetParam(setKey1, setValue1);
2367     want_->SetParam(setKey1, setValue1);
2368     setValue1 = {0.1, 1.1};
2369     want_->SetParam(setKey1, setValue1);
2370     EXPECT_EQ(setValue1, want_->GetDoubleArrayParam(setKey1));
2371     setValue1 = {4.1, 5.1};
2372     want_->SetParam(setKey1, setValue1);
2373     setValue1 = {-10.1, -11.1};
2374     EXPECT_EQ(defaultValue, want_->GetDoubleArrayParam(setKey2));
2375 }
2376 
2377 using testFloatArrayType =
2378     std::tuple<std::string, std::string, std::vector<float>, std::vector<float>, std::vector<float>>;
2379 class WantFloatArrayParamTest : public testing::TestWithParam<testFloatArrayType> {
2380 public:
WantFloatArrayParamTest()2381     WantFloatArrayParamTest()
2382     {
2383         want_ = nullptr;
2384     }
~WantFloatArrayParamTest()2385     ~WantFloatArrayParamTest()
2386     {
2387         want_ = nullptr;
2388     }
2389     static void SetUpTestCase(void);
2390     static void TearDownTestCase(void);
2391     void SetUp();
2392     void TearDown();
2393     std::shared_ptr<Want> want_;
2394 };
2395 
SetUpTestCase(void)2396 void WantFloatArrayParamTest::SetUpTestCase(void)
2397 {}
2398 
TearDownTestCase(void)2399 void WantFloatArrayParamTest::TearDownTestCase(void)
2400 {}
2401 
SetUp(void)2402 void WantFloatArrayParamTest::SetUp(void)
2403 {
2404     want_ = std::make_shared<Want>();
2405 }
2406 
TearDown(void)2407 void WantFloatArrayParamTest::TearDown(void)
2408 {}
2409 
2410 /**
2411  * @tc.number: AaFwk_Want_FloatArray_0100
2412  * @tc.name:  SetParam/GetFloatArrayParam
2413  * @tc.desc: Verify when parameter change.
2414  */
2415 HWTEST_P(WantFloatArrayParamTest, AaFwk_Want_FloatArray_0100, Function | MediumTest | Level1)
2416 {
2417     std::string setKey = std::get<0>(GetParam());
2418     std::string getKey = std::get<1>(GetParam());
2419     std::vector<float> setValue = std::get<2>(GetParam());
2420     std::vector<float> defaultValue = std::get<3>(GetParam());
2421     std::vector<float> result = std::get<4>(GetParam());
2422     want_->SetParam(setKey, setValue);
2423     EXPECT_EQ(result, want_->GetFloatArrayParam(getKey));
2424 }
2425 
2426 INSTANTIATE_TEST_SUITE_P(WantFloatArrayParamTestCaseP, WantFloatArrayParamTest,
2427     testing::Values(testFloatArrayType("", "aa", {-1.1, -2.1}, {}, {}),
2428         testFloatArrayType("", "", {-41.1, -42.1}, {}, {-41.1, -42.1}),
2429         testFloatArrayType("1*中_aR", "aa", {50.1, 51.1}, {}, {}),
2430         testFloatArrayType("1*中_aR", "1*中_aR", {5000.1, 5001.1}, {}, {5000.1, 5001.1})));
2431 
2432 /**
2433  * @tc.number: AaFwk_Want_FloatArray_0200
2434  * @tc.name:  SetParam/GetFloatArrayParam
2435  * @tc.desc: get param when WantParam is empty
2436  */
2437 HWTEST_F(WantFloatArrayParamTest, AaFwk_Want_FloatArray_0200, Function | MediumTest | Level1)
2438 {
2439     std::vector<float> defaultValue;
2440     std::string key = "aa";
2441     EXPECT_EQ(defaultValue, want_->GetFloatArrayParam(key));
2442 }
2443 
2444 /**
2445  * @tc.number: AaFwk_Want_FloatArray_0300
2446  * @tc.name:  SetParam & GetFloatArrayParam
2447  * @tc.desc: set empty-string key repeatedly, but get param of another nonexistent key
2448  */
2449 HWTEST_F(WantFloatArrayParamTest, AaFwk_Want_FloatArray_0300, Function | MediumTest | Level1)
2450 {
2451     std::vector<float> defaultValue;
2452     std::string setKey1 = "hh";
2453     std::string setKey2 = "aa";
2454     std::vector<float> setValue1 = {1.1, 2.1};
2455     want_->SetParam(setKey1, setValue1);
2456     want_->SetParam(setKey1, setValue1);
2457     setValue1 = {2.1, 3.1};
2458     want_->SetParam(setKey1, setValue1);
2459     EXPECT_EQ(defaultValue, want_->GetFloatArrayParam(setKey2));
2460     setValue1 = {4.1, 5.1};
2461     want_->SetParam(setKey1, setValue1);
2462     EXPECT_EQ(setValue1, want_->GetFloatArrayParam(setKey1));
2463 }
2464 
2465 /**
2466  * @tc.number: AaFwk_Want_FloatArray_0400
2467  * @tc.name:  SetParam & GetFloatArrayParam
2468  * @tc.desc: set empty-string key repeatedly, then get param of the key
2469  */
2470 HWTEST_F(WantFloatArrayParamTest, AaFwk_Want_FloatArray_0400, Function | MediumTest | Level1)
2471 {
2472     std::vector<float> defaultValue;
2473     std::string setKey1 = "%1uH3";
2474     std::string setKey2 = "aa";
2475     std::vector<float> setValue1 = {-1.1, -2.1};
2476     std::vector<float> setValue2 = {9.1, 10.1};
2477     want_->SetParam(setKey1, setValue1);
2478     want_->SetParam(setKey1, setValue1);
2479     setValue1 = {0.1, 1.1};
2480     want_->SetParam(setKey1, setValue1);
2481     EXPECT_EQ(setValue1, want_->GetFloatArrayParam(setKey1));
2482     setValue1 = {4.1, 5.1};
2483     want_->SetParam(setKey1, setValue1);
2484     EXPECT_EQ(defaultValue, want_->GetFloatArrayParam(setKey2));
2485 }
2486 
2487 using testLongArrayType = std::tuple<std::string, std::string, std::vector<long>, std::vector<long>, std::vector<long>>;
2488 class WantLongArrayParamTest : public testing::TestWithParam<testLongArrayType> {
2489 public:
WantLongArrayParamTest()2490     WantLongArrayParamTest()
2491     {
2492         want_ = nullptr;
2493     }
~WantLongArrayParamTest()2494     ~WantLongArrayParamTest()
2495     {
2496         want_ = nullptr;
2497     }
2498     static void SetUpTestCase(void);
2499     static void TearDownTestCase(void);
2500     void SetUp();
2501     void TearDown();
2502     std::shared_ptr<Want> want_;
2503 };
2504 
SetUpTestCase(void)2505 void WantLongArrayParamTest::SetUpTestCase(void)
2506 {}
2507 
TearDownTestCase(void)2508 void WantLongArrayParamTest::TearDownTestCase(void)
2509 {}
2510 
SetUp(void)2511 void WantLongArrayParamTest::SetUp(void)
2512 {
2513     want_ = std::make_shared<Want>();
2514 }
2515 
TearDown(void)2516 void WantLongArrayParamTest::TearDown(void)
2517 {}
2518 
2519 /**
2520  * @tc.number: AaFwk_Want_LongArray_0100
2521  * @tc.name:  SetParam & GetLongArrayParam
2522  * @tc.desc: Verify when parameter change.
2523  */
2524 HWTEST_P(WantLongArrayParamTest, AaFwk_Want_LongArray_0100, Function | MediumTest | Level1)
2525 {
2526     std::string setKey = std::get<0>(GetParam());
2527     std::string getKey = std::get<1>(GetParam());
2528     std::vector<long> setValue = std::get<2>(GetParam());
2529     std::vector<long> defaultValue = std::get<3>(GetParam());
2530     std::vector<long> result = std::get<4>(GetParam());
2531     want_->SetParam(setKey, setValue);
2532     EXPECT_EQ(result, want_->GetLongArrayParam(getKey));
2533 }
2534 
2535 INSTANTIATE_TEST_SUITE_P(WantLongArrayParamTestCaseP, WantLongArrayParamTest,
2536     testing::Values(testLongArrayType("", "aa", {-1, 3, 25, -9}, {}, {}),
2537         testLongArrayType("", "", {-41, 0, 0, 9}, {}, {-41, 0, 0, 9}),
2538         testLongArrayType("1*中_aR", "aa", {50, 2, -9}, {}, {}),
2539         testLongArrayType("1*中_aR", "1*中_aR", {-5000}, {}, {-5000})));
2540 
2541 /**
2542  * @tc.number: AaFwk_Want_LongArray_0200
2543  * @tc.name:  SetParam & GetLongArrayParam
2544  * @tc.desc: get param when WantParam is empty
2545  */
2546 HWTEST_F(WantLongArrayParamTest, AaFwk_Want_LongArray_0200, Function | MediumTest | Level1)
2547 {
2548     std::vector<long> defaultValue;
2549     std::string key = "aa";
2550     EXPECT_EQ(defaultValue, want_->GetLongArrayParam(key));
2551 }
2552 
2553 /**
2554  * @tc.number: AaFwk_Want_LongArray_0300
2555  * @tc.name:  SetParam & GetLongArrayParam
2556  * @tc.desc: set empty-string key repeatedly, but get param of another nonexistent key
2557  */
2558 HWTEST_F(WantLongArrayParamTest, AaFwk_Want_LongArray_0300, Function | MediumTest | Level1)
2559 {
2560     std::vector<long> defaultValue;
2561     std::string setKey1 = "bb";
2562     std::string setKey2 = "aa";
2563     std::vector<long> setValue1 = {1, 2};
2564     want_->SetParam(setKey1, setValue1);
2565     want_->SetParam(setKey1, setValue1);
2566     setValue1 = {2, 3};
2567     want_->SetParam(setKey1, setValue1);
2568     EXPECT_EQ(defaultValue, want_->GetLongArrayParam(setKey2));
2569     setValue1 = {4, 5};
2570     want_->SetParam(setKey1, setValue1);
2571     EXPECT_EQ(setValue1, want_->GetLongArrayParam(setKey1));
2572 }
2573 
2574 /**
2575  * @tc.number: AaFwk_Want_LongArray_0400
2576  * @tc.name:  SetParam & GetLongArrayParam
2577  * @tc.desc: set empty-string key repeatedly, then get param of the key
2578  */
2579 HWTEST_F(WantLongArrayParamTest, AaFwk_Want_LongArray_0400, Function | MediumTest | Level1)
2580 {
2581     std::vector<long> defaultValue;
2582     std::string setKey1 = "%1uH3";
2583     std::string setKey2 = "aa";
2584     std::vector<long> setValue1 = {-1, -2};
2585     want_->SetParam(setKey1, setValue1);
2586     want_->SetParam(setKey1, setValue1);
2587     setValue1 = {0, 1};
2588     want_->SetParam(setKey1, setValue1);
2589     EXPECT_EQ(setValue1, want_->GetLongArrayParam(setKey1));
2590     setValue1 = {4, 5};
2591     want_->SetParam(setKey1, setValue1);
2592     EXPECT_EQ(defaultValue, want_->GetLongArrayParam(setKey2));
2593 }
2594 
2595 using testShortArrayType =
2596     std::tuple<std::string, std::string, std::vector<short>, std::vector<short>, std::vector<short>>;
2597 class WantShortArrayParamTest : public testing::TestWithParam<testShortArrayType> {
2598 public:
WantShortArrayParamTest()2599     WantShortArrayParamTest()
2600     {
2601         want_ = nullptr;
2602     }
~WantShortArrayParamTest()2603     ~WantShortArrayParamTest()
2604     {
2605         want_ = nullptr;
2606     }
2607     static void SetUpTestCase(void);
2608     static void TearDownTestCase(void);
2609     void SetUp();
2610     void TearDown();
2611     std::shared_ptr<Want> want_;
2612 };
2613 
SetUpTestCase(void)2614 void WantShortArrayParamTest::SetUpTestCase(void)
2615 {}
2616 
TearDownTestCase(void)2617 void WantShortArrayParamTest::TearDownTestCase(void)
2618 {}
2619 
SetUp(void)2620 void WantShortArrayParamTest::SetUp(void)
2621 {
2622     want_ = std::make_shared<Want>();
2623 }
2624 
TearDown(void)2625 void WantShortArrayParamTest::TearDown(void)
2626 {}
2627 
2628 /**
2629  * @tc.number: AaFwk_Want_ShortArray_0100
2630  * @tc.name:  SetParam/GetShortArrayParam
2631  * @tc.desc: Verify when parameter change.
2632  */
2633 HWTEST_P(WantShortArrayParamTest, AaFwk_Want_ShortArray_0100, Function | MediumTest | Level1)
2634 {
2635     std::string setKey = std::get<0>(GetParam());
2636     std::string getKey = std::get<1>(GetParam());
2637     std::vector<short> setValue = std::get<2>(GetParam());
2638     std::vector<short> defaultValue = std::get<3>(GetParam());
2639     std::vector<short> result = std::get<4>(GetParam());
2640     want_->SetParam(setKey, setValue);
2641     EXPECT_EQ(result, want_->GetShortArrayParam(getKey));
2642 }
2643 
2644 INSTANTIATE_TEST_SUITE_P(WantShortArrayParamTestCaseP, WantShortArrayParamTest,
2645     testing::Values(testShortArrayType("", "aa", {-1, 3, 25, -9}, {}, {}),
2646         testShortArrayType("", "", {-41, 0, 0, 9}, {}, {-41, 0, 0, 9}),
2647         testShortArrayType("1*中_aR", "aa", {50, 2, -9}, {}, {}),
2648         testShortArrayType("1*中_aR", "1*中_aR", {-5000}, {}, {-5000})));
2649 
2650 /**
2651  * @tc.number: AaFwk_Want_ShortArray_0200
2652  * @tc.name:  SetParam/GetShortArrayParam
2653  * @tc.desc: Verify when the value is short array
2654  */
2655 HWTEST_F(WantShortArrayParamTest, AaFwk_Want_ShortArray_0200, Function | MediumTest | Level1)
2656 {
2657     std::vector<short> defaultValue;
2658     std::string getKey("aa");
2659     EXPECT_EQ(defaultValue, want_->GetShortArrayParam(getKey));
2660 }
2661 
2662 /**
2663  * @tc.number: AaFwk_Want_ShortArray_0300
2664  * @tc.name:  SetParam/GetShortArrayParam
2665  * @tc.desc: Verify when the value is short array
2666  */
2667 HWTEST_F(WantShortArrayParamTest, AaFwk_Want_ShortArray_0300, Function | MediumTest | Level1)
2668 {
2669     std::string emptyStr("hh");
2670     std::vector<short> firstValue({1, 4, -9});
2671     std::vector<short> secondValue({1, 8, -9});
2672     std::vector<short> thirdValue({1, 4, 9});
2673     std::string keyStr("aa");
2674     want_->SetParam(emptyStr, firstValue);
2675     want_->SetParam(emptyStr, firstValue);
2676     want_->SetParam(emptyStr, secondValue);
2677     std::vector<short> defaultValue;
2678     EXPECT_EQ(defaultValue, want_->GetShortArrayParam(keyStr));
2679     want_->SetParam(emptyStr, thirdValue);
2680     EXPECT_EQ(thirdValue, want_->GetShortArrayParam(emptyStr));
2681 }
2682 
2683 /**
2684  * @tc.number: AaFwk_Want_ShortArray_0400
2685  * @tc.name:  SetParam/GetShortArrayParam
2686  * @tc.desc: Verify when the value is short array
2687  */
2688 HWTEST_F(WantShortArrayParamTest, AaFwk_Want_ShortArray_0400, Function | MediumTest | Level1)
2689 {
2690     std::string firstKey("%1uH3");
2691     std::vector<short> firstValue({-1, -2});
2692     std::vector<short> secondValue({-1, -2, -1, -2, 0});
2693     std::vector<short> thirdValue({-1, -2, 100});
2694     std::string secondKey("aa");
2695     want_->SetParam(firstKey, firstValue);
2696     want_->SetParam(firstKey, firstValue);
2697     want_->SetParam(firstKey, secondValue);
2698     EXPECT_EQ(secondValue, want_->GetShortArrayParam(firstKey));
2699     want_->SetParam(firstKey, thirdValue);
2700     std::vector<short> defaultValue;
2701     EXPECT_EQ(defaultValue, want_->GetShortArrayParam(secondKey));
2702 }
2703 
2704 using testShortType = std::tuple<std::string, std::string, short, short, short>;
2705 class WantShortParamTest : public testing::TestWithParam<testShortType> {
2706 public:
WantShortParamTest()2707     WantShortParamTest()
2708     {
2709         want_ = nullptr;
2710     }
~WantShortParamTest()2711     ~WantShortParamTest()
2712     {}
2713     static void SetUpTestCase(void);
2714     static void TearDownTestCase(void);
2715     void SetUp();
2716     void TearDown();
2717     std::shared_ptr<Want> want_;
2718 };
2719 
SetUpTestCase(void)2720 void WantShortParamTest::SetUpTestCase(void)
2721 {}
2722 
TearDownTestCase(void)2723 void WantShortParamTest::TearDownTestCase(void)
2724 {}
2725 
SetUp(void)2726 void WantShortParamTest::SetUp(void)
2727 {
2728     want_ = std::make_shared<Want>();
2729 }
2730 
TearDown(void)2731 void WantShortParamTest::TearDown(void)
2732 {}
2733 
2734 /**
2735  * @tc.number: AaFwk_Want_Short_0100
2736  * @tc.name:  SetParam/GetShortParam
2737  * @tc.desc: Verify when parameter change.
2738  */
2739 HWTEST_P(WantShortParamTest, AaFwk_Want_Short_0100, Function | MediumTest | Level1)
2740 {
2741     std::string setKey = std::get<0>(GetParam());
2742     std::string getKey = std::get<1>(GetParam());
2743     short setValue = std::get<2>(GetParam());
2744     short defaultValue = std::get<3>(GetParam());
2745     short result = std::get<4>(GetParam());
2746     want_->SetParam(setKey, setValue);
2747     EXPECT_EQ(result, want_->GetShortParam(getKey, defaultValue));
2748 }
2749 
2750 INSTANTIATE_TEST_SUITE_P(WantShortParamTestCaseP, WantShortParamTest,
2751     testing::Values(testShortType("", "aa", -1, 100, 100), testShortType("", "", -9, -41, -9),
2752         testShortType("1*中_aR", "aa", 50, 5, 5), testShortType("1*中_aR", "1*中_aR", -5000, 5000, -5000)));
2753 
2754 /**
2755  * @tc.number: AaFwk_Want_Short_0200
2756  * @tc.name:  SetParam/GetShortParam
2757  * @tc.desc: Verify when the value is short
2758  */
2759 HWTEST_F(WantShortParamTest, AaFwk_Want_Short_0200, Function | MediumTest | Level1)
2760 {
2761     short defaultValue = 200;
2762     std::string getKey("aa");
2763     EXPECT_EQ(defaultValue, want_->GetShortParam(getKey, defaultValue));
2764 }
2765 /**
2766  * @tc.number: AaFwk_Want_Short_0300
2767  * @tc.name:  SetParam/GetShortParam
2768  * @tc.desc: Verify when the value is short
2769  */
2770 HWTEST_F(WantShortParamTest, AaFwk_Want_Short_0300, Function | MediumTest | Level1)
2771 {
2772     std::string emptyStr("bb");
2773     short firstValue = 1;
2774     short secondValue = 2;
2775     short thirdValue = 4;
2776     short firstDefaultValue = 3;
2777     short secondDefaultValue = 5;
2778     std::string keyStr("aa");
2779     want_->SetParam(emptyStr, firstValue);
2780     want_->SetParam(emptyStr, firstValue);
2781     want_->SetParam(emptyStr, secondValue);
2782     EXPECT_EQ(firstDefaultValue, want_->GetShortParam(keyStr, firstDefaultValue));
2783     want_->SetParam(emptyStr, thirdValue);
2784     EXPECT_EQ(thirdValue, want_->GetShortParam(emptyStr, secondDefaultValue));
2785 }
2786 
2787 /**
2788  * @tc.number: AaFwk_Want_Short_0400
2789  * @tc.name:  SetParam/GetShortParam
2790  * @tc.desc: Verify when the value is short
2791  */
2792 HWTEST_F(WantShortParamTest, AaFwk_Want_Short_0400, Function | MediumTest | Level1)
2793 {
2794     std::string firstKey("%1uH3");
2795     short firstValue = -1;
2796     short secondValue = 0;
2797     short thirdValue = 4;
2798     short firstDefaultValue = 9;
2799     short secondDefaultValue = -10;
2800     std::string secondKey("aa");
2801     want_->SetParam(firstKey, firstValue);
2802     want_->SetParam(firstKey, firstValue);
2803     want_->SetParam(firstKey, secondValue);
2804     EXPECT_EQ(secondValue, want_->GetShortParam(firstKey, firstDefaultValue));
2805     want_->SetParam(firstKey, thirdValue);
2806     EXPECT_EQ(secondDefaultValue, want_->GetShortParam(secondKey, secondDefaultValue));
2807 }
2808 
2809 using testStrArrayType =
2810     std::tuple<std::string, std::string, std::vector<std::string>, std::vector<std::string>, std::vector<std::string>>;
2811 class WantStringArrayParamTest : public testing::TestWithParam<testStrArrayType> {
2812 public:
WantStringArrayParamTest()2813     WantStringArrayParamTest()
2814     {
2815         want_ = nullptr;
2816     }
~WantStringArrayParamTest()2817     ~WantStringArrayParamTest()
2818     {}
2819     static void SetUpTestCase(void);
2820     static void TearDownTestCase(void);
2821     void SetUp();
2822     void TearDown();
2823     std::shared_ptr<Want> want_ = nullptr;
2824 };
2825 
SetUpTestCase(void)2826 void WantStringArrayParamTest::SetUpTestCase(void)
2827 {}
2828 
TearDownTestCase(void)2829 void WantStringArrayParamTest::TearDownTestCase(void)
2830 {}
2831 
SetUp(void)2832 void WantStringArrayParamTest::SetUp(void)
2833 {
2834     want_ = std::make_shared<Want>();
2835 }
2836 
TearDown(void)2837 void WantStringArrayParamTest::TearDown(void)
2838 {}
2839 
2840 /**
2841  * @tc.number: AaFwk_Want_StringArray_0100
2842  * @tc.name:  SetParam/GetStringArrayParam
2843  * @tc.desc: Verify when parameter change.
2844  */
2845 HWTEST_P(WantStringArrayParamTest, AaFwk_Want_StringArray_0100, Function | MediumTest | Level1)
2846 {
2847     std::string setKey = std::get<0>(GetParam());
2848     std::string getKey = std::get<1>(GetParam());
2849     std::vector<std::string> setValue = std::get<2>(GetParam());
2850     std::vector<std::string> defaultValue = std::get<3>(GetParam());
2851     std::vector<std::string> result = std::get<4>(GetParam());
2852     want_->SetParam(setKey, setValue);
2853     EXPECT_EQ(result, want_->GetStringArrayParam(getKey));
2854 }
2855 
2856 INSTANTIATE_TEST_SUITE_P(WantStringArrayParamTestCaseP, WantStringArrayParamTest,
2857     testing::Values(testStrArrayType("", "aa", {"1*中_aR", "dbdb"}, {}, {}),
2858         testStrArrayType("", "", {"1*中_aR", "dbdb"}, {}, {"1*中_aR", "dbdb"}),
2859         testStrArrayType("1*中_aR", "aa", {"1*中_aR", "dbdb"}, {}, {}),
2860         testStrArrayType("1*中_aR", "1*中_aR", {"1*中_aR", "dbdb"}, {}, {"1*中_aR", "dbdb"})));
2861 
2862 /**
2863  * @tc.number: AaFwk_Want_StringArray_0200
2864  * @tc.name:  SetParam/GetStringArrayParam
2865  * @tc.desc: get param when WantParam is empty
2866  */
2867 HWTEST_F(WantStringArrayParamTest, AaFwk_Want_StringArray_0200, Function | MediumTest | Level1)
2868 {
2869     std::vector<std::string> defaultValue;
2870     std::string key = "aa";
2871     std::vector<std::string> resultValue = want_->GetStringArrayParam(key);
2872     EXPECT_EQ(defaultValue, resultValue);
2873 }
2874 
2875 /**
2876  * @tc.number: AaFwk_Want_StringArray_0300
2877  * @tc.name:  SetParam/GetStringArrayParam
2878  * @tc.desc: set empty-string key repeatedly, but get param of another nonexistent key
2879  */
2880 HWTEST_F(WantStringArrayParamTest, AaFwk_Want_StringArray_0300, Function | MediumTest | Level1)
2881 {
2882     std::vector<std::string> defaultValue;
2883     std::vector<std::string> setValue1 = {"aaa", "2132"};
2884     std::vector<std::string> setValue2 = {"1*中_aR", "dbdb"};
2885     std::string key1 = "cc";
2886     std::string key2 = "aa";
2887     want_->SetParam(key1, setValue1);
2888     want_->SetParam(key1, setValue1);
2889     want_->SetParam(key1, setValue2);
2890     std::vector<std::string> resultValue = want_->GetStringArrayParam(key2);
2891     EXPECT_EQ(defaultValue, resultValue);
2892 
2893     want_->SetParam(key1, setValue1);
2894     resultValue = want_->GetStringArrayParam(key1);
2895     EXPECT_EQ(setValue1, resultValue);
2896 }
2897 
2898 /**
2899  * @tc.number: AaFwk_Want_StringArray_0400
2900  * @tc.name:  SetParam/GetStringArrayParam
2901  * @tc.desc: set empty-string key repeatedly, then get param of the key
2902  */
2903 HWTEST_F(WantStringArrayParamTest, AaFwk_Want_StringArray_0400, Function | MediumTest | Level1)
2904 {
2905     std::vector<std::string> defaultValue;
2906     std::vector<std::string> setValue = {"aaa", "2132"};
2907     std::string key1 = "%1uH3";
2908     std::string key2 = "aa";
2909     want_->SetParam(key1, setValue);
2910     want_->SetParam(key1, setValue);
2911     setValue = {"1*中_aR", "3#$%"};
2912     want_->SetParam(key1, setValue);
2913     std::vector<std::string> resultValue = want_->GetStringArrayParam(key1);
2914     EXPECT_EQ(setValue, resultValue);
2915 
2916     setValue = {"aaa", "2132"};
2917     want_->SetParam(key1, setValue);
2918     resultValue = want_->GetStringArrayParam(key2);
2919     EXPECT_EQ(defaultValue, resultValue);
2920 }
2921 
2922 using testStrType = std::tuple<std::string, std::string, std::string, std::string, std::string>;
2923 class WantStringParamTest : public testing::TestWithParam<testStrType> {
2924 public:
WantStringParamTest()2925     WantStringParamTest()
2926     {
2927         want_ = nullptr;
2928     }
~WantStringParamTest()2929     ~WantStringParamTest()
2930     {}
2931     static void SetUpTestCase(void);
2932     static void TearDownTestCase(void);
2933     void SetUp();
2934     void TearDown();
2935     std::shared_ptr<Want> want_;
2936 };
2937 
SetUpTestCase(void)2938 void WantStringParamTest::SetUpTestCase(void)
2939 {}
2940 
TearDownTestCase(void)2941 void WantStringParamTest::TearDownTestCase(void)
2942 {}
2943 
SetUp(void)2944 void WantStringParamTest::SetUp(void)
2945 {
2946     want_ = std::make_shared<Want>();
2947 }
2948 
TearDown(void)2949 void WantStringParamTest::TearDown(void)
2950 {}
2951 
2952 /**
2953  * @tc.number: AaFwk_Want_String_0100
2954  * @tc.name:  SetParam/GetStringParam
2955  * @tc.desc: Verify when parameter change.
2956  */
2957 HWTEST_P(WantStringParamTest, AaFwk_Want_String_0100, Function | MediumTest | Level1)
2958 {
2959     std::string setKey = std::get<0>(GetParam());
2960     std::string getKey = std::get<1>(GetParam());
2961     std::string setValue = std::get<2>(GetParam());
2962     std::string defaultValue = std::get<3>(GetParam());
2963     std::string result = std::get<4>(GetParam());
2964     want_->SetParam(setKey, setValue);
2965     EXPECT_EQ(result, want_->GetStringParam(getKey));
2966 }
2967 
2968 INSTANTIATE_TEST_SUITE_P(WantStringParamTestCaseP, WantStringParamTest,
2969     testing::Values(testStrType("", "aa", "1*中_aR", "", ""), testStrType("", "", "1*中_aR", "", "1*中_aR"),
2970         testStrType("1*中_aR", "aa", "aaa", "", ""), testStrType("1*中_aR", "1*中_aR", "aaa", "", "aaa")));
2971 
2972 /**
2973  * @tc.number: AaFwk_Want_String_0200
2974  * @tc.name:  SetParam/GetStringParam
2975  * @tc.desc: get param when WantParam is empty.
2976  */
2977 HWTEST_F(WantStringParamTest, AaFwk_Want_String_0200, Function | MediumTest | Level1)
2978 {
2979     std::string defaultStrValue;
2980     std::string key = "aa";
2981     EXPECT_EQ(defaultStrValue, want_->GetStringParam(key));
2982 }
2983 
2984 /**
2985  * @tc.number: AaFwk_Want_String_0300
2986  * @tc.name:  SetParam/GetStringParam
2987  * @tc.desc: set empty-string key repeatedly, but get param of another nonexistent key.
2988  */
2989 HWTEST_F(WantStringParamTest, AaFwk_Want_String_0300, Function | MediumTest | Level1)
2990 {
2991     std::string defaultStrValue;
2992     std::string setValue1 = "aaa";
2993     std::string setValue2 = "1*中_aR";
2994     std::string key1 = "dd";
2995     std::string key2 = "aa";
2996     want_->SetParam(key1, setValue1);
2997     want_->SetParam(key1, setValue1);
2998     want_->SetParam(key1, setValue2);
2999     EXPECT_EQ(defaultStrValue, want_->GetStringParam(key2));
3000     want_->SetParam(key1, setValue1);
3001     EXPECT_EQ(setValue1, want_->GetStringParam(key1));
3002 }
3003 
3004 /**
3005  * @tc.number: AaFwk_Want_String_0400
3006  * @tc.name:  SetParam/GetStringParam
3007  * @tc.desc: set empty-string key repeatedly, then get param of the key.
3008  */
3009 HWTEST_F(WantStringParamTest, AaFwk_Want_String_0400, Function | MediumTest | Level1)
3010 {
3011     std::string key1 = "%1uH3";
3012     std::string defaultStrValue;
3013     std::string setValue1 = "aaa";
3014     std::string setValue2 = "1*中_aR";
3015     std::string key2 = "aa";
3016     want_->SetParam(key1, setValue1);
3017     want_->SetParam(key1, setValue1);
3018     want_->SetParam(key1, setValue2);
3019     EXPECT_EQ("1*中_aR", want_->GetStringParam(key1));
3020     want_->SetParam(key1, setValue1);
3021     EXPECT_EQ(defaultStrValue, want_->GetStringParam(key2));
3022 }
3023 
3024 using testLongType = std::tuple<std::string, std::string, long, long, long>;
3025 class WantLongParamTest : public testing::TestWithParam<testLongType> {
3026 public:
WantLongParamTest()3027     WantLongParamTest()
3028     {
3029         want_ = nullptr;
3030     }
~WantLongParamTest()3031     ~WantLongParamTest()
3032     {}
3033     static void SetUpTestCase(void);
3034     static void TearDownTestCase(void);
3035     void SetUp();
3036     void TearDown();
3037     std::shared_ptr<Want> want_ = nullptr;
3038 };
3039 
SetUpTestCase(void)3040 void WantLongParamTest::SetUpTestCase(void)
3041 {}
3042 
TearDownTestCase(void)3043 void WantLongParamTest::TearDownTestCase(void)
3044 {}
3045 
SetUp(void)3046 void WantLongParamTest::SetUp(void)
3047 {
3048     want_ = std::make_shared<Want>();
3049 }
3050 
TearDown(void)3051 void WantLongParamTest::TearDown(void)
3052 {}
3053 
3054 /**
3055  * @tc.number: AaFwk_Want_LongParam_0100
3056  * @tc.name:  SetParam/GetLongParam
3057  * @tc.desc: Verify when parameter change.
3058  */
3059 HWTEST_P(WantLongParamTest, AaFwk_Want_LongParam_0100, Function | MediumTest | Level1)
3060 {
3061     std::string setKey = std::get<0>(GetParam());
3062     std::string getKey = std::get<1>(GetParam());
3063     long setValue = std::get<2>(GetParam());
3064     long defaultValue = std::get<3>(GetParam());
3065     long result = std::get<4>(GetParam());
3066     want_->SetParam(setKey, setValue);
3067     EXPECT_EQ(result, want_->GetLongParam(getKey, defaultValue));
3068 }
3069 
3070 INSTANTIATE_TEST_SUITE_P(WantLongParamTestCaseP, WantLongParamTest,
3071     testing::Values(testLongType("b1", "b1", -1, 100, -1), testLongType("b3", "b4", 600, 200, 200),
3072         testLongType("b5", "b5", 50, 6, 50), testLongType("b6", "b7", 1000, 2200, 2200)));
3073 
3074 /**
3075  * @tc.number: AaFwk_Want_LongParam_0200
3076  * @tc.name:  SetParam/GetLongParam
3077  * @tc.desc:  get param when WantParam is empty.
3078  */
3079 HWTEST_F(WantLongParamTest, AaFwk_Want_LongParam_0200, Function | MediumTest | Level1)
3080 {
3081     long defaultValue = 100;
3082     std::string key = "aa";
3083     EXPECT_EQ(defaultValue, want_->GetLongParam(key, defaultValue));
3084 }
3085 
3086 /**
3087  * @tc.number: AaFwk_Want_LongParam_0300
3088  * @tc.name:  SetParam/GetLongParam
3089  * @tc.desc:  set empty-string key repeatedly, but get param of another nonexistent key.
3090  */
3091 HWTEST_F(WantLongParamTest, AaFwk_Want_LongParam_0300, Function | MediumTest | Level1)
3092 {
3093     std::string setKey1 = "dd";
3094     std::string setKey2 = "aa";
3095     long setValue1 = 1;
3096     long setValue2 = 5;
3097     want_->SetParam(setKey1, setValue1);
3098     want_->SetParam(setKey1, setValue1);
3099     setValue1 = 2;
3100     want_->SetParam(setKey1, setValue1);
3101     setValue1 = 3;
3102     EXPECT_EQ(setValue1, want_->GetLongParam(setKey2, setValue1));
3103     setValue1 = 4;
3104     want_->SetParam(setKey1, setValue1);
3105     EXPECT_EQ(setValue1, want_->GetLongParam(setKey1, setValue2));
3106 }
3107 
3108 /**
3109  * @tc.number: AaFwk_Want_LongParam_0400
3110  * @tc.name:  SetParam/GetLongParam
3111  * @tc.desc:  set empty-string key repeatedly, then get param of the key.
3112  */
3113 HWTEST_F(WantLongParamTest, AaFwk_Want_LongParam_0400, Function | MediumTest | Level1)
3114 {
3115     std::string setKey1 = "%1uH3";
3116     std::string setKey2 = "aa";
3117     long setValue1 = -1;
3118     long setValue2 = 9;
3119     want_->SetParam(setKey1, setValue1);
3120     want_->SetParam(setKey1, setValue1);
3121     setValue1 = 0;
3122     want_->SetParam(setKey1, setValue1);
3123     EXPECT_EQ(setValue1, want_->GetLongParam(setKey1, setValue2));
3124     setValue1 = 4;
3125     want_->SetParam(setKey1, setValue1);
3126     setValue1 = -10;
3127     EXPECT_EQ(setValue1, want_->GetLongParam(setKey2, setValue1));
3128 }
3129 
3130 using testIntType = std::tuple<std::string, std::string, int, int, int>;
3131 class WantIntParamTest : public testing::TestWithParam<testIntType> {
3132 public:
WantIntParamTest()3133     WantIntParamTest()
3134     {
3135         want_ = nullptr;
3136     }
~WantIntParamTest()3137     ~WantIntParamTest()
3138     {
3139         want_ = nullptr;
3140     }
3141     static void SetUpTestCase(void);
3142     static void TearDownTestCase(void);
3143     void SetUp();
3144     void TearDown();
3145     std::shared_ptr<Want> want_;
3146 };
3147 
SetUpTestCase(void)3148 void WantIntParamTest::SetUpTestCase(void)
3149 {}
3150 
TearDownTestCase(void)3151 void WantIntParamTest::TearDownTestCase(void)
3152 {}
3153 
SetUp(void)3154 void WantIntParamTest::SetUp(void)
3155 {
3156     want_ = std::make_shared<Want>();
3157 }
3158 
TearDown(void)3159 void WantIntParamTest::TearDown(void)
3160 {}
3161 
3162 /**
3163  * @tc.number: AaFwk_Want_IntParam_0100
3164  * @tc.name:  SetParam/GetIntParam
3165  * @tc.desc:  Verify when parameter change.
3166  */
3167 HWTEST_P(WantIntParamTest, AaFwk_Want_IntParam_0100, Function | MediumTest | Level1)
3168 {
3169     std::string setKey = std::get<0>(GetParam());
3170     std::string getKey = std::get<1>(GetParam());
3171     int setValue = std::get<2>(GetParam());
3172     int defaultValue = std::get<3>(GetParam());
3173     int result = std::get<4>(GetParam());
3174     want_->SetParam(setKey, setValue);
3175     EXPECT_EQ(result, want_->GetIntParam(getKey, defaultValue));
3176 }
3177 
3178 INSTANTIATE_TEST_SUITE_P(WantParametersIntTestCaseP, WantIntParamTest,
3179     testing::Values(testIntType("", "aa", -1, 100, 100), testIntType("", "", -9, -41, -9),
3180         testIntType("1*中_aR", "aa", 50, 5, 5), testIntType("1*中_aR", "1*中_aR", -5000, 5000, -5000)));
3181 
3182 /**
3183  * @tc.number: AaFwk_Want_IntParam_0200
3184  * @tc.name:  SetParam/GetIntParam
3185  * @tc.desc:  Verify when the value is integer.
3186  */
3187 HWTEST_F(WantIntParamTest, AaFwk_Want_IntParam_0200, Function | MediumTest | Level1)
3188 {
3189     int defaultValue = 200;
3190     std::string getKey("aa");
3191     EXPECT_EQ(defaultValue, want_->GetIntParam(getKey, defaultValue));
3192 }
3193 
3194 /**
3195  * @tc.number: AaFwk_Want_IntParam_0300
3196  * @tc.name:  SetParam/GetIntParam
3197  * @tc.desc:  Verify when the value is integer.
3198  */
3199 HWTEST_F(WantIntParamTest, AaFwk_Want_IntParam_0300, Function | MediumTest | Level1)
3200 {
3201     std::string emptyStr("bb");
3202     int firstValue = 1;
3203     int secondValue = 2;
3204     int thirdValue = 4;
3205     int firstDefaultValue = 3;
3206     int secondDefaultValue = 5;
3207     std::string keyStr("aa");
3208     want_->SetParam(emptyStr, firstValue);
3209     want_->SetParam(emptyStr, firstValue);
3210     want_->SetParam(emptyStr, secondValue);
3211     EXPECT_EQ(firstDefaultValue, want_->GetIntParam(keyStr, firstDefaultValue));
3212     want_->SetParam(emptyStr, thirdValue);
3213     EXPECT_EQ(thirdValue, want_->GetIntParam(emptyStr, secondDefaultValue));
3214 }
3215 
3216 /**
3217  * @tc.number: AaFwk_Want_IntParam_0400
3218  * @tc.name:  SetParam/GetIntParam
3219  * @tc.desc:  Verify when the value is integer.
3220  */
3221 HWTEST_F(WantIntParamTest, AaFwk_Want_IntParam_0400, Function | MediumTest | Level1)
3222 {
3223     std::string firstKey("%1uH3");
3224     int firstValue = -1;
3225     int secondValue = 0;
3226     int thirdValue = 4;
3227     int firstDefaultValue = 9;
3228     int secondDefaultValue = -10;
3229     std::string secondKey("aa");
3230     want_->SetParam(firstKey, firstValue);
3231     want_->SetParam(firstKey, firstValue);
3232     want_->SetParam(firstKey, secondValue);
3233     EXPECT_EQ(secondValue, want_->GetIntParam(firstKey, firstDefaultValue));
3234     want_->SetParam(firstKey, thirdValue);
3235     EXPECT_EQ(secondDefaultValue, want_->GetIntParam(secondKey, secondDefaultValue));
3236 }
3237 
3238 using testIntArrayType = std::tuple<std::string, std::string, std::vector<int>, std::vector<int>, std::vector<int>>;
3239 class WantIntArrayParamTest : public testing::TestWithParam<testIntArrayType> {
3240 public:
WantIntArrayParamTest()3241     WantIntArrayParamTest()
3242     {
3243         want_ = nullptr;
3244     }
~WantIntArrayParamTest()3245     ~WantIntArrayParamTest()
3246     {
3247         want_ = nullptr;
3248     }
3249     static void SetUpTestCase(void);
3250     static void TearDownTestCase(void);
3251     void SetUp();
3252     void TearDown();
3253     std::shared_ptr<Want> want_;
3254 };
3255 
SetUpTestCase(void)3256 void WantIntArrayParamTest::SetUpTestCase(void)
3257 {}
3258 
TearDownTestCase(void)3259 void WantIntArrayParamTest::TearDownTestCase(void)
3260 {}
3261 
SetUp(void)3262 void WantIntArrayParamTest::SetUp(void)
3263 {
3264     want_ = std::make_shared<Want>();
3265 }
3266 
TearDown(void)3267 void WantIntArrayParamTest::TearDown(void)
3268 {}
3269 
3270 /**
3271  * @tc.number: AaFwk_Want_IntArrayParam_0100
3272  * @tc.name:  SetParam/GetIntArrayParam
3273  * @tc.desc:  Verify when parameter change.
3274  */
3275 HWTEST_P(WantIntArrayParamTest, AaFwk_Want_IntArrayParam_0100, Function | MediumTest | Level1)
3276 {
3277     std::string setKey = std::get<0>(GetParam());
3278     std::string getKey = std::get<1>(GetParam());
3279     std::vector<int> setValue = std::get<2>(GetParam());
3280     std::vector<int> defaultValue = std::get<3>(GetParam());
3281     std::vector<int> result = std::get<4>(GetParam());
3282     want_->SetParam(setKey, setValue);
3283     EXPECT_EQ(result, want_->GetIntArrayParam(getKey));
3284 }
3285 
3286 INSTANTIATE_TEST_SUITE_P(WantIntArrayParamTestCaseP, WantIntArrayParamTest,
3287     testing::Values(testIntArrayType("", "aa", {-1, 3, 25, -9}, {}, {}),
3288         testIntArrayType("", "", {-41, 0, 0, 9}, {}, {-41, 0, 0, 9}),
3289         testIntArrayType("1*中_aR", "aa", {50, 2, -9}, {}, {}),
3290         testIntArrayType("1*中_aR", "1*中_aR", {-5000}, {}, {-5000})));
3291 
3292 /**
3293  * @tc.number: AaFwk_Want_IntArrayParam_0200
3294  * @tc.name:  SetParam/GetIntArrayParam
3295  * @tc.desc:  Verify when the value is integer array.
3296  */
3297 HWTEST_F(WantIntArrayParamTest, AaFwk_Want_IntArrayParam_0200, Function | MediumTest | Level1)
3298 {
3299     std::vector<int> defaultValue;
3300     std::string getKey("aa");
3301     EXPECT_EQ(defaultValue, want_->GetIntArrayParam(getKey));
3302 }
3303 
3304 /**
3305  * @tc.number: AaFwk_Want_IntArrayParam_0300
3306  * @tc.name:  SetParam/GetIntArrayParam
3307  * @tc.desc:  Verify when the value is integer array.
3308  */
3309 HWTEST_F(WantIntArrayParamTest, AaFwk_Want_IntArrayParam_0300, Function | MediumTest | Level1)
3310 {
3311     std::string emptyStr("cc");
3312     std::vector<int> firstValue({1, 4, -9});
3313     std::vector<int> secondValue({1, 8, -9});
3314     std::vector<int> thirdValue({1, 4, 9});
3315     std::string keyStr("aa");
3316     want_->SetParam(emptyStr, firstValue);
3317     want_->SetParam(emptyStr, firstValue);
3318     want_->SetParam(emptyStr, secondValue);
3319     std::vector<int> defaultValue;
3320     EXPECT_EQ(defaultValue, want_->GetIntArrayParam(keyStr));
3321     want_->SetParam(emptyStr, thirdValue);
3322     EXPECT_EQ(thirdValue, want_->GetIntArrayParam(emptyStr));
3323 }
3324 
3325 /**
3326  * @tc.number: AaFwk_Want_IntArrayParam_0400
3327  * @tc.name:  SetParam/GetIntArrayParam
3328  * @tc.desc:  Verify when the value is integer array.
3329  */
3330 HWTEST_F(WantIntArrayParamTest, AaFwk_Want_IntArrayParam_0400, Function | MediumTest | Level1)
3331 {
3332     std::string firstKey("%1uH3");
3333     std::vector<int> firstValue({-1, -2});
3334     std::vector<int> secondValue({-1, -2, -1, -2, 0});
3335     std::vector<int> thirdValue({-1, -2, 100});
3336     std::string secondKey("aa");
3337     want_->SetParam(firstKey, firstValue);
3338     want_->SetParam(firstKey, firstValue);
3339     want_->SetParam(firstKey, secondValue);
3340     EXPECT_EQ(secondValue, want_->GetIntArrayParam(firstKey));
3341     want_->SetParam(firstKey, thirdValue);
3342     std::vector<int> defaultValue;
3343     EXPECT_EQ(defaultValue, want_->GetIntArrayParam(secondKey));
3344 }
3345 
3346 using testFloatType = std::tuple<std::string, std::string, float, float, float>;
3347 class WantFloatParamTest : public testing::TestWithParam<testFloatType> {
3348 public:
WantFloatParamTest()3349     WantFloatParamTest()
3350     {
3351         want_ = nullptr;
3352     }
~WantFloatParamTest()3353     ~WantFloatParamTest()
3354     {
3355         want_ = nullptr;
3356     }
3357 
3358     static void SetUpTestCase(void);
3359     static void TearDownTestCase(void);
3360     void SetUp();
3361     void TearDown();
3362     std::shared_ptr<Want> want_;
3363 };
3364 
SetUpTestCase(void)3365 void WantFloatParamTest::SetUpTestCase(void)
3366 {}
3367 
TearDownTestCase(void)3368 void WantFloatParamTest::TearDownTestCase(void)
3369 {}
3370 
SetUp(void)3371 void WantFloatParamTest::SetUp(void)
3372 {
3373     want_ = std::make_shared<Want>();
3374 }
3375 
TearDown(void)3376 void WantFloatParamTest::TearDown(void)
3377 {}
3378 
3379 /**
3380  * @tc.number: AaFwk_Want_FloatParam_0100
3381  * @tc.name:  SetParam/GetFloatParam
3382  * @tc.desc:  Verify when parameter change.
3383  */
3384 HWTEST_P(WantFloatParamTest, AaFwk_Want_FloatParam_0100, Function | MediumTest | Level1)
3385 {
3386     std::string setKey = std::get<0>(GetParam());
3387     std::string getKey = std::get<1>(GetParam());
3388     float setValue = std::get<2>(GetParam());
3389     float defaultValue = std::get<3>(GetParam());
3390     float result = std::get<4>(GetParam());
3391     want_->SetParam(setKey, setValue);
3392     EXPECT_EQ(result, want_->GetFloatParam(getKey, defaultValue));
3393 }
3394 
3395 INSTANTIATE_TEST_SUITE_P(WantFloatParamTestCaseP, WantFloatParamTest,
3396     testing::Values(testFloatType("", "aa", -1.1, 100.1, 100.1), testFloatType("", "", -9.1, -41.1, -9.1),
3397         testFloatType("1*中_aR", "aa", 50.1, 5.1, 5.1), testFloatType("1*中_aR", "1*中_aR", -5000.1, 5000.1, -5000.1)));
3398 
3399 /**
3400  * @tc.number: AaFwk_Want_FloatParam_0200
3401  * @tc.name:  SetParam/GetFloatParam
3402  * @tc.desc:  get param when WantParam is empty.
3403  */
3404 HWTEST_F(WantFloatParamTest, AaFwk_Want_FloatParam_0200, Function | MediumTest | Level1)
3405 {
3406     float defaultValue = 100.1;
3407     std::string key = "aa";
3408     EXPECT_EQ(defaultValue, want_->GetFloatParam(key, defaultValue));
3409 }
3410 
3411 /**
3412  * @tc.number: AaFwk_Want_FloatParam_0300
3413  * @tc.name:  SetParam/GetFloatParam
3414  * @tc.desc:  set empty-string key repeatedly, but get param of another nonexistent key.
3415  */
3416 HWTEST_F(WantFloatParamTest, AaFwk_Want_FloatParam_0300, Function | MediumTest | Level1)
3417 {
3418     std::string setKey1 = "ee";
3419     std::string setKey2 = "aa";
3420     float setValue1 = 1.1;
3421     float setValue2 = 5.1;
3422     want_->SetParam(setKey1, setValue1);
3423     want_->SetParam(setKey1, setValue1);
3424     setValue1 = 2.1;
3425     want_->SetParam(setKey1, setValue1);
3426     setValue1 = 3.1;
3427     EXPECT_EQ(setValue1, want_->GetFloatParam(setKey2, setValue1));
3428     setValue1 = 4.1;
3429     want_->SetParam(setKey1, setValue1);
3430     EXPECT_EQ(setValue1, want_->GetFloatParam(setKey1, setValue2));
3431 }
3432 
3433 /**
3434  * @tc.number: AaFwk_Want_FloatParam_0400
3435  * @tc.name:  SetParam/GetFloatParam
3436  * @tc.desc:  set empty-string key repeatedly, but get param of another nonexistent key.
3437  */
3438 HWTEST_F(WantFloatParamTest, AaFwk_Want_FloatParam_0400, Function | MediumTest | Level1)
3439 {
3440     std::string setKey1 = "%1uH3";
3441     std::string setKey2 = "aa";
3442     float setValue1 = -1.1;
3443     float setValue2 = 9.1;
3444     want_->SetParam(setKey1, setValue1);
3445     want_->SetParam(setKey1, setValue1);
3446     setValue1 = 0.1;
3447     want_->SetParam(setKey1, setValue1);
3448     EXPECT_EQ(setValue1, want_->GetFloatParam(setKey1, setValue2));
3449     setValue1 = 4.1;
3450     want_->SetParam(setKey1, setValue1);
3451     setValue1 = -10.1;
3452     EXPECT_EQ(setValue1, want_->GetFloatParam(setKey2, setValue1));
3453 }
3454 
3455 using testDoubleType = std::tuple<std::string, std::string, double, double, double>;
3456 class WantDoubleParamTest : public testing::TestWithParam<testDoubleType> {
3457 public:
WantDoubleParamTest()3458     WantDoubleParamTest()
3459     {
3460         want_ = nullptr;
3461     }
~WantDoubleParamTest()3462     ~WantDoubleParamTest()
3463     {
3464         want_ = nullptr;
3465     }
3466     static void SetUpTestCase(void);
3467     static void TearDownTestCase(void);
3468     void SetUp();
3469     void TearDown();
3470     std::shared_ptr<Want> want_;
3471 };
3472 
SetUpTestCase(void)3473 void WantDoubleParamTest::SetUpTestCase(void)
3474 {}
3475 
TearDownTestCase(void)3476 void WantDoubleParamTest::TearDownTestCase(void)
3477 {}
3478 
SetUp(void)3479 void WantDoubleParamTest::SetUp(void)
3480 {
3481     want_ = std::make_shared<Want>();
3482 }
3483 
TearDown(void)3484 void WantDoubleParamTest::TearDown(void)
3485 {}
3486 
3487 /**
3488  * @tc.number: AaFwk_Want_DoubleParam_0100
3489  * @tc.name:  SetParam/GetDoubleParam
3490  * @tc.desc:  Verify when parameter change.
3491  */
3492 HWTEST_P(WantDoubleParamTest, AaFwk_Want_DoubleParam_0100, Function | MediumTest | Level1)
3493 {
3494     std::string setKey = std::get<0>(GetParam());
3495     std::string getKey = std::get<1>(GetParam());
3496     double setValue = std::get<2>(GetParam());
3497     double defaultValue = std::get<3>(GetParam());
3498     double result = std::get<4>(GetParam());
3499     want_->SetParam(setKey, setValue);
3500     EXPECT_EQ(result, want_->GetDoubleParam(getKey, defaultValue));
3501 }
3502 
3503 INSTANTIATE_TEST_SUITE_P(WantDoubleParamTestCaseP, WantDoubleParamTest,
3504     testing::Values(testDoubleType("", "aa", -1.1, 100.1, 100.1), testDoubleType("", "", -9.1, -41.1, -9.1),
3505         testDoubleType("1*中_aR", "aa", 50.1, 5.1, 5.1),
3506         testDoubleType("1*中_aR", "1*中_aR", -5000.1, 5000.1, -5000.1)));
3507 
3508 /**
3509  * @tc.number: AaFwk_Want_DoubleParam_0300
3510  * @tc.name:  SetParam & GetDoubleParam
3511  * @tc.desc:  set empty-string key repeatedly, but get param of another nonexistent key.
3512  */
3513 HWTEST_F(WantDoubleParamTest, AaFwk_Want_DoubleParam_0300, Function | MediumTest | Level1)
3514 {
3515     double defaultValue = 100.1;
3516     std::string key = "aa";
3517     EXPECT_EQ(defaultValue, want_->GetDoubleParam(key, defaultValue));
3518 }
3519 
3520 /**
3521  * @tc.number: AaFwk_Want_DoubleParam_0400
3522  * @tc.name:  SetParam & GetDoubleParam
3523  * @tc.desc:  set empty-string key repeatedly, then get param of the key.
3524  */
3525 HWTEST_F(WantDoubleParamTest, AaFwk_Want_DoubleParam_0400, Function | MediumTest | Level1)
3526 {
3527     std::string setKey1 = "ff";
3528     std::string setKey2 = "aa";
3529     double setValue1 = 1.1;
3530     double setValue2 = 5.1;
3531     want_->SetParam(setKey1, setValue1);
3532     want_->SetParam(setKey1, setValue1);
3533     setValue1 = 2.1;
3534     want_->SetParam(setKey1, setValue1);
3535     setValue1 = 3.1;
3536     EXPECT_EQ(setValue1, want_->GetDoubleParam(setKey2, setValue1));
3537     setValue1 = 4.1;
3538     want_->SetParam(setKey1, setValue1);
3539     EXPECT_EQ(setValue1, want_->GetDoubleParam(setKey1, setValue2));
3540 }
3541 
3542 /**
3543  * @tc.number: AaFwk_Want_ByteArray_0100
3544  * @tc.name:  SetParam/GetByteArrayParam
3545  * @tc.desc:  Verify when parameter change.
3546  */
3547 HWTEST_F(WantDoubleParamTest, AaFwk_Want_ByteArray_0100, Function | MediumTest | Level1)
3548 {
3549     std::string setKey1 = "%1uH3";
3550     std::string setKey2 = "aa";
3551     double setValue1 = -1.1;
3552     double setValue2 = 9.1;
3553     want_->SetParam(setKey1, setValue1);
3554     want_->SetParam(setKey1, setValue1);
3555     setValue1 = 0.1;
3556     want_->SetParam(setKey1, setValue1);
3557     EXPECT_EQ(setValue1, want_->GetDoubleParam(setKey1, setValue2));
3558     setValue1 = 4.1;
3559     want_->SetParam(setKey1, setValue1);
3560     setValue1 = -10.1;
3561     EXPECT_EQ(setValue1, want_->GetDoubleParam(setKey2, setValue1));
3562 }
3563 
3564 using testByteArrayType = std::tuple<std::string, std::string, std::vector<byte>, std::vector<byte>, std::vector<byte>>;
3565 class WantByteArrayParamTest : public testing::TestWithParam<testByteArrayType> {
3566 public:
WantByteArrayParamTest()3567     WantByteArrayParamTest()
3568     {
3569         want_ = nullptr;
3570     }
~WantByteArrayParamTest()3571     ~WantByteArrayParamTest()
3572     {
3573         want_ = nullptr;
3574     }
3575     static void SetUpTestCase(void);
3576     static void TearDownTestCase(void);
3577     void SetUp();
3578     void TearDown();
3579     std::shared_ptr<Want> want_;
3580 };
3581 
SetUpTestCase(void)3582 void WantByteArrayParamTest::SetUpTestCase(void)
3583 {}
3584 
TearDownTestCase(void)3585 void WantByteArrayParamTest::TearDownTestCase(void)
3586 {}
3587 
SetUp(void)3588 void WantByteArrayParamTest::SetUp(void)
3589 {
3590     want_ = std::make_shared<Want>();
3591 }
3592 
TearDown(void)3593 void WantByteArrayParamTest::TearDown(void)
3594 {}
3595 
3596 /**
3597  * @tc.number: AaFwk_Want_ByteArray_0100
3598  * @tc.name:  SetParam/GetByteArrayParam
3599  * @tc.desc:  Verify when parameter change.
3600  */
3601 HWTEST_P(WantByteArrayParamTest, AaFwk_Want_ByteArray_0100, Function | MediumTest | Level1)
3602 {
3603     std::string setKey = std::get<0>(GetParam());
3604     std::string getKey = std::get<1>(GetParam());
3605     std::vector<byte> setValue = std::get<2>(GetParam());
3606     std::vector<byte> defaultValue = std::get<3>(GetParam());
3607     std::vector<byte> result = std::get<4>(GetParam());
3608     want_->SetParam(setKey, setValue);
3609     EXPECT_EQ(result, want_->GetByteArrayParam(getKey));
3610 }
3611 
3612 INSTANTIATE_TEST_SUITE_P(WantByteArrayParamTestCaseP, WantByteArrayParamTest,
3613     testing::Values(testByteArrayType("", "aa", {'*', 'D'}, {}, {}),
3614         testByteArrayType("", "", {'%', ')'}, {}, {'%', ')'}), testByteArrayType("1*中_aR", "aa", {'R', '.'}, {}, {}),
3615         testByteArrayType("1*中_aR", "1*中_aR", {'R', 'b'}, {}, {'R', 'b'})));
3616 
3617 /**
3618  * @tc.number: AaFwk_Want_ByteArray_0200
3619  * @tc.name:  SetParam/GetByteArrayParam
3620  * @tc.desc:  Verify when the value is byte array.
3621  */
3622 HWTEST_F(WantByteArrayParamTest, AaFwk_Want_ByteArray_0200, Function | MediumTest | Level1)
3623 {
3624     std::vector<byte> defaultValue;
3625     std::string getKey("aa");
3626     EXPECT_EQ(defaultValue, want_->GetByteArrayParam(getKey));
3627 }
3628 
3629 /**
3630  * @tc.number: AaFwk_Want_ByteArray_0300
3631  * @tc.name:  SetParam/GetByteArrayParam
3632  * @tc.desc:  Verify when the value is byte array.
3633  */
3634 HWTEST_F(WantByteArrayParamTest, AaFwk_Want_ByteArray_0300, Function | MediumTest | Level1)
3635 {
3636     std::string emptyStr("gg");
3637     std::vector<byte> firstValue({'a', '2'});
3638     std::vector<byte> secondValue({'1', 'd'});
3639     std::vector<byte> thirdValue({'t', '3'});
3640     std::string keyStr("aa");
3641     want_->SetParam(emptyStr, firstValue);
3642     want_->SetParam(emptyStr, firstValue);
3643     want_->SetParam(emptyStr, secondValue);
3644     std::vector<byte> defaultValue;
3645     EXPECT_EQ(defaultValue, want_->GetByteArrayParam(keyStr));
3646     want_->SetParam(emptyStr, thirdValue);
3647     EXPECT_EQ(thirdValue, want_->GetByteArrayParam(emptyStr));
3648 }
3649 
3650 /**
3651  * @tc.number: AaFwk_Want_ByteArray_0400
3652  * @tc.name:  SetParam/GetByteArrayParam
3653  * @tc.desc:  Verify when the value is byte array.
3654  */
3655 HWTEST_F(WantByteArrayParamTest, AaFwk_Want_ByteArray_0400, Function | MediumTest | Level1)
3656 {
3657     std::string firstKey("%1uH3");
3658     std::vector<byte> firstValue({'a', '2'});
3659     std::vector<byte> secondValue({'w', '$'});
3660     std::vector<byte> defaultValue;
3661     std::string secondKey("aa");
3662     want_->SetParam(firstKey, firstValue);
3663     want_->SetParam(firstKey, firstValue);
3664     want_->SetParam(firstKey, secondValue);
3665     EXPECT_EQ(secondValue, want_->GetByteArrayParam(firstKey));
3666     want_->SetParam(firstKey, firstValue);
3667     EXPECT_EQ(defaultValue, want_->GetByteArrayParam(secondKey));
3668 }
3669 
3670 using testBoolType = std::tuple<std::string, std::string, bool, bool, bool>;
3671 class WantBoolParamTest : public testing::TestWithParam<testBoolType> {
3672 public:
WantBoolParamTest()3673     WantBoolParamTest()
3674     {
3675         want_ = nullptr;
3676     }
~WantBoolParamTest()3677     ~WantBoolParamTest()
3678     {
3679         want_ = nullptr;
3680     }
3681     static void SetUpTestCase(void);
3682     static void TearDownTestCase(void);
3683     void SetUp();
3684     void TearDown();
3685     std::shared_ptr<Want> want_;
3686 };
3687 
SetUpTestCase(void)3688 void WantBoolParamTest::SetUpTestCase(void)
3689 {}
3690 
TearDownTestCase(void)3691 void WantBoolParamTest::TearDownTestCase(void)
3692 {}
3693 
SetUp(void)3694 void WantBoolParamTest::SetUp(void)
3695 {
3696     want_ = std::make_shared<Want>();
3697 }
3698 
TearDown(void)3699 void WantBoolParamTest::TearDown(void)
3700 {}
3701 
3702 /**
3703  * @tc.number: AaFwk_Want_BoolParam_0100
3704  * @tc.name: SetParam/GetBoolParam
3705  * @tc.desc: Verify when parameter change.
3706  */
3707 HWTEST_P(WantBoolParamTest, AaFwk_Want_BoolParam_0100, Function | MediumTest | Level1)
3708 {
3709     std::string setKey = std::get<0>(GetParam());
3710     std::string getKey = std::get<1>(GetParam());
3711     bool setValue = std::get<2>(GetParam());
3712     bool defaultValue = std::get<3>(GetParam());
3713     bool result = std::get<4>(GetParam());
3714     want_->SetParam(setKey, setValue);
3715     EXPECT_EQ(result, want_->GetBoolParam(getKey, defaultValue));
3716 }
3717 
3718 INSTANTIATE_TEST_SUITE_P(WantBoolParamTestCaseP, WantBoolParamTest,
3719     testing::Values(testBoolType("b1", "aa", true, true, true), testBoolType("b1", "aa", true, false, false),
3720         testBoolType("b2", "b2", true, true, true), testBoolType("b3", "b3", true, false, true),
3721         testBoolType("123", "123", true, false, true), testBoolType("123", "aa", true, false, false),
3722         testBoolType("-~*&%¥", "-~*&%¥", true, false, true), testBoolType("-~*&%¥", "aa", true, false, false),
3723         testBoolType("中文", "中文", true, false, true), testBoolType("中文", "aa", true, false, false),
3724         testBoolType("_中文ddPEJKJ#(&*~#^%", "_中文ddPEJKJ#(&*~#^%", true, false, true),
3725         testBoolType("_中文ddPEJKJ#(&*~#^%", "123", true, false, false)));
3726 
3727 /**
3728  * @tc.number: AaFwk_Want_BoolParam_0200
3729  * @tc.name:   SetParam/GetBoolParam
3730  * @tc.desc: Verify when set twice and get twice.
3731  */
3732 HWTEST_F(WantBoolParamTest, AaFwk_Want_BoolParam_0200, Function | MediumTest | Level1)
3733 {
3734     std::string firstKey("_中文ddPEJKJ#(&*~#^%");
3735     std::string secondKey("key33");
3736     want_->SetParam(firstKey, true);
3737     want_->SetParam(secondKey, true);
3738     EXPECT_EQ(true, want_->GetBoolParam(firstKey, false));
3739     EXPECT_EQ(true, want_->GetBoolParam(secondKey, false));
3740 }
3741 
3742 /**
3743  * @tc.number: AaFwk_Want_BoolParam_0300
3744  * @tc.name:   SetParam/GetBoolParam
3745  * @tc.desc: Verify when set 20 times, and get once.
3746  */
3747 HWTEST_F(WantBoolParamTest, AaFwk_Want_BoolParam_0300, Function | MediumTest | Level1)
3748 {
3749     std::string keyStr("_中文ddPEJKJ#(&*~#^%");
3750     for (int i = 0; i < 20; i++) {
3751         want_->SetParam(keyStr, true);
3752     }
3753     EXPECT_EQ(true, want_->GetBoolParam(keyStr, false));
3754 }
3755 
3756 /**
3757  * @tc.number: AaFwk_Want_Want_0100
3758  * @tc.name:   Want() and Want(want)
3759  * @tc.desc: Verify Want()
3760  */
3761 HWTEST_F(WantBaseTest, AaFwk_Want_Want_0100, Function | MediumTest | Level1)
3762 {
3763     Want want;
3764 
3765     EXPECT_EQ((uint)0, want.GetFlags());
3766     EXPECT_EQ(std::string(""), want.GetAction());
3767 
3768     std::vector<std::string> vect = want.GetEntities();
3769     EXPECT_EQ((size_t)0, vect.size());
3770     EXPECT_EQ(std::string(""), want.GetType());
3771 
3772     want.SetFlags(10);
3773     want.SetAction("system.Action.test");
3774     want.AddEntity("system.Entity.test");
3775     want.SetType("system.Type.test");
3776 
3777     Want want2(want);
3778     EXPECT_EQ("system.Action.test", want2.GetAction());
3779     EXPECT_EQ(true, want2.HasEntity("system.Entity.test"));
3780     EXPECT_EQ("system.Type.test", want2.GetType());
3781 }
3782 
3783 /**
3784  * @tc.number: AaFwk_Want_Entity_0100
3785  * @tc.name:    [AddEntity or RemoveEntity] & HasEntity &CountEntities
3786  * @tc.desc: Verify [AddEntity or RemoveEntity] & HasEntity &CountEntities
3787  */
3788 HWTEST_F(WantBaseTest, AaFwk_Want_Entity_0100, Function | MediumTest | Level1)
3789 {
3790     std::string entity1 = "entity.system.entity1";
3791 
3792     want_->AddEntity(entity1);
3793 
3794     EXPECT_EQ(true, want_->HasEntity(entity1));
3795     EXPECT_EQ(1, want_->CountEntities());
3796     want_->RemoveEntity(entity1);
3797     EXPECT_EQ(false, want_->HasEntity(entity1));
3798     EXPECT_EQ(0, want_->CountEntities());
3799     int length = want_->GetEntities().size();
3800     EXPECT_EQ(0, length);
3801 
3802     std::string entity2 = "entity.system.entity2";
3803 
3804     want_->AddEntity(entity1);
3805     want_->AddEntity(entity2);
3806 
3807     EXPECT_EQ(true, want_->HasEntity(entity1));
3808     EXPECT_EQ(2, want_->CountEntities());
3809     EXPECT_EQ(true, want_->HasEntity(entity2));
3810     EXPECT_EQ(2, want_->CountEntities());
3811 
3812     want_->RemoveEntity(entity1);
3813     want_->RemoveEntity(entity2);
3814     EXPECT_EQ(0, want_->CountEntities());
3815     int length2 = want_->GetEntities().size();
3816 
3817     EXPECT_EQ(0, length2);
3818 }
3819 
3820 /**
3821  * @tc.number: AaFwk_Want_HasParameter_0100
3822  * @tc.name:    SetParam and HasParameter
3823  * @tc.desc: Verify HasParameter()
3824  */
3825 HWTEST_F(WantBaseTest, AaFwk_Want_HasParameter_0100, Function | MediumTest | Level1)
3826 {
3827     std::vector<std::string> vector;
3828     std::string key = "system.want.test.key";
3829     std::string key2 = "system.want.test.key2";
3830 
3831     vector.push_back("system.want.test.content");
3832     want_->SetParam(key, vector);
3833     EXPECT_EQ(true, want_->HasParameter(key));
3834 
3835     want_->SetParam(key2, vector);
3836     EXPECT_EQ(true, want_->HasParameter(key2));
3837 }
3838 /**
3839  * @tc.number: AaFwk_Want_HasParameter_0200
3840  * @tc.name:    SetParam and HasParameter
3841  * @tc.desc: Verify HasParameter()
3842  */
3843 HWTEST_F(WantBaseTest, AaFwk_Want_HasParameter_0200, Function | MediumTest | Level1)
3844 {
3845     std::string key = std::to_string(Array::SIGNATURE) + ".#Intent;key=3{\"\\b\\\";end";
3846     std::vector<zchar> arrayValue = {'.', '=', ';'};
3847     std::shared_ptr<Want> p1 = std::make_shared<Want>();
3848     if (p1 == nullptr) {
3849         return;
3850     }
3851     p1->SetParam(key, arrayValue);
3852     Want *newWant = nullptr;
3853     newWant = Want::ParseUri(p1->ToUri());
3854     if (newWant == nullptr) {
3855         return;
3856     }
3857     std::shared_ptr<Want> p2(newWant);
3858     // want has default param which key is "moduleName"
3859     std::string moduleKey = "moduleName";
3860     std::string moduleValue = "wantTest";
3861     p1->SetParam(moduleKey, moduleValue);
3862     CompareWant(p1, p2);
3863 }
3864 /**
3865  * @tc.number: AaFwk_Want_ToString_0100
3866  * @tc.name:    ToString and FromString
3867  * @tc.desc: Verify FromString()
3868  */
3869 HWTEST_F(WantBaseTest, AaFwk_Want_ToString_0100, Function | MediumTest | Level1)
3870 {
3871     std::string deviceId = "deviceId";
3872     std::string bundleName = "bundleName";
3873     std::string abilityName ="abilityName";
3874     std::string uri = "url";
3875     std::string type = "type";
3876     unsigned int flags = 1;
3877     std::string action = "action";
3878     WantParams parameters;
3879     std::vector<std::string> entities = {"entity.system.entity1", "entity.system.entity2"};
3880 
3881     std::string keyBool = "key_bool";
3882     bool valueBool = true;
3883     parameters.SetParam(keyBool, Boolean::Box(valueBool));
3884 
3885     std::string keyStr = "key_string";
3886     std::string valueString = "123";
3887     parameters.SetParam(keyStr, String::Box(valueString));
3888 
3889     std::string keyInt = "key_int";
3890     int valueInt = 111;
3891     parameters.SetParam(keyStr, Integer::Box(valueInt));
3892 
3893     std::shared_ptr<Want> want1 = std::make_shared<Want>();
3894     if (want1 == nullptr) {
3895         return;
3896     }
3897     want1->SetElementName(deviceId, bundleName, abilityName);
3898     want1->SetUri(uri);
3899     want1->SetType(type);
3900     want1->SetFlags(flags);
3901     want1->SetAction(action);
3902     Uri urivalue("");
3903     want1->SetUriAndType(urivalue, keyInt);
3904     want1->FormatUri(urivalue);
3905     want1->FormatUri(keyInt);
3906     want1->FormatType(keyInt);
3907     want1->FormatUriAndType(urivalue, keyInt);
3908     want1->CloneOperation();
3909     for (auto entity : entities) {
3910         want1->AddEntity(entity);
3911     }
3912 
3913     std::string jsonString = want1->ToString();
3914     Want *newWant = Want::FromString(jsonString);
3915     if (newWant == nullptr) {
3916         return;
3917     }
3918     std::shared_ptr<Want> want2(newWant);
3919 
3920     CompareWant(want1, want2);
3921 }
3922 
3923 /*
3924  * Feature: Array
3925  * Function: GetLength and GetType
3926  * SubFunction: NA
3927  * FunctionPoints: GetLength and GetType
3928  * EnvConditions: NA
3929  * CaseDescription: Verify GetLength and GetType method of Array.
3930  */
3931 HWTEST_F(WantBaseTest, array_test_001, TestSize.Level1)
3932 {
3933     sptr<Array> arrayObj = new Array(9, g_IID_IInteger);
3934     long size = 0;
3935     arrayObj->GetLength(size);
3936     EXPECT_EQ(size, 9);
3937     InterfaceID type;
3938     arrayObj->GetType(type);
3939     EXPECT_EQ(type, g_IID_IInteger);
3940 }
3941 
3942 /*
3943  * Feature: Array
3944  * Function: Get and Set
3945  * SubFunction: NA
3946  * FunctionPoints: Get and Set
3947  * EnvConditions: NA
3948  * CaseDescription: Verify Get and Set method of Array.
3949  */
3950 HWTEST_F(WantBaseTest, array_test_002, TestSize.Level1)
3951 {
3952     sptr<Array> arrayObj = new Array(19, g_IID_IInteger);
3953     arrayObj->Set(0, Integer::Box(23));
3954     sptr<IInterface> valueObj;
3955     arrayObj->Get(0, valueObj);
3956     EXPECT_TRUE(valueObj != nullptr);
3957     EXPECT_EQ(Integer::Unbox(IInteger::Query(valueObj)), 23);
3958     arrayObj->Get(1, valueObj);
3959     EXPECT_TRUE(valueObj == nullptr);
3960 }
3961 
3962 /*
3963  * Feature: Array
3964  * Function: ToString
3965  * SubFunction: NA
3966  * FunctionPoints: ToString
3967  * EnvConditions: NA
3968  * CaseDescription: Verify ToString method of Array.
3969  */
3970 HWTEST_F(WantBaseTest, array_test_003, TestSize.Level1)
3971 {
3972     sptr<Array> arrayObj = new Array(5, g_IID_IInteger);
3973     arrayObj->Set(0, Integer::Box(2));
3974     arrayObj->Set(1, Integer::Box(3));
3975     arrayObj->Set(2, Integer::Box(5));
3976     arrayObj->Set(3, Integer::Box(7));
3977     arrayObj->Set(4, Integer::Box(11));
3978     EXPECT_EQ(arrayObj->ToString(), std::string("I5{2,3,5,7,11}"));
3979 }
3980 
3981 /*
3982  * Feature: Array
3983  * Function: Parse
3984  * SubFunction: NA
3985  * FunctionPoints: Parse
3986  * EnvConditions: NA
3987  * CaseDescription: Verify Parse method of Array.
3988  */
3989 HWTEST_F(WantBaseTest, array_test_004, TestSize.Level1)
3990 {
3991     sptr<IArray> arrayObj = Array::Parse("I5{2,3,5,7,11}");
3992     sptr<IInterface> valueObj;
3993     arrayObj->Get(0, valueObj);
3994     EXPECT_EQ(Integer::Unbox(IInteger::Query(valueObj)), 2);
3995     arrayObj->Get(1, valueObj);
3996     EXPECT_EQ(Integer::Unbox(IInteger::Query(valueObj)), 3);
3997     arrayObj->Get(2, valueObj);
3998     EXPECT_EQ(Integer::Unbox(IInteger::Query(valueObj)), 5);
3999     arrayObj->Get(3, valueObj);
4000     EXPECT_EQ(Integer::Unbox(IInteger::Query(valueObj)), 7);
4001     arrayObj->Get(4, valueObj);
4002     EXPECT_EQ(Integer::Unbox(IInteger::Query(valueObj)), 11);
4003 }
4004 
4005 /*
4006  * Feature: Array
4007  * Function: Equals
4008  * SubFunction: NA
4009  * FunctionPoints: Equals
4010  * EnvConditions: NA
4011  * CaseDescription: Verify Equals method of Array.
4012  */
4013 HWTEST_F(WantBaseTest, array_test_005, TestSize.Level1)
4014 {
4015     sptr<IArray> arrayObj1 = Array::Parse("I5{2,3,5,7,11}");
4016     sptr<IArray> arrayObj2 = Array::Parse("I5{2,3,7,7,11}");
4017     sptr<IArray> arrayObj3 = Array::Parse("I5{2,3,5,7,11}");
4018     EXPECT_FALSE(Object::Equals(*(arrayObj1.GetRefPtr()), *(arrayObj2.GetRefPtr())));
4019     EXPECT_TRUE(Object::Equals(*(arrayObj1.GetRefPtr()), *(arrayObj3.GetRefPtr())));
4020 }
4021 
4022 /**
4023  * @tc.number: DumpInfo_test_001
4024  * @tc.name: DumpInfo
4025  * @tc.desc: Test the want function DumpInfo.
4026  */
4027 HWTEST_F(WantBaseTest, DumpInfo_test_001, TestSize.Level1)
4028 {
4029     GTEST_LOG_(INFO) << "AaFwk_Want_DumpInfo_0100 start";
4030 
4031     Want want;
4032     int level = 1;
4033     want.operation_.entities_.push_back("a");
4034     want.operation_.entities_.push_back("b");
4035     want.DumpInfo(level);
4036     EXPECT_EQ(true, want.operation_.GetEntities().size() == 2);
4037 
4038     GTEST_LOG_(INFO) << "AaFwk_Want_DumpInfo_0100 end";
4039 }
4040 
4041 /**
4042  * @tc.number: DupAllFd_test_001
4043  * @tc.name: DupAllFd
4044  * @tc.desc: Test the want function DupAllFd.
4045  */
4046 HWTEST_F(WantBaseTest, DupAllFd_test_001, TestSize.Level1)
4047 {
4048     GTEST_LOG_(INFO) << "DupAllFd_test_001 start";
4049 
4050     Want want;
4051     want.operation_.entities_.push_back("a");
4052     want.operation_.entities_.push_back("b");
4053     want.DupAllFd();
4054     EXPECT_EQ(true, want.operation_.GetEntities().size() == 2);
4055     GTEST_LOG_(INFO) << "DupAllFd_test_001 end";
4056 }
4057 
4058 /**
4059  * @tc.number: SetEntities_test_001
4060  * @tc.name: SetEntities
4061  * @tc.desc: Test the want function SetEntities.
4062  */
4063 HWTEST_F(WantBaseTest, SetEntities_test_001, TestSize.Level1)
4064 {
4065     GTEST_LOG_(INFO) << "SetEntities_test_001 start";
4066 
4067     Want want;
4068     want.operation_.entities_.push_back("a");
4069     want.operation_.entities_.push_back("b");
4070     std::vector<std::string> entities;
4071     want.SetEntities(entities);
4072     auto ret = want.operation_.GetEntities().size();
4073     EXPECT_EQ(ret, 0);
4074     GTEST_LOG_(INFO) << "SetEntities_test_001 end";
4075 }
4076 
4077 /**
4078  * @tc.number: SetElementModuleName_test_001
4079  * @tc.name: SetElementModuleName
4080  * @tc.desc: Test the want function SetElementModuleName.
4081  * @tc.require: issueI648W6
4082  */
4083 HWTEST_F(WantBaseTest, SetElementModuleName_test_001, TestSize.Level1)
4084 {
4085     GTEST_LOG_(INFO) << "SetElementModuleName_test_001 start";
4086 
4087     std::shared_ptr<OHOS::AppExecFwk::ElementName> element = std::make_shared<OHOS::AppExecFwk::ElementName>();
4088     ASSERT_NE(nullptr, element);
4089     const char *moduleName = "12345";
4090     element->SetModuleName(moduleName);
4091 
4092     GTEST_LOG_(INFO) << "SetElementModuleName_test_001 end";
4093 }
4094 
4095 /**
4096  * @tc.number: ParseURI_test_001
4097  * @tc.name: ParseURI
4098  * @tc.desc: Test the want function ParseURI.
4099  * @tc.require: issueI648W6
4100  */
4101 HWTEST_F(WantBaseTest, ParseURI_test_001, TestSize.Level1)
4102 {
4103     GTEST_LOG_(INFO) << "ParseURI_test_001 start";
4104 
4105     OHOS::AppExecFwk::ElementName element;
4106     std::string uri = "#Intent;action;end";
4107     bool result = element.ParseURI(uri);
4108     EXPECT_EQ(result, false);
4109     const char *deviceId = "12345";
4110     const char *bundleName = "NAME";
4111     const char *abilityName = "abilityName";
4112     const char *moduleName = "moduleName";
4113     ElementName *elementName = new (std::nothrow) ElementName();
4114     element.SetElementDeviceID(elementName, deviceId);
4115     element.SetElementBundleName(elementName, bundleName);
4116     element.SetElementAbilityName(elementName, abilityName);
4117     element.SetElementModuleName(elementName, moduleName);
4118     element.ClearElement(elementName);
4119     element.SetElementDeviceID(nullptr, deviceId);
4120     element.SetElementBundleName(nullptr, bundleName);
4121     element.SetElementAbilityName(nullptr, abilityName);
4122     element.SetElementModuleName(nullptr, moduleName);
4123     element.ClearElement(nullptr);
4124     GTEST_LOG_(INFO) << "ParseURI_test_001 end";
4125 }
4126 }  // namespace AAFwk
4127 }  // namespace OHOS