1 /*
2 * Copyright (c) 2023-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 "pasteboard_client.h"
17 #include "unistd.h"
18 #include <gtest/gtest.h>
19 #include "pasteboard_error.h"
20
21 namespace OHOS::MiscServices {
22 using namespace testing::ext;
23 using namespace testing;
24 using namespace OHOS::Media;
25 constexpr const uid_t EDM_UID = 3057;
26 constexpr int32_t PERCENTAGE = 70;
27 using Patterns = std::set<Pattern>;
28 class PasteboardClientTest : public testing::Test {
29 public:
30 static void SetUpTestCase(void);
31 static void TearDownTestCase(void);
32 void SetUp() override;
33 void TearDown() override;
34 };
35
SetUpTestCase(void)36 void PasteboardClientTest::SetUpTestCase(void)
37 {
38 setuid(EDM_UID);
39 }
40
TearDownTestCase(void)41 void PasteboardClientTest::TearDownTestCase(void)
42 {
43 setuid(0);
44 }
45
SetUp(void)46 void PasteboardClientTest::SetUp(void)
47 {
48 }
49
TearDown(void)50 void PasteboardClientTest::TearDown(void)
51 {
52 }
53
54 /**
55 * @tc.name: IsRemoteData001
56 * @tc.desc: pasteData is local data.
57 * @tc.type: FUNC
58 * @tc.require:
59 * @tc.author:
60 */
61 HWTEST_F(PasteboardClientTest, IsRemoteData001, TestSize.Level0)
62 {
63 std::string plainText = "plain text";
64 auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
65 PasteboardClient::GetInstance()->SetPasteData(*pasteData);
66 bool ret = PasteboardClient::GetInstance()->IsRemoteData();
67 ASSERT_FALSE(ret);
68 }
69
70 /**
71 * @tc.name: IsRemoteData002
72 * @tc.desc: pasteData is remote data.
73 * @tc.type: FUNC
74 * @tc.require:
75 * @tc.author:
76 */
77 HWTEST_F(PasteboardClientTest, IsRemoteData002, TestSize.Level0)
78 {
79 std::string plainText = "plain text";
80 auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
81 pasteData->SetRemote(true);
82 PasteboardClient::GetInstance()->SetPasteData(*pasteData);
83 bool ret = PasteboardClient::GetInstance()->IsRemoteData();
84 ASSERT_TRUE(ret);
85 }
86
87 /**
88 * @tc.name: GetMimeTypes001
89 * @tc.desc: get data type is empty.
90 * @tc.type: FUNC
91 * @tc.require:
92 * @tc.author:
93 */
94 HWTEST_F(PasteboardClientTest, GetMimeTypes001, TestSize.Level0)
95 {
96 PasteboardClient::GetInstance()->Clear();
97 std::vector<std::string> mimeTypes = PasteboardClient::GetInstance()->GetMimeTypes();
98 ASSERT_EQ(0, mimeTypes.size());
99 }
100
101 /**
102 * @tc.name: GetMimeTypes002
103 * @tc.desc: get data type is MIMETYPE_TEXT_PLAIN.
104 * @tc.type: FUNC
105 * @tc.require:
106 * @tc.author:
107 */
108 HWTEST_F(PasteboardClientTest, GetMimeTypes002, TestSize.Level0)
109 {
110 std::string plainText = "helloWorld";
111 auto newData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
112 ASSERT_TRUE(newData);
113 PasteboardClient::GetInstance()->SetPasteData(*newData);
114 std::vector<std::string> mimeTypes = PasteboardClient::GetInstance()->GetMimeTypes();
115 ASSERT_EQ(1, mimeTypes.size());
116 ASSERT_EQ(MIMETYPE_TEXT_PLAIN, mimeTypes[0]);
117 }
118
119 /**
120 * @tc.name: GetMimeTypes003
121 * @tc.desc: data type is MIMETYPE_TEXT_HTML.
122 * @tc.type: FUNC
123 * @tc.require:
124 * @tc.author:
125 */
126 HWTEST_F(PasteboardClientTest, GetMimeTypes003, TestSize.Level0)
127 {
128 std::string htmlText = "<div class='disable'>helloWorld</div>";
129 auto newPasteData = PasteboardClient::GetInstance()->CreateHtmlData(htmlText);
130 ASSERT_TRUE(newPasteData);
131 PasteboardClient::GetInstance()->SetPasteData(*newPasteData);
132 std::vector<std::string> mimeTypes = PasteboardClient::GetInstance()->GetMimeTypes();
133 ASSERT_EQ(1, mimeTypes.size());
134 ASSERT_EQ(MIMETYPE_TEXT_HTML, mimeTypes[0]);
135 }
136
137 /**
138 * @tc.name: GetMimeTypes004
139 * @tc.desc: data type is MIMETYPE_TEXT_URI.
140 * @tc.type: FUNC
141 * @tc.require:
142 * @tc.author:
143 */
144 HWTEST_F(PasteboardClientTest, GetMimeTypes004, TestSize.Level0)
145 {
146 OHOS::Uri uri("uri");
147 auto newPasteData = PasteboardClient::GetInstance()->CreateUriData(uri);
148 ASSERT_TRUE(newPasteData);
149 PasteboardClient::GetInstance()->SetPasteData(*newPasteData);
150 std::vector<std::string> mimeTypes = PasteboardClient::GetInstance()->GetMimeTypes();
151 ASSERT_EQ(1, mimeTypes.size());
152 ASSERT_EQ(MIMETYPE_TEXT_URI, mimeTypes[0]);
153 }
154
155 /**
156 * @tc.name: GetMimeTypes005
157 * @tc.desc: get multi data types.
158 * @tc.type: FUNC
159 * @tc.require:
160 * @tc.author:
161 */
162 HWTEST_F(PasteboardClientTest, GetMimeTypes005, TestSize.Level0)
163 {
164 PasteData data;
165 PasteDataRecord::Builder builder(MIMETYPE_TEXT_URI);
166 std::string uriStr = "/data/test/resource/pasteboardTest.txt";
167 auto uri = std::make_shared<OHOS::Uri>(uriStr);
168 auto record = builder.SetUri(uri).Build();
169 data.AddRecord(*record);
170
171 using namespace OHOS::AAFwk;
172 std::string plainText = "helloWorld";
173 std::shared_ptr<Want> want = std::make_shared<Want>();
174 std::string key = "id";
175 int32_t id = 456;
176 Want wantIn = want->SetParam(key, id);
177 PasteDataRecord::Builder builder2(MIMETYPE_TEXT_WANT);
178 std::shared_ptr<PasteDataRecord> pasteDataRecord = builder2.SetWant(std::make_shared<Want>(wantIn)).Build();
179 data.AddRecord(pasteDataRecord);
180
181 const uint32_t color[] = {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80};
182 uint32_t len = sizeof(color) / sizeof(color[0]);
183 Media::InitializationOptions opts;
184 std::shared_ptr<OHOS::Media::PixelMap> pixelMap = Media::PixelMap::Create(color, len, 0, 2, opts);
185 PasteDataRecord::Builder builder3(MIMETYPE_PIXELMAP);
186 auto record3 = builder3.SetPixelMap(pixelMap).Build();
187 data.AddRecord(*record3);
188 PasteDataRecord::Builder builder4(MIMETYPE_TEXT_URI);
189 std::string uriStr4 = "/data/test/resource/pasteboardTest.txt";
190 auto uri4 = std::make_shared<OHOS::Uri>(uriStr4);
191 auto record4 = builder.SetUri(uri4).Build();
192 data.AddRecord(*record4);
193
194 PasteboardClient::GetInstance()->SetPasteData(data);
195 std::vector<std::string> mimeTypes = PasteboardClient::GetInstance()->GetMimeTypes();
196 ASSERT_EQ(3, mimeTypes.size());
197 std::set<std::string> mimeTypesSet(mimeTypes.begin(), mimeTypes.end());
198 ASSERT_EQ(3, mimeTypesSet.size());
199 for (const std::string &type : mimeTypesSet) {
200 ASSERT_TRUE(MIMETYPE_TEXT_WANT == type ||
201 MIMETYPE_PIXELMAP == type ||
202 MIMETYPE_TEXT_URI == type);
203 }
204 }
205
206 /**
207 * @tc.name: HasDataType001
208 * @tc.desc: data type is MIMETYPE_TEXT_PLAIN.
209 * @tc.type: FUNC
210 * @tc.require:
211 * @tc.author:
212 */
213 HWTEST_F(PasteboardClientTest, HasDataType001, TestSize.Level0)
214 {
215 std::string plainText = "helloWorld";
216 auto newData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
217 PasteboardClient::GetInstance()->SetPasteData(*newData);
218 auto ret = PasteboardClient::GetInstance()->HasDataType(MIMETYPE_TEXT_PLAIN);
219 ASSERT_TRUE(ret);
220 auto result = PasteboardClient::GetInstance()->HasDataType(MIMETYPE_TEXT_URI);
221 ASSERT_FALSE(result);
222 }
223
224 /**
225 * @tc.name: HasDataType002
226 * @tc.desc: data type is MIMETYPE_TEXT_HTML.
227 * @tc.type: FUNC
228 * @tc.require:
229 * @tc.author:
230 */
231 HWTEST_F(PasteboardClientTest, HasDataType002, TestSize.Level0)
232 {
233 std::string htmlText = "<div class='disable'>helloWorld</div>";
234 auto newPasteData = PasteboardClient::GetInstance()->CreateHtmlData(htmlText);
235 PasteboardClient::GetInstance()->SetPasteData(*newPasteData);
236 auto ret = PasteboardClient::GetInstance()->HasDataType(MIMETYPE_TEXT_HTML);
237 ASSERT_TRUE(ret);
238 auto result = PasteboardClient::GetInstance()->HasDataType(MIMETYPE_TEXT_PLAIN);
239 ASSERT_FALSE(result);
240 }
241
242 /**
243 * @tc.name: HasDataType003
244 * @tc.desc: data type is MIMETYPE_TEXT_URI
245 * @tc.type: FUNC
246 * @tc.require:
247 * @tc.author:
248 */
249 HWTEST_F(PasteboardClientTest, HasDataType003, TestSize.Level0)
250 {
251 OHOS::Uri uri("uri");
252 auto newPasteData = PasteboardClient::GetInstance()->CreateUriData(uri);
253 PasteboardClient::GetInstance()->SetPasteData(*newPasteData);
254 auto ret = PasteboardClient::GetInstance()->HasDataType(MIMETYPE_TEXT_URI);
255 ASSERT_TRUE(ret);
256 auto result = PasteboardClient::GetInstance()->HasDataType(MIMETYPE_TEXT_PLAIN);
257 ASSERT_FALSE(result);
258 }
259
260 /**
261 * @tc.name: HasDataType004
262 * @tc.desc: data type is MIMETYPE_PIXELMAP
263 * @tc.type: FUNC
264 * @tc.require:
265 * @tc.author:
266 */
267 HWTEST_F(PasteboardClientTest, HasDataType004, TestSize.Level0)
268 {
269 uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
270 InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888 };
271 std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, sizeof(color) / sizeof(color[0]), opts);
272 std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
273 auto newPasteData = PasteboardClient::GetInstance()->CreatePixelMapData(pixelMapIn);
274 PasteboardClient::GetInstance()->SetPasteData(*newPasteData);
275 auto ret = PasteboardClient::GetInstance()->HasDataType(MIMETYPE_PIXELMAP);
276 ASSERT_TRUE(ret);
277 auto result = PasteboardClient::GetInstance()->HasDataType(MIMETYPE_TEXT_URI);
278 ASSERT_FALSE(result);
279 }
280
281 /**
282 * @tc.name: GetDataSource001
283 * @tc.desc: Get the source of the data.
284 * @tc.type: FUNC
285 * @tc.require:
286 * @tc.author:
287 */
288 HWTEST_F(PasteboardClientTest, GetDataSource001, TestSize.Level0)
289 {
290 std::string plainText = "helloWorld";
291 auto newData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
292 PasteboardClient::GetInstance()->SetPasteData(*newData);
293 std::string bundleName;
294 PasteboardClient::GetInstance()->GetDataSource(bundleName);
295 EXPECT_FALSE(bundleName.empty());
296 }
297
298 /**
299 * @tc.name: SetGlobalShareOption
300 * @tc.desc: Set global shareOption
301 * @tc.type: FUNC
302 * @tc.require:
303 * @tc.author:
304 */
305 HWTEST_F(PasteboardClientTest, SetGlobalShareOption, TestSize.Level0)
306 {
307 std::map<uint32_t, ShareOption> settings = {
308 {100, ShareOption::InApp},
309 {200, ShareOption::LocalDevice},
310 {300, ShareOption::CrossDevice}};
311 PasteboardClient::GetInstance()->SetGlobalShareOption(settings);
312 auto result = PasteboardClient::GetInstance()->GetGlobalShareOption({});
313 EXPECT_TRUE(result.size() == 3);
314 EXPECT_EQ(result[100], ShareOption::InApp);
315 EXPECT_EQ(result[200], ShareOption::LocalDevice);
316 EXPECT_EQ(result[300], ShareOption::CrossDevice);
317 std::map<uint32_t, ShareOption> modify = {{100, ShareOption::CrossDevice},
318 {400, ShareOption::InApp}};
319 PasteboardClient::GetInstance()->SetGlobalShareOption(modify);
320 result = PasteboardClient::GetInstance()->GetGlobalShareOption({});
321 EXPECT_TRUE(result.size() == 4);
322 EXPECT_EQ(result[100], ShareOption::CrossDevice);
323 EXPECT_EQ(result[400], ShareOption::InApp);
324 PasteboardClient::GetInstance()->RemoveGlobalShareOption({100, 200, 300, 400});
325 }
326
327 /**
328 * @tc.name: GetGlobalShareOption
329 * @tc.desc: Get global shareOption
330 * @tc.type: FUNC
331 * @tc.require:
332 * @tc.author:
333 */
334 HWTEST_F(PasteboardClientTest, GetGlobalShareOption, TestSize.Level0)
335 {
336 std::map<uint32_t, ShareOption> settings = {
337 {100, ShareOption::InApp},
338 {200, ShareOption::LocalDevice},
339 {300, ShareOption::CrossDevice}};
340 PasteboardClient::GetInstance()->SetGlobalShareOption(settings);
341 auto result = PasteboardClient::GetInstance()->GetGlobalShareOption({});
342 EXPECT_TRUE(result.size() == 3);
343 EXPECT_EQ(result[100], ShareOption::InApp);
344 EXPECT_EQ(result[200], ShareOption::LocalDevice);
345 EXPECT_EQ(result[300], ShareOption::CrossDevice);
346 result = PasteboardClient::GetInstance()->GetGlobalShareOption({100, 400});
347 EXPECT_TRUE(result.size() == 1);
348 EXPECT_EQ(result[100], ShareOption::InApp);
349 EXPECT_TRUE(result.find(400) == result.end());
350 PasteboardClient::GetInstance()->RemoveGlobalShareOption({100, 200, 300});
351 }
352
353 /**
354 * @tc.name: RemoveGlobalShareOption
355 * @tc.desc: Remove global shareOption
356 * @tc.type: FUNC
357 * @tc.require:
358 * @tc.author:
359 */
360 HWTEST_F(PasteboardClientTest, RemoveGlobalShareOption, TestSize.Level0)
361 {
362 std::map<uint32_t, ShareOption> settings = {
363 {100, ShareOption::InApp},
364 {200, ShareOption::LocalDevice},
365 {300, ShareOption::CrossDevice}};
366 PasteboardClient::GetInstance()->SetGlobalShareOption(settings);
367 auto result = PasteboardClient::GetInstance()->GetGlobalShareOption({});
368 EXPECT_TRUE(result.size() == 3);
369 EXPECT_EQ(result[100], ShareOption::InApp);
370 EXPECT_EQ(result[200], ShareOption::LocalDevice);
371 EXPECT_EQ(result[300], ShareOption::CrossDevice);
372 PasteboardClient::GetInstance()->RemoveGlobalShareOption({});
373 result = PasteboardClient::GetInstance()->GetGlobalShareOption({});
374 EXPECT_TRUE(result.size() == 3);
375 PasteboardClient::GetInstance()->RemoveGlobalShareOption({100, 400});
376 result = PasteboardClient::GetInstance()->GetGlobalShareOption({});
377 EXPECT_TRUE(result.size() == 2);
378 EXPECT_TRUE(result.find(100) == result.end());
379 PasteboardClient::GetInstance()->RemoveGlobalShareOption({200, 300});
380 }
381
382 /**
383 * @tc.name: DetectPatterns001
384 * @tc.desc: Cover Permutation
385 * @tc.type: FUNC
386 * @tc.require:
387 * @tc.author:
388 */
389 HWTEST_F(PasteboardClientTest, DetectPatterns001, TestSize.Level0)
390 {
391 std::string plainText("r法塔赫已经,速tdghf!】qd rqdswww.comsski,.sjopwe"
392 "ihhtpsdhttp我也带过去给他№のjioijhhu");
393 std::string plainText0("https://giedqwrtheeeeeefub.cerm/meeeelkove/obaklo_tjokl"
394 "psetkjdttk/bkkjob/mwjweww.md)");
395 std::string plainText1("2我就破888芙蓉王82h7");
396 std::string plainText2("uhiyqydueuw@kahqw.oisko.sji");
397
398 std::vector<std::string> plainTextVec{
399 plainText, plainText+plainText0, plainText+plainText1, plainText+plainText2,
400 plainText+plainText0+plainText1, plainText0+plainText2+plainText, plainText1+plainText+plainText2,
401 plainText0+plainText1+plainText+plainText2
402 };
403 std::vector<Patterns> patternsVec{
404 {}, {Pattern::URL}, {Pattern::Number}, {Pattern::EmailAddress},
405 {Pattern::URL, Pattern::Number}, {Pattern::URL, Pattern::EmailAddress},
406 {Pattern::Number, Pattern::EmailAddress}, {Pattern::URL, Pattern::Number, Pattern::EmailAddress}
407 };
408 std::vector<std::vector<int>> patternsRightIndexVec{
409 {0, 0, 0, 0, 0, 0, 0, 0},
410 {0, 1, 0, 0, 1, 1, 0, 1},
411 {0, 0, 2, 0, 2, 0, 2, 2},
412 {0, 0, 0, 3, 0, 3, 3, 3},
413 {0, 1, 2, 0, 4, 1, 2, 4},
414 {0, 1, 0, 3, 1, 5, 3, 5},
415 {0, 0, 2, 3, 2, 3, 6, 6},
416 {0, 1, 2, 3, 4, 5, 6, 7}
417 };
418 for (int i = 0; i != 8; ++i) {
419 for (int j = 0; j != 8; ++j) {
420 auto newData = PasteboardClient::GetInstance()->CreatePlainTextData(
421 plainTextVec[i]);
422 PasteboardClient::GetInstance()->SetPasteData(*newData);
423 auto ret = PasteboardClient::GetInstance()->DetectPatterns(
424 patternsVec[j]);
425 int rightIndex = patternsRightIndexVec[i][j];
426 ASSERT_EQ(ret, patternsVec[rightIndex]);
427 }
428 }
429 }
430
431 /**
432 * @tc.name: DetectPatterns002
433 * @tc.desc: check HTML
434 * @tc.type: FUNC
435 * @tc.require:
436 * @tc.author:
437 */
438 HWTEST_F(PasteboardClientTest, DetectPatterns002, TestSize.Level0)
439 {
440 std::string htmlText1 = "<!DOCTYPE html><html><head><title>"
441 "超链案头研究。,封为啊啊</title></head><body><h2>发高热</h2>"
442 "<p>隔热隔热的氛围<a href=\"https://exq23amwerwqple.com\">"
443 "个人网站https://ex24t33tamp65hhle.com</a>。</p></body></html>";
444 auto newData1 = PasteboardClient::GetInstance()->CreateHtmlData(htmlText1);
445 PasteboardClient::GetInstance()->SetPasteData(*newData1);
446 Patterns patternsToCheck1{Pattern::URL, Pattern::EmailAddress};
447 auto ret1 = PasteboardClient::GetInstance()->DetectPatterns(patternsToCheck1);
448 Patterns expected1{Pattern::URL};
449 ASSERT_EQ(ret1, expected1);
450
451 std::string htmlText2 = "<!DOCTYPE html><html><head><title>"
452 "各个环节</title></head><body><h2>妈妈那边的</h2>"
453 "<p>啊啊分,凤凰方法,环境https://examjjuyewple.com问我的<a href=\"https://ehhgxametgeple.com\">"
454 "阿婆吗weqkqo@exaetmple.com</a>。????打法</p></body></html>";
455 auto newData2 = PasteboardClient::GetInstance()->CreateHtmlData(htmlText2);
456 PasteboardClient::GetInstance()->SetPasteData(*newData2);
457 Patterns patternsToCheck2{Pattern::URL, Pattern::EmailAddress, Pattern::Number};
458 auto ret2 = PasteboardClient::GetInstance()->DetectPatterns(patternsToCheck2);
459 Patterns expected2{Pattern::URL, Pattern::EmailAddress};
460 ASSERT_EQ(ret2, expected2);
461 }
462
463 /**
464 * @tc.name: DetectPatterns003
465 * @tc.desc: Outlier force cast uint32_t to unsurportted Pattern
466 * @tc.type: FUNC
467 * @tc.require:
468 * @tc.author:
469 */
470 HWTEST_F(PasteboardClientTest, DetectPatterns003, TestSize.Level0)
471 {
472 std::string plainText1 = "部分人的十点半:\n"
473 "「而飞过海」\n"
474 "方法:\n"
475 "https://pr5yyye-drseyive.u54yk.cwerfe/s/42e1ewed77f3dab4"
476 "网gest加尔文iqru发的我ui哦计划任务i文化人:\n"
477 "~b0043fg3423tddj~";
478 auto newData1 = PasteboardClient::GetInstance()->CreatePlainTextData(plainText1);
479 PasteboardClient::GetInstance()->SetPasteData(*newData1);
480 Patterns patternsToCheck{
481 Pattern::Number, Pattern::URL, Pattern::EmailAddress, static_cast<Pattern>(1023)};
482 auto ret1 = PasteboardClient::GetInstance()->DetectPatterns(patternsToCheck);
483 Patterns expected1{};
484 ASSERT_EQ(ret1, expected1);
485 std::string plainText2 = "【撒迪化,等我i却很难,无穷花的!】"
486 "额外i卡号!念佛为?,为单位打开陪我。而奋斗,我去二队去,威威:trfwrtg"
487 "(¥¥软骨素用人员为bdfdgse https://tgrthwerrwt.com/marrkerrerlorrve/ usrdq12_22swe@16rtgre3.com)";
488 auto newData2 = PasteboardClient::GetInstance()->CreatePlainTextData(plainText2);
489 PasteboardClient::GetInstance()->SetPasteData(*newData2);
490 auto ret2 = PasteboardClient::GetInstance()->DetectPatterns(patternsToCheck);
491 Patterns expected2{};
492 ASSERT_EQ(ret2, expected2);
493 std::string plainText3 = "【撒迪化,等我i却很难,无穷花的!】"
494 "额外i卡号!念佛为?,为单位打开陪我。而奋斗,我去二队去,威威:trfwrtg";
495 auto newData3 = PasteboardClient::GetInstance()->CreatePlainTextData(plainText3);
496 PasteboardClient::GetInstance()->SetPasteData(*newData3);
497 auto ret3 = PasteboardClient::GetInstance()->DetectPatterns(patternsToCheck);
498 ASSERT_EQ(ret3, Patterns{});
499 }
500
501 /**
502 * @tc.name: DetectPatterns004
503 * @tc.desc: Outlier force cast uint32_t 0xffffffff to unsurportted Pattern
504 * @tc.type: FUNC
505 * @tc.require:
506 * @tc.author:
507 */
508 HWTEST_F(PasteboardClientTest, DetectPatterns004, TestSize.Level0)
509 {
510 std::string plainText1 = "部分人的十点半:\n"
511 "「而飞过海」\n"
512 "方法:\n"
513 "https://pr5yyye-drseyive.u54yk.cwerfe/s/42e1ewed77f3dab4"
514 "网gest加尔文iqru发的我ui哦计划任务i文化人:\n"
515 "~b0043fg3423tddj~";
516 auto newData1 = PasteboardClient::GetInstance()->CreatePlainTextData(plainText1);
517 PasteboardClient::GetInstance()->SetPasteData(*newData1);
518 std::set<Pattern> patternsToCheck{
519 Pattern::Number, Pattern::URL, Pattern::EmailAddress,
520 static_cast<Pattern>(0xffffffff), static_cast<Pattern>(0xffffff1a)};
521 auto ret1 = PasteboardClient::GetInstance()->DetectPatterns(patternsToCheck);
522 std::set<Pattern> expected1{};
523 ASSERT_EQ(ret1, expected1);
524 std::string plainText2 = "【撒迪化,等我i却很难,无穷花的!】"
525 "额外i卡号!念佛为?,为单位打开陪我。而奋斗,我去二队去,威威:trfwrtg"
526 "(¥¥软骨素用人员为bdfdgse https://tgrthwerrwt.com/marrkerrerlorrve/ usrdq12_22swe@16rtgre3.com)";
527 auto newData2 = PasteboardClient::GetInstance()->CreatePlainTextData(plainText2);
528 PasteboardClient::GetInstance()->SetPasteData(*newData2);
529 auto ret2 = PasteboardClient::GetInstance()->DetectPatterns(patternsToCheck);
530 std::set<Pattern> expected2{};
531 ASSERT_EQ(ret2, expected2);
532 std::string plainText3 = "【撒迪化,等我i却很难,无穷花的!】"
533 "额外i卡号!念佛为?,为单位打开陪我。而奋斗,我去二队去,威威:trfwrtg";
534 auto newData3 = PasteboardClient::GetInstance()->CreatePlainTextData(plainText3);
535 PasteboardClient::GetInstance()->SetPasteData(*newData3);
536 auto ret3 = PasteboardClient::GetInstance()->DetectPatterns(patternsToCheck);
537 ASSERT_EQ(ret3, std::set<Pattern>{});
538 }
539
ProgressNotify(std::shared_ptr<GetDataParams> params)540 void ProgressNotify(std::shared_ptr<GetDataParams> params)
541 {
542 if (params == nullptr) {
543 printf("Error: params is nullptr\n");
544 return;
545 }
546
547 if (params->info == nullptr) {
548 printf("Error: params->info is nullptr\n");
549 return;
550 }
551
552 printf("percentage=%d\n", params->info->percentage);
553 }
554
555 /**
556 * @tc.name: GetDataWithProgress001
557 * @tc.desc: Getting data without system default progress indicator.
558 * @tc.type: FUNC
559 * @tc.require:
560 * @tc.author:
561 */
562 HWTEST_F(PasteboardClientTest, GetDataWithProgress001, TestSize.Level0)
563 {
564 std::string plainText = "helloWorld";
565 auto newData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
566 ASSERT_TRUE(newData != nullptr);
567 PasteboardClient::GetInstance()->SetPasteData(*newData);
568 PasteData pasteData;
569 std::shared_ptr<GetDataParams> params = std::make_shared<GetDataParams>();
570 params->fileConflictOption = FILE_OVERWRITE;
571 params->progressIndicator = NONE_PROGRESS_INDICATOR;
572 params->listener.ProgressNotify = ProgressNotify;
573 int32_t ret = PasteboardClient::GetInstance()->GetDataWithProgress(pasteData, params);
574 ASSERT_EQ(ret, static_cast<int32_t>(PasteboardError::E_OK));
575 }
576
577 /**
578 * @tc.name: GetDataWithProgress002
579 * @tc.desc: Getting data with system default progress indicator.
580 * @tc.type: FUNC
581 * @tc.require:
582 * @tc.author:
583 */
584 HWTEST_F(PasteboardClientTest, GetDataWithProgress002, TestSize.Level0)
585 {
586 std::string plainText = "helloWorld";
587 auto newData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
588 ASSERT_TRUE(newData != nullptr);
589 PasteboardClient::GetInstance()->SetPasteData(*newData);
590 PasteData pasteData;
591 std::shared_ptr<GetDataParams> params = std::make_shared<GetDataParams>();
592 params->fileConflictOption = FILE_OVERWRITE;
593 params->progressIndicator = DEFAULT_PROGRESS_INDICATOR;
594 int32_t ret = PasteboardClient::GetInstance()->GetDataWithProgress(pasteData, params);
595 ASSERT_EQ(ret, static_cast<int32_t>(PasteboardError::E_OK));
596 }
597
ProgressNotifyTest(std::shared_ptr<GetDataParams> params)598 void ProgressNotifyTest(std::shared_ptr<GetDataParams> params)
599 {
600 if (params == nullptr) {
601 printf("Error: params is nullptr\n");
602 return;
603 }
604
605 if (params->info == nullptr) {
606 printf("Error: params->info is nullptr\n");
607 return;
608 }
609
610 printf("percentage=%d\n", params->info->percentage);
611 if (params->info->percentage == PERCENTAGE) {
612 ProgressSignalClient::GetInstance().Cancel();
613 }
614 }
615
616 /**
617 * @tc.name: GetDataWithProgress003
618 * @tc.desc: When the progress reaches 70, the download is canceled.
619 * @tc.type: FUNC
620 * @tc.require:
621 * @tc.author:
622 */
623 HWTEST_F(PasteboardClientTest, GetDataWithProgress003, TestSize.Level0)
624 {
625 std::string plainText = "helloWorld";
626 auto newData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
627 ASSERT_TRUE(newData != nullptr);
628 PasteboardClient::GetInstance()->SetPasteData(*newData);
629 PasteData pasteData;
630 std::shared_ptr<GetDataParams> params = std::make_shared<GetDataParams>();
631 params->fileConflictOption = FILE_OVERWRITE;
632 params->progressIndicator = NONE_PROGRESS_INDICATOR;
633 params->listener.ProgressNotify = ProgressNotifyTest;
634 int32_t ret = PasteboardClient::GetInstance()->GetDataWithProgress(pasteData, params);
635 ASSERT_EQ(ret, static_cast<int32_t>(PasteboardError::E_OK));
636 }
637
638 /**
639 * @tc.name: GetDataWithProgress004
640 * @tc.desc: GetDataWithProgress test.
641 * @tc.type: FUNC
642 * @tc.require:
643 * @tc.author:
644 */
645 HWTEST_F(PasteboardClientTest, GetDataWithProgress004, TestSize.Level0)
646 {
647 PasteData pasteData;
648 int32_t ret = PasteboardClient::GetInstance()->GetDataWithProgress(pasteData, nullptr);
649 ASSERT_EQ(ret, static_cast<int32_t>(PasteboardError::INVALID_PARAM_ERROR));
650 std::string plainText = "helloWorld";
651 auto newData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
652 ASSERT_TRUE(newData != nullptr);
653 PasteboardClient::GetInstance()->SetPasteData(*newData);
654 std::shared_ptr<GetDataParams> params = std::make_shared<GetDataParams>();
655 params->fileConflictOption = FILE_OVERWRITE;
656 params->progressIndicator = NONE_PROGRESS_INDICATOR;
657 ret = PasteboardClient::GetInstance()->GetDataWithProgress(pasteData, params);
658 ASSERT_EQ(ret, static_cast<int32_t>(PasteboardError::E_OK));
659 }
660
661 /**
662 * @tc.name: GetDataWithProgress005
663 * @tc.desc: GetDataWithProgress test.
664 * @tc.type: FUNC
665 * @tc.require:
666 * @tc.author:
667 */
668 HWTEST_F(PasteboardClientTest, GetDataWithProgress005, TestSize.Level0)
669 {
670 PasteData pasteData;
671 std::string plainText = "helloWorld";
672 auto newData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
673 ASSERT_TRUE(newData != nullptr);
674 PasteboardClient::GetInstance()->SetPasteData(*newData);
675 std::shared_ptr<GetDataParams> params = std::make_shared<GetDataParams>();
676 params->fileConflictOption = FILE_OVERWRITE;
677 params->progressIndicator = DEFAULT_PROGRESS_INDICATOR;
678 int32_t ret = PasteboardClient::GetInstance()->GetDataWithProgress(pasteData, params);
679 ASSERT_EQ(ret, static_cast<int32_t>(PasteboardError::E_OK));
680 }
681 } // namespace OHOS::MiscServices