1/*
2 * Copyright (c) 2021-2022 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#define private public
19#define protected public
20#include "bool_wrapper.h"
21#include "int_wrapper.h"
22#include "long_wrapper.h"
23#include "refbase.h"
24#include "skills.h"
25#include "string_wrapper.h"
26#undef private
27#undef protected
28#include "patterns_matcher.h"
29
30using namespace testing::ext;
31using namespace OHOS::AAFwk;
32using OHOS::Parcel;
33
34namespace OHOS {
35namespace AAFwk {
36static const int LARGE_STR_LEN = 65534;
37static const int SET_COUNT = 20;
38static const int DISMATCH_TYPE = 67584;
39static const int DISMATCH_DATA = -102;
40class SkillsBaseTest : public testing::Test {
41public:
42    SkillsBaseTest()
43    {}
44    ~SkillsBaseTest()
45    {}
46    static void SetUpTestCase(void);
47    static void TearDownTestCase(void);
48    void SetUp();
49    void TearDown();
50
51    std::shared_ptr<Skills> base_ = nullptr;
52    std::shared_ptr<PatternsMatcher> PatternsMatcherIn_ = nullptr;
53    void CompareSkills(const std::shared_ptr<Skills> &skills1, const std::shared_ptr<Skills> &skills2) const;
54};
55
56void SkillsBaseTest::SetUpTestCase(void)
57{}
58
59void SkillsBaseTest::TearDownTestCase(void)
60{}
61
62void SkillsBaseTest::SetUp(void)
63{
64    base_ = std::make_shared<Skills>();
65    PatternsMatcherIn_ = std::make_shared<PatternsMatcher>();
66}
67
68void SkillsBaseTest::TearDown(void)
69{}
70
71/**
72 * @tc.number: AaFwk_Skills_Parcelable_0100
73 * @tc.name: Marshalling/Unmarshalling
74 * @tc.desc: marshalling Skills, and then check result.
75 */
76HWTEST_F(SkillsBaseTest, AaFwk_Skills_Parcelable_0100, Function | MediumTest | Level1)
77{
78    std::shared_ptr<Skills> SkillsIn_ = std::make_shared<Skills>();
79    if (SkillsIn_ == nullptr) {
80        return;
81    }
82    SkillsIn_->AddEntity("12345");
83    SkillsIn_->AddAction("12345");
84    SkillsIn_->AddAuthority("12345");
85    SkillsIn_->AddScheme("12345");
86    SkillsIn_->AddPath("12345");
87    SkillsIn_->AddSchemeSpecificPart("12345");
88    SkillsIn_->AddType("12345");
89    WantParams wantParams;
90    std::string keyStr = "12345667";
91    bool valueBool = true;
92    wantParams.SetParam(keyStr, Boolean::Box(valueBool));
93    SkillsIn_->SetWantParams(wantParams);
94
95    Parcel in;
96    std::shared_ptr<Skills> SkillsOut_(Skills::Unmarshalling(in));
97    SkillsIn_->Marshalling(in);
98    if (SkillsOut_ != nullptr) {
99        CompareSkills(SkillsIn_, SkillsOut_);
100        EXPECT_EQ(valueBool, Boolean::Unbox(IBoolean::Query(SkillsOut_->GetWantParams().GetParam(keyStr))));
101    }
102}
103
104/**
105 * @tc.number: AaFwk_Skills_Parcelable_0200
106 * @tc.name: Marshalling/Unmarshalling
107 * @tc.desc: marshalling Skills, and then check result.
108 */
109HWTEST_F(SkillsBaseTest, AaFwk_Skills_Parcelable_0200, Function | MediumTest | Level1)
110{
111    std::shared_ptr<Skills> SkillsIn_ = std::make_shared<Skills>();
112    if (SkillsIn_ == nullptr) {
113        return;
114    }
115
116    SkillsIn_->AddEntity("@#¥#3243adsafdf_中文");
117    SkillsIn_->AddAction("@#¥#3243adsafdf_中文");
118    SkillsIn_->AddAuthority("@#¥#3243adsafdf_中文");
119    SkillsIn_->AddScheme("@#¥#3243adsafdf_中文");
120    SkillsIn_->AddPath("@#¥#3243adsafdf_中文");
121    SkillsIn_->AddSchemeSpecificPart("@#¥#3243adsafdf_中文");
122    SkillsIn_->AddType("@#¥#3243adsafdf_中文");
123    WantParams wantParams;
124    std::string keyStr = "@#¥#3243adsafdf_中文";
125    long valueLong = 12345L;
126    wantParams.SetParam(keyStr, Long::Box(valueLong));
127    EXPECT_EQ(valueLong, Long::Unbox(ILong::Query(wantParams.GetParam(keyStr))));
128
129    SkillsIn_->SetWantParams(wantParams);
130
131    Parcel in;
132    SkillsIn_->Marshalling(in);
133    std::shared_ptr<Skills> SkillsOut_(Skills::Unmarshalling(in));
134
135    if (SkillsOut_ != nullptr) {
136        CompareSkills(SkillsIn_, SkillsOut_);
137        long result = Long::Unbox(ILong::Query(SkillsOut_->GetWantParams().GetParam(keyStr)));
138        EXPECT_EQ(valueLong, result);
139    }
140}
141
142/**
143 * @tc.number: AaFwk_Skills_Parcelable_0300
144 * @tc.name: Marshalling/Unmarshalling
145 * @tc.desc: marshalling Skills, and then check result.
146 */
147HWTEST_F(SkillsBaseTest, AaFwk_Skills_Parcelable_0300, Function | MediumTest | Level1)
148{
149    std::shared_ptr<Skills> SkillsIn_ = std::make_shared<Skills>();
150    if (SkillsIn_ == nullptr) {
151        return;
152    }
153
154    SkillsIn_->AddEntity("");
155    SkillsIn_->AddAction("");
156    SkillsIn_->AddAuthority("");
157    SkillsIn_->AddScheme("");
158    SkillsIn_->AddPath("");
159    SkillsIn_->AddSchemeSpecificPart("");
160    SkillsIn_->AddType("");
161    WantParams wantParams;
162    std::string keyStr = "";
163    int valueInt = 123;
164    wantParams.SetParam(keyStr, Integer::Box(valueInt));
165
166    SkillsIn_->SetWantParams(wantParams);
167    EXPECT_EQ(valueInt, Integer::Unbox(IInteger::Query(wantParams.GetParam(keyStr))));
168
169    Parcel in;
170    SkillsIn_->Marshalling(in);
171    std::shared_ptr<Skills> SkillsOut_(Skills::Unmarshalling(in));
172
173    if (SkillsOut_ != nullptr) {
174        CompareSkills(SkillsIn_, SkillsOut_);
175        EXPECT_EQ(valueInt, Integer::Unbox(IInteger::Query(SkillsOut_->GetWantParams().GetParam(keyStr))));
176    }
177}
178
179/**
180 * @tc.number: AaFwk_Skills_Parcelable_0400
181 * @tc.name: Marshalling/Unmarshalling
182 * @tc.desc: marshalling Skills, and then check result.
183 */
184HWTEST_F(SkillsBaseTest, AaFwk_Skills_Parcelable_0400, Function | MediumTest | Level1)
185{
186    std::shared_ptr<Skills> SkillsIn_ = std::make_shared<Skills>();
187    if (SkillsIn_ == nullptr) {
188        return;
189    }
190    SkillsIn_->AddEntity("12345");
191    SkillsIn_->AddAction("12345");
192    SkillsIn_->AddAuthority("12345");
193    SkillsIn_->AddScheme("12345");
194    SkillsIn_->AddPath("12345");
195    SkillsIn_->AddSchemeSpecificPart("12345");
196    SkillsIn_->AddType("12345");
197    SkillsIn_->AddEntity("@#¥#3243adsafdf_中文");
198    SkillsIn_->AddAction("@#¥#3243adsafdf_中文");
199    SkillsIn_->AddAuthority("@#¥#3243adsafdf_中文");
200    SkillsIn_->AddScheme("@#¥#3243adsafdf_中文");
201    SkillsIn_->AddPath("@#¥#3243adsafdf_中文");
202    SkillsIn_->AddSchemeSpecificPart("@#¥#3243adsafdf_中文");
203    SkillsIn_->AddType("@#¥#3243adsafdf_中文");
204    SkillsIn_->AddEntity("");
205    SkillsIn_->AddAction("");
206    SkillsIn_->AddAuthority("");
207    SkillsIn_->AddScheme("");
208    SkillsIn_->AddPath("");
209    SkillsIn_->AddSchemeSpecificPart("");
210    SkillsIn_->AddType("");
211    WantParams wantParams;
212    std::string keyStr = "12345667";
213    std::string valueString = "123";
214    wantParams.SetParam(keyStr, String::Box(valueString));
215    SkillsIn_->SetWantParams(wantParams);
216
217    Parcel in;
218    SkillsIn_->Marshalling(in);
219    std::shared_ptr<Skills> SkillsOut_(Skills::Unmarshalling(in));
220
221    if (SkillsOut_ != nullptr) {
222        CompareSkills(SkillsIn_, SkillsOut_);
223        EXPECT_EQ(valueString, String::Unbox(IString::Query(SkillsOut_->GetWantParams().GetParam(keyStr))));
224    }
225}
226
227void SkillsBaseTest::CompareSkills(const std::shared_ptr<Skills> &skills1, const std::shared_ptr<Skills> &skills2) const
228{
229    EXPECT_EQ(skills1->CountEntities(), skills2->CountEntities());
230    EXPECT_EQ(skills1->CountActions(), skills2->CountActions());
231    EXPECT_EQ(skills1->CountAuthorities(), skills2->CountAuthorities());
232    EXPECT_EQ(skills1->CountSchemes(), skills2->CountSchemes());
233    EXPECT_EQ(skills1->CountPaths(), skills2->CountPaths());
234    EXPECT_EQ(skills1->CountSchemeSpecificParts(), skills2->CountSchemeSpecificParts());
235    EXPECT_EQ(skills1->CountTypes(), skills2->CountTypes());
236
237    int count = skills1->CountEntities();
238    for (int i = 0; i < count; i++) {
239        EXPECT_EQ(skills1->GetEntity(i), skills1->GetEntity(i));
240    }
241    count = skills1->CountActions();
242    for (int i = 0; i < count; i++) {
243        EXPECT_EQ(skills1->GetAction(i), skills1->GetAction(i));
244    }
245    count = skills1->CountAuthorities();
246    for (int i = 0; i < count; i++) {
247        EXPECT_EQ(skills1->GetAuthority(i), skills1->GetAuthority(i));
248    }
249    count = skills1->CountSchemes();
250    for (int i = 0; i < count; i++) {
251        EXPECT_EQ(skills1->GetScheme(i), skills1->GetScheme(i));
252    }
253    count = skills1->CountPaths();
254    for (int i = 0; i < count; i++) {
255        EXPECT_EQ(skills1->GetPath(i), skills1->GetPath(i));
256    }
257    count = skills1->CountSchemeSpecificParts();
258    for (int i = 0; i < count; i++) {
259        EXPECT_EQ(skills1->GetSchemeSpecificPart(i), skills1->GetSchemeSpecificPart(i));
260    }
261    count = skills1->CountTypes();
262    for (int i = 0; i < count; i++) {
263        EXPECT_EQ(skills1->GetType(i), skills1->GetType(i));
264    }
265
266    std::set<std::string> key1;
267    std::set<std::string> key2;
268    key1 = skills1->GetWantParams().KeySet();
269    key2 = skills2->GetWantParams().KeySet();
270    EXPECT_EQ(key1.size(), key2.size());
271
272    if (key1.size() > 0 && key2.size() > 0) {
273        std::set<std::string>::iterator iter1 = key1.begin();
274        std::set<std::string>::iterator iter2 = key2.begin();
275        for (; (iter1 != key1.end() && iter2 != key2.end()); iter1++, iter2++) {
276            EXPECT_EQ(*iter1, *iter2);
277        }
278    }
279}
280
281/**
282 * @tc.number: AaFwk_Skills_Entities_0100
283 * @tc.name: CountEntitie/HasEntity/GetEntity
284 * @tc.desc: Verify the function when the input string contains special characters.
285 */
286HWTEST_F(SkillsBaseTest, AaFwk_Skills_Entities_0100, Function | MediumTest | Level1)
287{
288    std::string empty;
289    std::string entities = "entities.system.test";
290    EXPECT_EQ(0, base_->CountEntities());
291    EXPECT_EQ(false, base_->HasEntity(entities));
292    EXPECT_EQ(empty, base_->GetEntity(0));
293
294    base_->RemoveEntity(entities);
295    EXPECT_EQ(0, base_->CountEntities());
296    EXPECT_EQ(false, base_->HasEntity(entities));
297}
298/**
299 * @tc.number: AaFwk_Skills_GetEntities_0100
300 * @tc.name: AddEntity and GetEntities
301 * @tc.desc: Verify AddEntity and GetEntities.
302 */
303HWTEST_F(SkillsBaseTest, AaFwk_Skills_GetEntities_0100, Function | MediumTest | Level1)
304{
305    std::string entity = "12345667";
306    base_->AddEntity(entity);
307
308    size_t length = base_->GetEntities().size();
309
310    EXPECT_EQ((size_t)1, length);
311    EXPECT_EQ(entity, base_->GetEntities().at(0));
312}
313
314/**
315 * @tc.number: AaFwk_Skills_Authorities_0100
316 * @tc.name: CountEntitie/HasEntity/GetEntity
317 * @tc.desc: Verify the function when the input string has a long size.
318 */
319HWTEST_F(SkillsBaseTest, AaFwk_Skills_Authorities_0100, Function | MediumTest | Level1)
320{
321    std::string empty;
322    std::string authorities = "authorities.system.test";
323    EXPECT_EQ(0, base_->CountAuthorities());
324    EXPECT_EQ(false, base_->HasAuthority(authorities));
325    EXPECT_EQ(empty, base_->GetAuthority(0));
326
327    base_->RemoveAuthority(authorities);
328    EXPECT_EQ(0, base_->CountAuthorities());
329    EXPECT_EQ(false, base_->HasAuthority(authorities));
330}
331
332/**
333 * @tc.number: AaFwk_Skills_Path_0300
334 * @tc.name: CountPaths/HasPath/GetPath
335 * @tc.desc: Verify the function when the input string is overrided.
336 */
337HWTEST_F(SkillsBaseTest, AaFwk_Skills_Path_0300, Function | MediumTest | Level1)
338{
339    std::string empty;
340    std::string path = "paths.system.test";
341    PatternsMatcher pm(path, MatchType::DEFAULT);
342    base_->AddPath(pm);
343
344    EXPECT_EQ(1, base_->CountPaths());
345    EXPECT_EQ(true, base_->HasPath(path));
346    EXPECT_EQ(path, base_->GetPath(0));
347
348    base_->RemovePath(pm);
349    EXPECT_EQ(0, base_->CountPaths());
350    EXPECT_EQ(false, base_->HasPath(path));
351
352    Parcel parcel;
353    EXPECT_EQ(true, base_->Marshalling(parcel));
354}
355
356/**
357 * @tc.number: AaFwk_Skills_Action_0100
358 * @tc.name: AddAction/CountActions/HasAction/GetAction
359 * @tc.desc: Verify the function when the input string is set 20 times.
360 */
361HWTEST_F(SkillsBaseTest, AaFwk_Skills_Action_0100, Function | MediumTest | Level1)
362{
363    std::string empty;
364    std::string action = "action.system.test";
365    int actionCount = 1;
366
367    for (int i = 0; i < SET_COUNT; i++) {
368        base_->AddAction(action);
369    }
370
371    EXPECT_EQ(actionCount, base_->CountActions());
372    EXPECT_EQ(true, base_->HasAction(action));
373    EXPECT_EQ(action, base_->GetAction(0));
374
375    base_->RemoveAction(action);
376    EXPECT_EQ(0, base_->CountActions());
377    EXPECT_EQ(false, base_->HasAction(action));
378}
379
380/**
381 * @tc.number: AaFwk_Skills_ActionsIterator_0100
382 * @tc.name: ActionsIterator
383 * @tc.desc: Test the function of ActionsIterator.
384 */
385HWTEST_F(SkillsBaseTest, AaFwk_Skills_ActionsIterator_0100, Function | MediumTest | Level1)
386{
387    base_->actions_.push_back("a");
388    base_->actions_.push_back("b");
389    auto iter = base_->ActionsIterator();
390    EXPECT_EQ(*iter, "a");
391}
392
393/**
394 * @tc.number: AaFwk_Skills_Entity_0100
395 * @tc.name: CountEntities/HasEntity/CountEntities/GetEntity
396 * @tc.desc: Verify the function when the input string is default.
397 */
398HWTEST_F(SkillsBaseTest, AaFwk_Skills_Entity_0100, Function | MediumTest | Level1)
399{
400    std::string empty;
401    std::string entity = "entity.system.test";
402    int entityCount = 1;
403
404    for (int i = 0; i < SET_COUNT; i++) {
405        base_->AddEntity(entity);
406    }
407
408    EXPECT_EQ(entityCount, base_->CountEntities());
409    EXPECT_EQ(true, base_->HasEntity(entity));
410    EXPECT_EQ(entity, base_->GetEntity(0));
411
412    base_->RemoveEntity(entity);
413    EXPECT_EQ(0, base_->CountEntities());
414    EXPECT_EQ(false, base_->HasEntity(entity));
415}
416
417/**
418 * @tc.number: AaFwk_Skills_Authority_0100
419 * @tc.name: CountAuthorities/HasAuthority/GetAuthority
420 * @tc.desc: Verify the function when the input string contains special characters.
421 */
422HWTEST_F(SkillsBaseTest, AaFwk_Skills_Authority_0100, Function | MediumTest | Level1)
423{
424    std::string empty;
425    std::string authority = "Authority.system.test";
426    int authorityCount = 1;
427
428    for (int i = 0; i < SET_COUNT; i++) {
429        base_->AddAuthority(authority);
430    }
431
432    EXPECT_EQ(authorityCount, base_->CountAuthorities());
433    EXPECT_EQ(true, base_->HasAuthority(authority));
434    EXPECT_EQ(authority, base_->GetAuthority(0));
435
436    base_->RemoveAuthority(authority);
437    EXPECT_EQ(0, base_->CountAuthorities());
438    EXPECT_EQ(false, base_->HasAuthority(authority));
439}
440
441/**
442 * @tc.number: AaFwk_Skills_Path_0100
443 * @tc.name: CountPaths/HasPath/GetPath
444 * @tc.desc: Verify the function when the input string contains special characters.
445 */
446HWTEST_F(SkillsBaseTest, AaFwk_Skills_Path_0100, Function | MediumTest | Level1)
447{
448    std::string empty;
449    std::string path = "Path.system.test";
450    int pathCount = 1;
451
452    for (int i = 0; i < SET_COUNT; i++) {
453        base_->AddPath(path);
454    }
455
456    EXPECT_EQ(pathCount, base_->CountPaths());
457    EXPECT_EQ(true, base_->HasPath(path));
458    EXPECT_EQ(path, base_->GetPath(0));
459
460    base_->RemovePath(path);
461    EXPECT_EQ(0, base_->CountPaths());
462    EXPECT_EQ(false, base_->HasPath(path));
463}
464
465/**
466 * @tc.number: AaFwk_Skills_Scheme_0100
467 * @tc.name: CountSchemes/HasScheme/GetScheme
468 * @tc.desc: Verify the function when the input string contains special characters.
469 */
470HWTEST_F(SkillsBaseTest, AaFwk_Skills_Scheme_0100, Function | MediumTest | Level1)
471{
472    std::string empty;
473    std::string scheme = "scheme.system.test";
474    int schemeCount = 1;
475
476    for (int i = 0; i < SET_COUNT; i++) {
477        base_->AddScheme(scheme);
478    }
479
480    EXPECT_EQ(schemeCount, base_->CountSchemes());
481    EXPECT_EQ(true, base_->HasScheme(scheme));
482    EXPECT_EQ(scheme, base_->GetScheme(0));
483
484    base_->RemoveScheme(scheme);
485    EXPECT_EQ(0, base_->CountSchemes());
486    EXPECT_EQ(false, base_->HasScheme(scheme));
487}
488
489/**
490 * @tc.number: AaFwk_Skills_SchemeSpecificPart_0100
491 * @tc.name: CountSchemeSpecificParts/HasSchemeSpecificPart/GetSchemeSpecificPart
492 * @tc.desc: Verify the function when the input string contains special characters.
493 */
494HWTEST_F(SkillsBaseTest, AaFwk_Skills_SchemeSpecificPart_0100, Function | MediumTest | Level1)
495{
496    std::string empty;
497    std::string schemespecificpart = "schemespecificpart.system.test";
498    int schemespecificpartCount = 1;
499
500    for (int i = 0; i < SET_COUNT; i++) {
501        base_->AddSchemeSpecificPart(schemespecificpart);
502    }
503
504    EXPECT_EQ(schemespecificpartCount, base_->CountSchemeSpecificParts());
505    EXPECT_EQ(true, base_->HasSchemeSpecificPart(schemespecificpart));
506    EXPECT_EQ(schemespecificpart, base_->GetSchemeSpecificPart(0));
507
508    base_->RemoveSchemeSpecificPart(schemespecificpart);
509    EXPECT_EQ(0, base_->CountSchemeSpecificParts());
510    EXPECT_EQ(false, base_->HasSchemeSpecificPart(schemespecificpart));
511}
512
513/**
514 * @tc.number: AaFwk_Skills_Type_0100
515 * @tc.name: CountTypes/HasType/GetType
516 * @tc.desc: Verify the function when the input string contains special characters.
517 */
518HWTEST_F(SkillsBaseTest, AaFwk_Skills_Type_0100, Function | MediumTest | Level1)
519{
520    std::string empty;
521    std::string type = "type/system.test";
522    int typeCount = 1;
523
524    for (int i = 0; i < SET_COUNT; i++) {
525        base_->AddType(type);
526    }
527
528    EXPECT_EQ(typeCount, base_->CountTypes());
529    EXPECT_EQ(true, base_->HasType(type));
530    EXPECT_EQ(type, base_->GetType(0));
531
532    base_->RemoveType(type);
533    EXPECT_EQ(0, base_->CountTypes());
534    EXPECT_EQ(false, base_->HasType(type));
535}
536
537/**
538 * @tc.number: AaFwk_Skills_Actions_0100
539 * @tc.name: CountActions/HasAuthority/GetAuthority
540 * @tc.desc: Verify the function when the input string contains special characters.
541 */
542HWTEST_F(SkillsBaseTest, AaFwk_Skills_Actions_0100, Function | MediumTest | Level1)
543{
544    std::string empty;
545    std::string actions = "actions.system.test";
546    EXPECT_EQ(0, base_->CountActions());
547    EXPECT_EQ(false, base_->HasAuthority(actions));
548    EXPECT_EQ(empty, base_->GetAuthority(0));
549
550    base_->RemoveAuthority(actions);
551    EXPECT_EQ(0, base_->CountActions());
552    EXPECT_EQ(false, base_->HasAuthority(actions));
553}
554
555/**
556 * @tc.number: AaFwk_Skills_Schemes_0100
557 * @tc.name: CountSchemes/HasAuthority/GetAuthority
558 * @tc.desc: Verify the function when the input string contains special characters.
559 */
560HWTEST_F(SkillsBaseTest, AaFwk_Skills_Schemes_0100, Function | MediumTest | Level1)
561{
562    std::string empty;
563    std::string schemes = "schemes.system.test";
564    EXPECT_EQ(0, base_->CountSchemes());
565    EXPECT_EQ(false, base_->HasAuthority(schemes));
566    EXPECT_EQ(empty, base_->GetAuthority(0));
567
568    base_->RemoveAuthority(schemes);
569    EXPECT_EQ(0, base_->CountSchemes());
570    EXPECT_EQ(false, base_->HasAuthority(schemes));
571}
572
573/**
574 * @tc.number: AaFwk_Skills_SchemeSpecificParts_0100
575 * @tc.name: CountSchemeSpecificParts/HasAuthority/GetAuthority
576 * @tc.desc: Verify the function when the input string contains special characters.
577 */
578HWTEST_F(SkillsBaseTest, AaFwk_Skills_SchemeSpecificParts_0100, Function | MediumTest | Level1)
579{
580    std::string empty;
581    std::string schemespecificparts = "schemespecificparts.system.test";
582    EXPECT_EQ(0, base_->CountSchemeSpecificParts());
583    EXPECT_EQ(false, base_->HasAuthority(schemespecificparts));
584    EXPECT_EQ(empty, base_->GetAuthority(0));
585
586    base_->RemoveAuthority(schemespecificparts);
587    EXPECT_EQ(0, base_->CountSchemeSpecificParts());
588    EXPECT_EQ(false, base_->HasAuthority(schemespecificparts));
589}
590
591/**
592 * @tc.number: AaFwk_Skills_Types_0100
593 * @tc.name: CountTypes/HasAuthority/GetAuthority
594 * @tc.desc: Verify the function when the input string contains special characters.
595 */
596HWTEST_F(SkillsBaseTest, AaFwk_Skills_Types_0100, Function | MediumTest | Level1)
597{
598    std::string empty;
599    std::string types = "types.system.test";
600    GTEST_LOG_(INFO) << "---------------a ";
601    EXPECT_EQ(0, base_->CountTypes());
602    GTEST_LOG_(INFO) << "---------------b ";
603    EXPECT_EQ(false, base_->HasAuthority(types));
604    GTEST_LOG_(INFO) << "---------------1 ";
605    EXPECT_EQ(empty, base_->GetAuthority(0));
606    GTEST_LOG_(INFO) << "---------------2 ";
607
608    base_->RemoveAuthority(types);
609    EXPECT_EQ(0, base_->CountTypes());
610    EXPECT_EQ(false, base_->HasAuthority(types));
611}
612
613/**
614 * @tc.number: AaFwk_Skills_Action_0200
615 * @tc.name: CountActions/HasAction/GetAction
616 * @tc.desc: Verify the function when action is not exist.
617 */
618HWTEST_F(SkillsBaseTest, AaFwk_Skills_Action_0200, Function | MediumTest | Level1)
619{
620    std::string empty;
621    std::string action = "action.system.test";
622    EXPECT_EQ(0, base_->CountActions());
623    EXPECT_EQ(false, base_->HasAction(action));
624    EXPECT_EQ(empty, base_->GetAction(0));
625
626    base_->RemoveAction(action);
627    EXPECT_EQ(0, base_->CountActions());
628    EXPECT_EQ(false, base_->HasAction(action));
629}
630
631/**
632 * @tc.number: AaFwk_Skills_Authority_0200
633 * @tc.name: CountAuthorities/HasAuthority/GetAuthority
634 * @tc.desc: Verify the function when action is not exist.
635 */
636HWTEST_F(SkillsBaseTest, AaFwk_Skills_Authority_0200, Function | MediumTest | Level1)
637{
638    std::string empty;
639    std::string authority = "authority.system.test";
640    EXPECT_EQ(0, base_->CountAuthorities());
641    EXPECT_EQ(false, base_->HasAuthority(authority));
642    EXPECT_EQ(empty, base_->GetAuthority(0));
643
644    base_->RemoveAuthority(authority);
645    EXPECT_EQ(0, base_->CountAuthorities());
646    EXPECT_EQ(false, base_->HasAuthority(authority));
647}
648
649/**
650 * @tc.number: AaFwk_Skills_Path_0200
651 * @tc.name: CountPaths/HasPath/GetPath
652 * @tc.desc: Verify the function when action is not exist.
653 */
654HWTEST_F(SkillsBaseTest, AaFwk_Skills_Path_0200, Function | MediumTest | Level1)
655{
656    std::string empty;
657    std::string path = "path.system.test";
658    base_->AddPath(path, MatchType::DEFAULT);
659
660    EXPECT_EQ(1, base_->CountPaths());
661    EXPECT_EQ(true, base_->HasPath(path));
662    EXPECT_EQ(path, base_->GetPath(0));
663
664    base_->RemovePath(path, MatchType::DEFAULT);
665    EXPECT_EQ(0, base_->CountPaths());
666    EXPECT_EQ(false, base_->HasPath(path));
667}
668
669/**
670 * @tc.number: AaFwk_Skills_Scheme_0200
671 * @tc.name: CountSchemes/HasScheme/GetScheme
672 * @tc.desc: Verify the function when action is not exist.
673 */
674HWTEST_F(SkillsBaseTest, AaFwk_Skills_Scheme_0200, Function | MediumTest | Level1)
675{
676    std::string empty;
677    std::string scheme = "scheme.system.test";
678    EXPECT_EQ(0, base_->CountSchemes());
679    EXPECT_EQ(false, base_->HasScheme(scheme));
680    EXPECT_EQ(empty, base_->GetScheme(0));
681
682    base_->RemoveScheme(scheme);
683    EXPECT_EQ(0, base_->CountSchemes());
684    EXPECT_EQ(false, base_->HasScheme(scheme));
685}
686
687/**
688 * @tc.number: AaFwk_Skills_SchemeSpecificPart_0200
689 * @tc.name: CountSchemeSpecificParts/HasSchemeSpecificPart/GetSchemeSpecificPart
690 * @tc.desc: Verify the function when action is not exist.
691 */
692HWTEST_F(SkillsBaseTest, AaFwk_Skills_SchemeSpecificPart_0200, Function | MediumTest | Level1)
693{
694    std::string empty;
695    std::string schemespecificpart = "schemespecificpart.system.test";
696    EXPECT_EQ(0, base_->CountSchemeSpecificParts());
697    EXPECT_EQ(false, base_->HasSchemeSpecificPart(schemespecificpart));
698    EXPECT_EQ(empty, base_->GetSchemeSpecificPart(0));
699
700    base_->RemoveSchemeSpecificPart(schemespecificpart);
701    EXPECT_EQ(0, base_->CountSchemeSpecificParts());
702    EXPECT_EQ(false, base_->HasSchemeSpecificPart(schemespecificpart));
703}
704
705/**
706 * @tc.number: AaFwk_Skills_Type_0300
707 * @tc.name: CountTypes/HasType/GetType
708 * @tc.desc: Verify the function when action is not exist.
709 */
710HWTEST_F(SkillsBaseTest, AaFwk_Skills_Type_0300, Function | MediumTest | Level1)
711{
712    std::string empty;
713    std::string type = "type.system.test";
714    EXPECT_EQ(0, base_->CountTypes());
715
716    EXPECT_EQ(false, base_->HasType(type));
717    EXPECT_EQ(empty, base_->GetType(0));
718
719    base_->RemoveType(type);
720    EXPECT_EQ(0, base_->CountTypes());
721    EXPECT_EQ(false, base_->HasType(type));
722}
723
724using SkillsMatchType = std::tuple<std::string, std::string, bool>;
725class SkillsMatchTest : public testing::TestWithParam<SkillsMatchType> {
726public:
727    SkillsMatchTest()
728    {}
729    ~SkillsMatchTest()
730    {}
731    static void SetUpTestCase(void);
732    static void TearDownTestCase(void);
733    void SetUp();
734    void TearDown();
735    std::shared_ptr<Skills> skills_ = nullptr;
736};
737
738void SkillsMatchTest::SetUpTestCase(void)
739{}
740
741void SkillsMatchTest::TearDownTestCase(void)
742{}
743
744void SkillsMatchTest::SetUp(void)
745{
746    skills_ = std::make_shared<Skills>();
747}
748
749void SkillsMatchTest::TearDown(void)
750{}
751
752/**
753 * @tc.number: AaFwk_Skills_match_0100
754 * @tc.name: CountTypes/HasType/GetType
755 * @tc.desc: Verify whether parameter change.
756 */
757HWTEST_P(SkillsMatchTest, AaFwk_Skills_match_0100, Function | MediumTest | Level1)
758{
759    std::string filterEntity = "entity.system.entity1";
760    std::string filterAction1 = "action.system.action1";
761    std::string filterAction2 = "action.system.action2";
762    std::string wantEntity = std::get<0>(GetParam());
763    std::string wantAction = std::get<1>(GetParam());
764    bool result = std::get<2>(GetParam());
765
766    skills_->AddEntity(filterEntity);
767    skills_->AddAction(filterAction1);
768    skills_->AddAction(filterAction2);
769
770    Want want;
771    want.AddEntity(wantEntity);
772    want.SetAction(wantAction);
773
774    EXPECT_EQ(result, skills_->Match(want));
775}
776
777INSTANTIATE_TEST_SUITE_P(SkillsMatchTestP, SkillsMatchTest,
778    testing::Values(SkillsMatchType("entity.system.entityA", "action.system.actionA", false),
779        SkillsMatchType("entity.system.entity1", "action.system.actionA", false),
780        SkillsMatchType("entity.system.entityA", "action.system.action2", false),
781        SkillsMatchType("entity.system.entity1", "action.system.action1", true)));
782
783/**
784 * @tc.name: AaFwk_Skills_match_0200
785 * @tc.desc: Verify Matching rules action segment
786 * @tc.type: FUNC
787 * @tc.require: I5PZK2
788 */
789HWTEST_F(SkillsBaseTest, AaFwk_Skills_match_0200, Function | MediumTest | Level1)
790{
791    Skills skills;
792    std::string filterEntity = "entity.system.entity1";
793    skills.AddEntity(filterEntity);
794    Want want;
795    want.AddEntity(filterEntity);
796    // Both actions are empty.
797    EXPECT_EQ(true, skills.Match(want));
798}
799
800/**
801 * @tc.name: AaFwk_Skills_match_0300
802 * @tc.desc: Verify Matching rules action segment
803 * @tc.type: FUNC
804 * @tc.require: I5PZK2
805 */
806HWTEST_F(SkillsBaseTest, AaFwk_Skills_match_0300, Function | MediumTest | Level1)
807{
808    Skills skills;
809    std::string filterEntity = "entity.system.entity1";
810    skills.AddEntity(filterEntity);
811    Want want;
812    want.AddEntity(filterEntity);
813    want.SetAction("action.system.action1");
814    // empty actions in skill vs non-empty actions in want
815    EXPECT_EQ(false, skills.Match(want));
816}
817
818/**
819 * @tc.name: AaFwk_Skills_match_0400
820 * @tc.desc: Verify Matching rules action segment
821 * @tc.type: FUNC
822 * @tc.require: I5PZK2
823 */
824HWTEST_F(SkillsBaseTest, AaFwk_Skills_match_0400, Function | MediumTest | Level1)
825{
826    Skills skills;
827    std::string filterEntity = "entity.system.entity1";
828    std::string filterAction1 = "action.system.action1";
829    std::string filterAction2 = "action.system.action2";
830    skills.AddEntity(filterEntity);
831    skills.AddAction(filterAction1);
832    skills.AddAction(filterAction2);
833    Want want;
834    want.AddEntity(filterEntity);
835    want.SetAction(filterAction1);
836    // actions that in skill contains non-empty actions in want
837    EXPECT_EQ(true, skills.Match(want));
838}
839
840/**
841 * @tc.name: AaFwk_Skills_match_0500
842 * @tc.desc: Verify Matching rules action segment
843 * @tc.type: FUNC
844 * @tc.require: I5PZK2
845 */
846HWTEST_F(SkillsBaseTest, AaFwk_Skills_match_0600, Function | MediumTest | Level1)
847{
848    Skills skills;
849    std::string filterEntity = "entity.system.entity1";
850    std::string filterAction1 = "action.system.action1";
851    std::string filterAction2 = "action.system.action2";
852    skills.AddEntity(filterEntity);
853    skills.AddAction(filterAction2);
854    Want want;
855    want.AddEntity(filterEntity);
856    // non-empty actions that in skill vs empty actions in want
857    EXPECT_EQ(false, skills.Match(want));
858}
859
860/**
861 * @tc.name: AaFwk_Skills_match_0600
862 * @tc.desc: Verify Matching rules action segment
863 * @tc.type: FUNC
864 * @tc.require: I5PZK2
865 */
866HWTEST_F(SkillsBaseTest, AaFwk_Skills_match_0500, Function | MediumTest | Level1)
867{
868    Skills skills;
869    std::string filterEntity = "entity.system.entity1";
870    std::string filterAction1 = "action.system.action1";
871    std::string filterAction2 = "action.system.action2";
872    skills.AddEntity(filterEntity);
873    skills.AddAction(filterAction2);
874    Want want;
875    want.AddEntity(filterEntity);
876    want.SetAction(filterAction1);
877    // actions that in skill doesn't contain non-empty actions in want
878    EXPECT_EQ(false, skills.Match(want));
879}
880
881/**
882 * @tc.number: AaFwk_Skills_Skills_0100
883 * @tc.name: Skills() and Skills(Skills)
884 * @tc.desc:  Verify Skills().
885 */
886HWTEST_F(SkillsBaseTest, AaFwk_Skills_Skills_0100, Function | MediumTest | Level1)
887{
888    Skills skills;
889
890    EXPECT_EQ(0, skills.CountEntities());
891    EXPECT_EQ(0, skills.CountActions());
892    EXPECT_EQ(0, skills.CountAuthorities());
893    EXPECT_EQ(0, skills.CountSchemes());
894
895    EXPECT_EQ(0, skills.CountPaths());
896    EXPECT_EQ(0, skills.CountSchemeSpecificParts());
897    EXPECT_EQ(0, skills.CountTypes());
898    EXPECT_EQ(0, skills.GetWantParams().Size());
899}
900
901/**
902 * @tc.number: AaFwk_Skills_Skills_0200
903 * @tc.name: Skills() and Skills(Skills)
904 * @tc.desc:  Verify Skills().
905 */
906HWTEST_F(SkillsBaseTest, AaFwk_Skills_Skills_0200, Function | MediumTest | Level1)
907{
908    Skills skillsBase;
909    std::string entityString = "entity";
910    skillsBase.AddEntity(entityString);
911    std::string actionString = "action";
912    skillsBase.AddAction(actionString);
913    std::string authorityString = "authority";
914    skillsBase.AddAuthority(authorityString);
915    std::string schemeString = "scheme";
916    skillsBase.AddScheme(schemeString);
917    std::string pathString = "path";
918    skillsBase.AddPath(pathString);
919    std::string schemeSpecificPartsString = "schemeSpecificParts";
920    skillsBase.AddSchemeSpecificPart(schemeSpecificPartsString);
921    std::string typeString = "/type";
922    skillsBase.AddType(typeString);
923    Skills skills(skillsBase);
924
925    EXPECT_EQ(entityString, skills.GetEntity(0));
926    int index = -5;
927    std::string entityString1 = "";
928    EXPECT_EQ(entityString1, skills.GetEntity(index));
929    EXPECT_EQ(actionString, skills.GetAction(0));
930    EXPECT_EQ(entityString1, skills.GetAction(index));
931    EXPECT_EQ(authorityString, skills.GetAuthority(0));
932    EXPECT_EQ(entityString1, skills.GetAuthority(index));
933    EXPECT_EQ(schemeString, skills.GetScheme(0));
934    EXPECT_EQ(entityString1, skills.GetScheme(index));
935    EXPECT_EQ(pathString, skills.GetPath(0));
936    EXPECT_EQ(entityString1, skills.GetPath(index));
937    EXPECT_EQ(schemeSpecificPartsString, skills.GetSchemeSpecificPart(0));
938    EXPECT_EQ(entityString1, skills.GetSchemeSpecificPart(index));
939    EXPECT_EQ(typeString, skills.GetType(0));
940}
941
942/**
943 * @tc.number: AaFwk_Skills_addremoveType_0100
944 * @tc.name: addType(PatternsMatcher)/ removeType(PatternsMatcher)
945 * @tc.desc: Verify addType/removeType result.
946 */
947HWTEST_F(SkillsBaseTest, AaFwk_Skills_addremoveType_0100, Function | MediumTest | Level1)
948{
949    std::string patternStr = std::string("systems/*t");
950
951    PatternsMatcher pattern(patternStr, MatchType::DEFAULT);
952
953    base_->AddType(pattern);
954    std::string type1 = base_->GetType(0);
955    EXPECT_EQ(patternStr, type1);
956
957    base_->RemoveType(patternStr);
958
959    EXPECT_EQ(0, base_->CountEntities());
960
961    base_->AddType(pattern);
962
963    std::string patternStr2 = std::string("systems/*test");
964    PatternsMatcher pattern2(patternStr2, MatchType::PREFIX);
965    base_->AddType(pattern2);
966    std::string type2 = base_->GetType(1);
967    EXPECT_EQ(patternStr2, type2);
968
969    base_->RemoveType(pattern2);
970    EXPECT_EQ(0, base_->CountEntities());
971
972    std::string patternStr3 = std::string("systems/*test3");
973    base_->AddType(patternStr3, MatchType::GLOBAL);
974
975    std::string type3 = base_->GetType(1);
976    EXPECT_EQ(patternStr3, type3);
977
978    std::string patternStr4 = std::string("");
979    std::string type4 = base_->GetType(-5);
980    EXPECT_EQ(patternStr4, type4);
981
982    base_->RemoveType(patternStr3, MatchType::GLOBAL);
983
984    EXPECT_EQ(0, base_->CountEntities());
985}
986
987/**
988 * @tc.number: AaFwk_Skills_MatchData_0100
989 * @tc.name: MatchData
990 * @tc.desc: Test MatchData.
991 * @tc.require: issueI648W6
992 */
993HWTEST_F(SkillsBaseTest, AaFwk_Skills_MatchData_0100, Function | MediumTest | Level1)
994{
995    std::string type = "this is type";
996    std::string scheme = "this is scheme";
997    std::string value = "this is value";
998    OHOS::Uri data(value);
999    int result = base_->MatchData(type, scheme, data);
1000    EXPECT_EQ(result, DISMATCH_DATA);
1001}
1002
1003/**
1004 * @tc.number: AaFwk_Skills_MatchData_0200
1005 * @tc.name: MatchData
1006 * @tc.desc: Test MatchData.
1007 * @tc.require: issueI648W6
1008 */
1009HWTEST_F(SkillsBaseTest, AaFwk_Skills_MatchData_0200, Function | MediumTest | Level1)
1010{
1011    std::string type = "";
1012    std::string scheme = "";
1013    std::string value = "this is value";
1014    OHOS::Uri data(value);
1015    int result = base_->MatchData(type, scheme, data);
1016    EXPECT_EQ(result, DISMATCH_TYPE);
1017}
1018
1019/**
1020 * @tc.number: AaFwk_Skills_MatchData_0300
1021 * @tc.name: MatchData
1022 * @tc.desc: Test MatchData.
1023 * @tc.require: issueI648W6
1024 */
1025HWTEST_F(SkillsBaseTest, AaFwk_Skills_MatchData_0300, Function | MediumTest | Level1)
1026{
1027    std::string type = "this is type";
1028    std::string scheme = "this is scheme";
1029    std::string value = "this is value";
1030    OHOS::Uri data(value);
1031    std::string pattern = "this is pattern";
1032    PatternsMatcherIn_ = std::make_shared<PatternsMatcher>(pattern, MatchType::DEFAULT);
1033    std::string ret = PatternsMatcherIn_->GetPattern();
1034    EXPECT_EQ(ret, pattern);
1035    base_->AddScheme("12345");
1036    int result = base_->MatchData(type, scheme, data);
1037    EXPECT_EQ(result, DISMATCH_DATA);
1038}
1039
1040/**
1041 * @tc.number: AaFwk_Skills_FindMimeType_0100
1042 * @tc.name: FindMimeType
1043 * @tc.desc: Test FindMimeType.
1044 * @tc.require: issueI653GZ
1045 */
1046HWTEST_F(SkillsBaseTest, AaFwk_Skills_FindMimeType_0100, Function | MediumTest | Level1)
1047{
1048    std::string type = "";
1049    bool result = base_->FindMimeType(type);
1050    EXPECT_EQ(result, false);
1051
1052    std::string type1 = "this is type";
1053    bool result1 = base_->FindMimeType(type1);
1054    EXPECT_EQ(result1, false);
1055}
1056
1057/**
1058 * @tc.number: AaFwk_Skills_FindMimeType_0200
1059 * @tc.name: FindMimeType
1060 * @tc.desc: Test FindMimeType.
1061 * @tc.require: issue
1062 */
1063HWTEST_F(SkillsBaseTest, AaFwk_Skills_FindMimeType_0200, Function | MediumTest | Level1)
1064{
1065    std::string empty;
1066    std::string type = "*/*";
1067    int typeCount = 1;
1068
1069    for (int i = 0; i < SET_COUNT; i++) {
1070        base_->AddType(type);
1071    }
1072    EXPECT_EQ(typeCount, base_->CountTypes());
1073
1074    PatternsMatcherIn_ = std::make_shared<PatternsMatcher>(type, MatchType::DEFAULT);
1075    std::string ret = PatternsMatcherIn_->GetPattern();
1076    EXPECT_EQ(ret, type);
1077    bool result = base_->FindMimeType(type);
1078    EXPECT_EQ(result, true);
1079}
1080
1081/**
1082 * @tc.number: AaFwk_Skills_FindMimeType_0300
1083 * @tc.name: FindMimeType
1084 * @tc.desc: Test FindMimeType.
1085 * @tc.require: issue
1086 */
1087HWTEST_F(SkillsBaseTest, AaFwk_Skills_FindMimeType_0300, Function | MediumTest | Level1)
1088{
1089    std::string empty;
1090    std::string type = "type/system.test";
1091    int typeCount = 1;
1092
1093    for (int i = 0; i < SET_COUNT; i++) {
1094        base_->AddType(type);
1095    }
1096    EXPECT_EQ(typeCount, base_->CountTypes());
1097
1098    PatternsMatcherIn_ = std::make_shared<PatternsMatcher>(type, MatchType::DEFAULT);
1099    std::string ret = PatternsMatcherIn_->GetPattern();
1100    EXPECT_EQ(ret, type);
1101    bool result = base_->FindMimeType(type);
1102    EXPECT_EQ(result, true);
1103    EXPECT_EQ(true, base_->HasType(type));
1104    EXPECT_EQ(type, base_->GetType(0));
1105
1106    base_->RemoveType(type);
1107    EXPECT_EQ(0, base_->CountTypes());
1108    EXPECT_EQ(false, base_->FindMimeType(type));
1109}
1110
1111/**
1112 * @tc.number: AaFwk_Skills_RegionMatches_0100
1113 * @tc.name: RegionMatches
1114 * @tc.desc: Test RegionMatches.
1115 * @tc.require: issueI653GZ
1116 */
1117HWTEST_F(SkillsBaseTest, AaFwk_Skills_RegionMatches_0100, Function | MediumTest | Level1)
1118{
1119    std::string type = "this is type";
1120    int toffset = -1;
1121    std::string other = "this is other";
1122    int ooffset = -2;
1123    int len = 1;
1124    bool result = base_->RegionMatches(type, toffset, other, ooffset, len);
1125    EXPECT_EQ(result, false);
1126}
1127
1128/**
1129 * @tc.number: AaFwk_Skills_RegionMatches_0200
1130 * @tc.name: RegionMatches
1131 * @tc.desc: Test RegionMatches.
1132 * @tc.require: issueI653GZ
1133 */
1134HWTEST_F(SkillsBaseTest, AaFwk_Skills_RegionMatches_0200, Function | MediumTest | Level1)
1135{
1136    std::string type = "this is type";
1137    int toffset = 1;
1138    std::string other = "this is other";
1139    int ooffset = 2;
1140    int len = 2;
1141    bool result = base_->RegionMatches(type, toffset, other, ooffset, len);
1142    EXPECT_EQ(result, false);
1143
1144    int len1 = 0;
1145    bool result1 = base_->RegionMatches(type, toffset, other, ooffset, len1);
1146    EXPECT_EQ(result1, true);
1147}
1148
1149/**
1150 * @tc.number: AaFwk_Skills_RegionMatches_0300
1151 * @tc.name: RegionMatches
1152 * @tc.desc: Test RegionMatches.
1153 * @tc.require: issueI653GZ
1154 */
1155HWTEST_F(SkillsBaseTest, AaFwk_Skills_RegionMatches_0300, Function | MediumTest | Level1)
1156{
1157    std::string type = "this is type";
1158    int toffset = 1;
1159    std::string other = "this is other";
1160    int ooffset = -2;
1161    int len = 20;
1162    bool result = base_->RegionMatches(type, toffset, other, ooffset, len);
1163    EXPECT_EQ(result, false);
1164}
1165
1166/**
1167 * @tc.number: AaFwk_Skills_MatchEntities_0200
1168 * @tc.name: MatchEntities
1169 * @tc.desc: Test MatchEntities.
1170 * @tc.require: issue
1171 */
1172HWTEST_F(SkillsBaseTest, AaFwk_Skills_MatchEntities_0200, Function | MediumTest | Level1)
1173{
1174    std::vector<std::string> entities;
1175    std::string ret = "";
1176    std::string result = base_->MatchEntities(entities);
1177    EXPECT_EQ(result, ret);
1178}
1179
1180using testParamsType = std::tuple<std::string, std::string>;
1181class SkillsParamsTest : public testing::TestWithParam<testParamsType> {
1182public:
1183    SkillsParamsTest()
1184    {}
1185    ~SkillsParamsTest()
1186    {}
1187    static void SetUpTestCase(void);
1188    static void TearDownTestCase(void);
1189    void SetUp();
1190    void TearDown();
1191    std::shared_ptr<Skills> skills_ = nullptr;
1192};
1193
1194void SkillsParamsTest::SetUpTestCase(void)
1195{}
1196
1197void SkillsParamsTest::TearDownTestCase(void)
1198{}
1199
1200void SkillsParamsTest::SetUp(void)
1201{
1202    skills_ = std::make_shared<Skills>();
1203}
1204
1205void SkillsParamsTest::TearDown(void)
1206{}
1207
1208/**
1209 * @tc.number: AaFwk_Skills_Params_0100
1210 * @tc.name: SetWantParams/GetWantParams
1211 * @tc.desc: Verify addType/removeType result.
1212 */
1213HWTEST_P(SkillsParamsTest, AaFwk_Skills_Params_0100, Function | MediumTest | Level1)
1214{
1215    std::string keyStr = std::get<0>(GetParam());
1216    std::string valueStr = std::get<1>(GetParam());
1217    WantParams wantParams;
1218    wantParams.SetParam(keyStr, String::Box(valueStr));
1219    skills_->SetWantParams(wantParams);
1220    EXPECT_EQ(valueStr, String::Unbox(IString::Query(skills_->GetWantParams().GetParam(keyStr))));
1221}
1222
1223INSTANTIATE_TEST_SUITE_P(SkillsParamsTestCaseP, SkillsParamsTest,
1224    testing::Values(testParamsType("", "asdsdsdasa"), testParamsType(std::string(LARGE_STR_LEN + 1, 's'), "sadsdsdads"),
1225        testParamsType("#$%^&*(!@\":<>{}", "asdsdsdasa"), testParamsType("3456677", ""),
1226        testParamsType("1234", std::string(LARGE_STR_LEN + 1, 's')),
1227        testParamsType("2323sdasdZ", "#$%^&*(!@\":<>{}sadsdasdsaf"), testParamsType("12345667", "sdasdfdsffdgfdg"),
1228        testParamsType("", ""),
1229        testParamsType(std::string(LARGE_STR_LEN + 1, 'k'), std::string(LARGE_STR_LEN + 1, 'k')),
1230        testParamsType("#$%^&*(!@\":<>{},/", "#$%^&*(!@\":<>{},/")));
1231}  // namespace AAFwk
1232}  // namespace OHOS