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