• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include <chrono>
16 #include <cstdint>
17 #include <gtest/gtest.h>
18 #include <thread>
19 #include <unistd.h>
20 #include <vector>
21 #include <iservice_registry.h>
22 
23 #include "access_token.h"
24 #include "accesstoken_kit.h"
25 #include "hap_token_info.h"
26 #include "message_parcel_warp.h"
27 #include "os_account_manager.h"
28 #include "pasteboard_client.h"
29 #include "pasteboard_error.h"
30 #include "pasteboard_hilog.h"
31 #include "pasteboard_observer_callback.h"
32 #include "pasteboard_service_loader.h"
33 #include "permission_state_full.h"
34 #include "pixel_map.h"
35 #include "token_setproc.h"
36 #include "uri.h"
37 #include "want.h"
38 
39 namespace OHOS::MiscServices {
40 using namespace testing::ext;
41 using namespace OHOS::Media;
42 using namespace OHOS::Security::AccessToken;
43 constexpr const char *CMD = "hidumper -s 3701 -a --data";
44 constexpr const uint16_t EACH_LINE_LENGTH = 50;
45 constexpr const uint16_t TOTAL_LENGTH = 500;
46 constexpr const int32_t EDM_UID = 3057;
47 constexpr int32_t MIN_ASHMEM_DATA_SIZE = 32 * 1024;
48 const uint64_t SYSTEM_APP_MASK = (static_cast<uint64_t>(1) << 32);
49 std::string g_webviewPastedataTag = "WebviewPasteDataTag";
50 class PasteboardServiceTest : public testing::Test {
51 public:
52     static void SetUpTestCase(void);
53     static void TearDownTestCase(void);
54     void SetUp();
55     void TearDown();
56     static bool ExecuteCmd(std::string &result);
57 
58     static void AllocTestAppTokenId();
59     static void DeleteTestTokenId();
60     static void RestoreSelfTokenId();
61     static void CommonTest(PasteData &oldPasteData, PasteData &newPasteData);
62     static sptr<PasteboardObserver> pasteboardObserver_;
63     static sptr<PasteboardObserver> pasteboardEventObserver_;
64     static std::atomic_bool pasteboardChangedFlag_;
65     static std::atomic_int32_t pasteboardEventStatus_;
66     static uint64_t selfTokenId_;
67     static AccessTokenID testAppTokenId_;
68 };
69 std::atomic_bool PasteboardServiceTest::pasteboardChangedFlag_ = false;
70 std::atomic_int32_t PasteboardServiceTest::pasteboardEventStatus_ = -1;
71 sptr<PasteboardObserver> PasteboardServiceTest::pasteboardObserver_ = nullptr;
72 sptr<PasteboardObserver> PasteboardServiceTest::pasteboardEventObserver_ = nullptr;
73 uint64_t PasteboardServiceTest::selfTokenId_ = 0;
74 AccessTokenID PasteboardServiceTest::testAppTokenId_ = 0;
75 
SetUpTestCase(void)76 void PasteboardServiceTest::SetUpTestCase(void)
77 {
78     selfTokenId_ = GetSelfTokenID();
79     AllocTestAppTokenId();
80 }
81 
TearDownTestCase(void)82 void PasteboardServiceTest::TearDownTestCase(void)
83 {
84     DeleteTestTokenId();
85 }
86 
SetUp(void)87 void PasteboardServiceTest::SetUp(void) { }
88 
TearDown(void)89 void PasteboardServiceTest::TearDown(void)
90 {
91     if (PasteboardServiceTest::pasteboardObserver_ != nullptr) {
92         PasteboardClient::GetInstance()->RemovePasteboardEventObserver(PasteboardServiceTest::pasteboardObserver_);
93     }
94     if (PasteboardServiceTest::pasteboardEventObserver_ != nullptr) {
95         PasteboardClient::GetInstance()->RemovePasteboardEventObserver(PasteboardServiceTest::pasteboardEventObserver_);
96     }
97     PasteboardClient::GetInstance()->Clear();
98     PASTEBOARD_HILOGI(PASTEBOARD_MODULE_SERVICE, "TearDown.");
99 }
100 
OnPasteboardChanged()101 void PasteboardObserverCallback::OnPasteboardChanged()
102 {
103     PasteboardServiceTest::pasteboardChangedFlag_ = true;
104     PASTEBOARD_HILOGI(PASTEBOARD_MODULE_SERVICE, "test changed callback.");
105 }
106 
OnPasteboardEvent(std::string bundleName,int32_t status)107 void PasteboardEventObserverCallback::OnPasteboardEvent(std::string bundleName, int32_t status)
108 {
109     PasteboardServiceTest::pasteboardEventStatus_ = status;
110     PASTEBOARD_HILOGI(PASTEBOARD_MODULE_SERVICE, "test event callback bundleName: %{public}s,status:%{public}d",
111         bundleName.c_str(), status);
112 }
113 
ExecuteCmd(std::string & result)114 bool PasteboardServiceTest::ExecuteCmd(std::string &result)
115 {
116     char buff[EACH_LINE_LENGTH] = { 0x00 };
117     char output[TOTAL_LENGTH] = { 0x00 };
118     FILE *ptr = nullptr;
119     if ((ptr = popen(CMD, "r")) != nullptr) {
120         while (fgets(buff, sizeof(buff), ptr) != nullptr) {
121             if (strcat_s(output, sizeof(output), buff) != 0) {
122                 pclose(ptr);
123                 ptr = nullptr;
124                 return false;
125             }
126         }
127         pclose(ptr);
128         ptr = nullptr;
129     } else {
130         return false;
131     }
132     result = std::string(output);
133     return true;
134 }
135 
AllocTestAppTokenId()136 void PasteboardServiceTest::AllocTestAppTokenId()
137 {
138     HapInfoParams infoParams = { .userID = EDM_UID,
139         .bundleName = "ohos.privacy_test.pasteboard",
140         .instIndex = 0,
141         .appIDDesc = "privacy_test.pasteboard" };
142     PermissionStateFull testState = { .permissionName = "ohos.permission.MANAGE_PASTEBOARD_APP_SHARE_OPTION",
143         .isGeneral = true,
144         .resDeviceID = { "local" },
145         .grantStatus = { PermissionState::PERMISSION_GRANTED },
146         .grantFlags = { 1 } };
147     HapPolicyParams policyParams = { .apl = APL_NORMAL,
148         .domain = "test.domain.pasteboard",
149         .permList = {},
150         .permStateList = { testState } };
151 
152     AccessTokenKit::AllocHapToken(infoParams, policyParams);
153     testAppTokenId_ = Security::AccessToken::AccessTokenKit::GetHapTokenID(
154         infoParams.userID, infoParams.bundleName, infoParams.instIndex);
155     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_SERVICE, "userID = %{public}d, testTokenId = 0x%{public}x.", infoParams.userID,
156         testAppTokenId_);
157 }
158 
DeleteTestTokenId()159 void PasteboardServiceTest::DeleteTestTokenId()
160 {
161     AccessTokenKit::DeleteToken(testAppTokenId_);
162 }
163 
RestoreSelfTokenId()164 void PasteboardServiceTest::RestoreSelfTokenId()
165 {
166     auto ret = SetSelfTokenID(selfTokenId_);
167     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_SERVICE, "ret = %{public}d!", ret);
168 }
169 
CommonTest(PasteData & oldPasteData,PasteData & newPasteData)170 void PasteboardServiceTest::CommonTest(PasteData &oldPasteData, PasteData &newPasteData)
171 {
172     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_SERVICE, "start.");
173     PasteboardClient::GetInstance()->Clear();
174     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
175     ASSERT_TRUE(hasPasteData != true);
176     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(oldPasteData);
177     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
178     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
179     ASSERT_TRUE(hasPasteData == true);
180     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
181     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
182     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_SERVICE, "end.");
183 }
184 
GetTime()185 string GetTime()
186 {
187     time_t curtime;
188     time(&curtime);
189     tm *nowtime = localtime(&curtime);
190     std::string targetTime = std::to_string(1900 + nowtime->tm_year) + "-" + std::to_string(1 + nowtime->tm_mon) + "-" +
191         std::to_string(nowtime->tm_mday) + " " + std::to_string(nowtime->tm_hour) + ":" +
192         std::to_string(nowtime->tm_min) + ":" + std::to_string(nowtime->tm_sec);
193     return targetTime;
194 }
195 
196 /**
197  * @tc.name: PasteboardTest001
198  * @tc.desc: Create paste board test.
199  * @tc.type: FUNC
200  */
201 HWTEST_F(PasteboardServiceTest, PasteboardTest001, TestSize.Level0)
202 {
203     auto record = PasteboardClient::GetInstance()->CreatePlainTextRecord("paste record1");
204     ASSERT_TRUE(record != nullptr);
205     std::string plainText = "plain text";
206     auto data = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
207     ASSERT_TRUE(data != nullptr);
208     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
209     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
210     auto has = PasteboardClient::GetInstance()->HasPasteData();
211     ASSERT_TRUE(has == true);
212     PasteData pasteData;
213     ret = PasteboardClient::GetInstance()->GetPasteData(pasteData);
214     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
215     PASTEBOARD_HILOGI(PASTEBOARD_MODULE_SERVICE, "get.");
216     auto primaryText = pasteData.GetPrimaryText();
217     ASSERT_TRUE(primaryText != nullptr);
218     ASSERT_TRUE(*primaryText == plainText);
219 }
220 
221 /**
222  * @tc.name: PasteRecordTest001
223  * @tc.desc: Create paste board record test.
224  * @tc.type: FUNC
225  */
226 HWTEST_F(PasteboardServiceTest, PasteRecordTest001, TestSize.Level0)
227 {
228     std::string plainText = "helloWorld";
229     auto record = PasteboardClient::GetInstance()->CreatePlainTextRecord(plainText);
230     ASSERT_TRUE(record != nullptr);
231     auto newPlainText = record->GetPlainTextV0();
232     ASSERT_TRUE(newPlainText != nullptr);
233     ASSERT_TRUE(*newPlainText == plainText);
234 }
235 
236 /**
237  * @tc.name: PasteRecordTest002
238  * @tc.desc: Create paste board record test.
239  * @tc.type: FUNC
240  */
241 HWTEST_F(PasteboardServiceTest, PasteRecordTest002, TestSize.Level0)
242 {
243     std::string htmlText = "<div class='disabled item tip user-programs'>";
244     auto record = PasteboardClient::GetInstance()->CreateHtmlTextRecord(htmlText);
245     ASSERT_TRUE(record != nullptr);
246     auto newHtmlText = record->GetHtmlTextV0();
247     ASSERT_TRUE(newHtmlText != nullptr);
248     ASSERT_TRUE(*newHtmlText == htmlText);
249 }
250 
251 /**
252  * @tc.name: PasteRecordTest003
253  * @tc.desc: Create paste board record test.
254  * @tc.type: FUNC
255  */
256 HWTEST_F(PasteboardServiceTest, PasteRecordTest003, TestSize.Level0)
257 {
258     using namespace OHOS::AAFwk;
259     std::shared_ptr<Want> want = std::make_shared<Want>();
260     std::string key = "id";
261     int32_t id = 456;
262     Want wantIn = want->SetParam(key, id);
263     auto record = PasteboardClient::GetInstance()->CreateWantRecord(want);
264     ASSERT_TRUE(record != nullptr);
265     auto newWant = record->GetWant();
266     ASSERT_TRUE(newWant != nullptr);
267     int32_t defaultValue = 333;
268     ASSERT_TRUE(newWant->GetIntParam(key, defaultValue) == id);
269 }
270 
271 /**
272  * @tc.name: PasteRecordTest004
273  * @tc.desc: Create paste board record test.
274  * @tc.type: FUNC
275  */
276 HWTEST_F(PasteboardServiceTest, PasteRecordTest004, TestSize.Level0)
277 {
278     OHOS::Uri uri("uri");
279     auto record = PasteboardClient::GetInstance()->CreateUriRecord(uri);
280     ASSERT_TRUE(record != nullptr);
281     auto newUri = record->GetUriV0();
282     ASSERT_TRUE(newUri != nullptr);
283     ASSERT_TRUE(newUri->ToString() == uri.ToString());
284 }
285 
286 /**
287  * @tc.name: PasteRecordTest005
288  * @tc.desc: Create paste board record test.
289  * @tc.type: FUNC
290  * @tc.require: AR000H5GKU
291  */
292 HWTEST_F(PasteboardServiceTest, PasteRecordTest005, TestSize.Level0)
293 {
294     uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
295     InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888, PixelFormat::ARGB_8888 };
296     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, 100, opts);
297     std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
298     auto pasteDataRecord = PasteboardClient::GetInstance()->CreatePixelMapRecord(pixelMapIn);
299     ASSERT_TRUE(pasteDataRecord != nullptr);
300     auto newPixelMap = pasteDataRecord->GetPixelMapV0();
301     ASSERT_TRUE(newPixelMap != nullptr);
302     ImageInfo imageInfo = {};
303     newPixelMap->GetImageInfo(imageInfo);
304     ASSERT_TRUE(imageInfo.size.height == opts.size.height);
305     ASSERT_TRUE(imageInfo.size.width == opts.size.width);
306     ASSERT_TRUE(imageInfo.pixelFormat == opts.pixelFormat);
307     pasteDataRecord->ClearPixelMap();
308     ASSERT_TRUE(pasteDataRecord->GetPixelMapV0() == nullptr);
309 }
310 
311 /**
312  * @tc.name: PasteRecordTest006
313  * @tc.desc: Create paste board record test.
314  * @tc.type: FUNC
315  * @tc.require: AR000H5GKU
316  */
317 HWTEST_F(PasteboardServiceTest, PasteRecordTest006, TestSize.Level0)
318 {
319     uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
320     InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888, PixelFormat::ARGB_8888 };
321     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, sizeof(color) / sizeof(color[0]), opts);
322     std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
323     auto pasteDataRecord = PasteboardClient::GetInstance()->CreatePixelMapRecord(pixelMapIn);
324     ASSERT_TRUE(pasteDataRecord != nullptr);
325     InitializationOptions opts1 = { { 6, 9 }, PixelFormat::RGB_565, PixelFormat::RGB_565 };
326     std::unique_ptr<PixelMap> pixelMap1 = PixelMap::Create(color, sizeof(color) / sizeof(color[0]), opts1);
327     std::shared_ptr<PixelMap> pixelMapIn1 = move(pixelMap1);
328     pasteDataRecord = pasteDataRecord->NewPixelMapRecord(pixelMapIn1);
329     ASSERT_TRUE(pasteDataRecord != nullptr);
330     auto newPixelMap = pasteDataRecord->GetPixelMapV0();
331     ASSERT_TRUE(newPixelMap != nullptr);
332     ImageInfo imageInfo = {};
333     newPixelMap->GetImageInfo(imageInfo);
334     ASSERT_TRUE(imageInfo.size.height == opts1.size.height);
335     ASSERT_TRUE(imageInfo.size.width == opts1.size.width);
336     ASSERT_TRUE(imageInfo.pixelFormat == opts1.pixelFormat);
337 }
338 
339 /**
340  * @tc.name: PasteRecordTest007
341  * @tc.desc: Create paste board record test.
342  * @tc.type: FUNC
343  * @tc.require: AR000HEECD
344  */
345 HWTEST_F(PasteboardServiceTest, PasteRecordTest007, TestSize.Level0)
346 {
347     std::vector<uint8_t> arrayBuffer(46);
348     arrayBuffer = { 2, 7, 6, 8, 9 };
349     std::string mimeType = "image/jpg";
350     auto pasteDataRecord = PasteboardClient::GetInstance()->CreateKvRecord(mimeType, arrayBuffer);
351     ASSERT_TRUE(pasteDataRecord != nullptr);
352     auto customData = pasteDataRecord->GetCustomData();
353     ASSERT_TRUE(customData != nullptr);
354     auto itemData = customData->GetItemData();
355     ASSERT_TRUE(itemData.size() == 1);
356     auto item = itemData.find(mimeType);
357     ASSERT_TRUE(item != itemData.end());
358     ASSERT_TRUE(item->second == arrayBuffer);
359 }
360 
361 /**
362  * @tc.name: PasteRecordTest008
363  * @tc.desc: Create paste board record test.
364  * @tc.type: FUNC
365  * @tc.require: AR000HEECD
366  */
367 HWTEST_F(PasteboardServiceTest, PasteRecordTest008, TestSize.Level0)
368 {
369     std::vector<uint8_t> arrayBuffer(46);
370     arrayBuffer = { 2, 7, 6, 8, 9 };
371     std::string mimeType = "image/jpg";
372     auto pasteDataRecord = PasteboardClient::GetInstance()->CreateKvRecord(mimeType, arrayBuffer);
373     ASSERT_TRUE(pasteDataRecord != nullptr);
374     std::string mimeType1 = "img/png";
375     std::vector<uint8_t> arrayBuffer1(46);
376     arrayBuffer1 = { 2, 7, 6, 8, 9 };
377     pasteDataRecord = pasteDataRecord->NewKvRecord(mimeType1, arrayBuffer1);
378     auto customData = pasteDataRecord->GetCustomData();
379     ASSERT_TRUE(customData != nullptr);
380     auto itemData = customData->GetItemData();
381     ASSERT_TRUE(itemData.size() == 1);
382     auto item = itemData.find(mimeType1);
383     ASSERT_TRUE(item != itemData.end());
384     ASSERT_TRUE(item->second == arrayBuffer1);
385 }
386 
387 /**
388  * @tc.name: PasteRecordTest009
389  * @tc.desc: Create paste board html local url
390  * @tc.type: FUNC
391  */
392 HWTEST_F(PasteboardServiceTest, PasteRecordTest009, TestSize.Level0)
393 {
394     std::string htmlText = "<div class='item'><img data-ohos='clipboard' "
395                            "src='file:///com.example.webview/data/storage/el1/base/test.png'></div>";
396     auto data = PasteboardClient::GetInstance()->CreateHtmlData(htmlText);
397     ASSERT_TRUE(data != nullptr);
398     data->SetTag(g_webviewPastedataTag);
399     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
400     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
401     auto has = PasteboardClient::GetInstance()->HasPasteData();
402     ASSERT_TRUE(has == true);
403     PasteData newPasteData;
404     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
405     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
406     auto record = newPasteData.GetPrimaryHtml();
407     ASSERT_TRUE(record != nullptr);
408 }
409 
410 /**
411  * @tc.name: PasteRecordTest0010
412  * @tc.desc: Create paste board html distributed uri.
413  * @tc.type: FUNC
414  */
415 HWTEST_F(PasteboardServiceTest, PasteRecordTest0010, TestSize.Level0)
416 {
417     std::string htmlText = "<div class='item'><img data-ohos='clipboard' "
418                            "src='file://com.byy.testdpb/data/storage/el2/distributedfiles/"
419                            ".remote_share/data/storage/el2/base/haps/entry/cache/t1.jpg'></div>";
420     auto data = PasteboardClient::GetInstance()->CreateHtmlData(htmlText);
421     ASSERT_TRUE(data != nullptr);
422     data->SetTag(g_webviewPastedataTag);
423     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
424     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
425     auto has = PasteboardClient::GetInstance()->HasPasteData();
426     ASSERT_TRUE(has == true);
427     PasteData newPasteData2;
428     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData2);
429     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
430     auto record = newPasteData2.GetPrimaryHtml();
431     ASSERT_TRUE(record != nullptr);
432     ASSERT_TRUE(*record == htmlText);
433 }
434 
435 /**
436  * @tc.name: PasteRecordTest0011
437  * @tc.desc: Create paste board html distributed uri.
438  * @tc.type: FUNC
439  */
440 HWTEST_F(PasteboardServiceTest, PasteRecordTest0011, TestSize.Level0)
441 {
442     std::string htmlText = "<div class='item'><img "
443                            "src='file://com.byy.testdpb/data/storage/el2/distributedfiles/"
444                            ".remote_share/data/storage/el2/base/haps/entry/cache/t1.jpg'></div>";
445     auto data = PasteboardClient::GetInstance()->CreateHtmlData(htmlText);
446     ASSERT_TRUE(data != nullptr);
447     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
448     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
449     auto has = PasteboardClient::GetInstance()->HasPasteData();
450     ASSERT_TRUE(has == true);
451     PasteData newPasteData2;
452     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData2);
453     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
454     auto record = newPasteData2.GetPrimaryHtml();
455     ASSERT_TRUE(record != nullptr);
456     ASSERT_TRUE(*record == htmlText);
457 }
458 
459 /**
460  * @tc.name: PasteRecordTest0012
461  * @tc.desc: Create paste board html local url
462  * @tc.type: FUNC
463  */
464 HWTEST_F(PasteboardServiceTest, PasteRecordTest0012, TestSize.Level0)
465 {
466     std::string htmlText = "<div class='item'><img data-ohos='clipboard' "
467                            "src='file:///com.example.webview/data/storage/el1/base/test.png'></div>";
468     auto data = PasteboardClient::GetInstance()->CreateHtmlData(htmlText);
469     ASSERT_TRUE(data != nullptr);
470     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
471     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
472     auto has = PasteboardClient::GetInstance()->HasPasteData();
473     ASSERT_TRUE(has == true);
474     PasteData newPasteData;
475     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
476     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
477     auto record = newPasteData.GetPrimaryHtml();
478     ASSERT_TRUE(record != nullptr);
479 }
480 
481 /**
482  * @tc.name: PasteRecordTest0013
483  * @tc.desc: Create paste board html local docs uri
484  * @tc.type: FUNC
485  */
486 HWTEST_F(PasteboardServiceTest, PasteRecordTest0013, TestSize.Level0)
487 {
488     std::string htmlTextIn = "<div class='item'><img data-ohos='clipboard' "
489                              "src='file:///docs/storage/Users/currentUser/VMDocs/test.png'></div>";
490     std::string htmlTextOut = "<div class='item'><img data-ohos='clipboard' "
491                               "src='file:///storage/Users/currentUser/VMDocs/test.png'></div>";
492     std::string rk3568Out = "<div class='item'><img data-ohos='clipboard' "
493                             "src='file:///data/storage/el2/share/r/docs/"
494                             "storage/Users/currentUser/VMDocs/test.png'></div>";
495     auto data = PasteboardClient::GetInstance()->CreateHtmlData(htmlTextIn);
496     ASSERT_TRUE(data != nullptr);
497     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
498     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
499     auto has = PasteboardClient::GetInstance()->HasPasteData();
500     ASSERT_TRUE(has == true);
501     PasteData newPasteData;
502     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
503     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
504     auto record = newPasteData.GetPrimaryHtml();
505     ASSERT_TRUE(record != nullptr);
506     ASSERT_TRUE(*record == htmlTextOut || *record == rk3568Out);
507 }
508 
509 /**
510  * @tc.name: PasteRecordTest0014
511  * @tc.desc: Create paste board html local docs uri
512  * @tc.type: FUNC
513  */
514 HWTEST_F(PasteboardServiceTest, PasteRecordTest0014, TestSize.Level0)
515 {
516     std::string htmlTextIn = "<div class='item'><img data-ohos='clipboard' "
517                              "src='file:///docs/storage/Users/currentUser/VMDocs/test.png'></div>";
518     std::string htmlUriOut = "file://docs/storage/Users/currentUser/VMDocs/test.png";
519     auto data = PasteboardClient::GetInstance()->CreateHtmlData(htmlTextIn);
520     ASSERT_TRUE(data != nullptr);
521     ASSERT_TRUE(PasteboardClient::GetInstance()->SetPasteData(*data) == static_cast<int32_t>(PasteboardError::E_OK));
522     auto has = PasteboardClient::GetInstance()->HasPasteData();
523     ASSERT_TRUE(has == true);
524     sptr<IPasteboardService> pasteboardServiceProxy_;
525     sptr<ISystemAbilityManager> samgrProxy = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
526     ASSERT_TRUE(samgrProxy != nullptr);
527     const int32_t pasteboardServiceId = 3701;
528     sptr<IRemoteObject> remoteObject = samgrProxy->CheckSystemAbility(pasteboardServiceId);
529     ASSERT_TRUE(remoteObject != nullptr);
530     pasteboardServiceProxy_ = iface_cast<IPasteboardService>(remoteObject);
531     ASSERT_TRUE(pasteboardServiceProxy_ != nullptr);
532     PasteData pasteData;
533     int32_t syncTime = 0;
534     int fd = -1;
535     int64_t rawDataSize = 0;
536     std::vector<uint8_t> recvTLV(0);
537     std::string currentPid = std::to_string(getpid());
538     std::string currentId = "GetPasteData_" + currentPid + "_001";
539     pasteData.SetPasteId(currentId);
540     int32_t res = pasteboardServiceProxy_->GetPasteData(fd, rawDataSize, recvTLV, pasteData.GetPasteId(), syncTime);
541     ASSERT_TRUE(res == ERR_OK);
542     ASSERT_TRUE(rawDataSize > 0 && rawDataSize < MessageParcelWarp().GetRawDataSize());
543     bool result = false;
544     MessageParcelWarp messageReply;
545     MessageParcel parcelData;
546     if (rawDataSize > MIN_ASHMEM_DATA_SIZE) {
547         parcelData.WriteInt64(rawDataSize);
548         parcelData.WriteFileDescriptor(fd);
549         const uint8_t *rawData = reinterpret_cast<const uint8_t *>(messageReply.ReadRawData(parcelData, rawDataSize));
550         ASSERT_TRUE(rawData != nullptr);
551         std::vector<uint8_t> pasteDataTlv(rawData, rawData + rawDataSize);
552         result = pasteData.Decode(pasteDataTlv);
553     } else {
554         result = pasteData.Decode(recvTLV);
555     }
556     ASSERT_TRUE(result);
557     std::string htmlUriConvert = "";
558     for (auto &item : pasteData.AllRecords()) {
559         if (item != nullptr) {
560             std::shared_ptr<Uri> uri = item->GetUriV0();
561             if (uri != nullptr) {
562                 htmlUriConvert = uri->ToString();
563             }
564         }
565     }
566     ASSERT_TRUE(htmlUriConvert == htmlUriOut);
567 }
568 
569 /**
570  * @tc.name: PasteDataTest001
571  * @tc.desc: Create paste board data test.
572  * @tc.type: FUNC
573  */
574 HWTEST_F(PasteboardServiceTest, PasteDataTest001, TestSize.Level0)
575 {
576     using namespace OHOS::AAFwk;
577     std::shared_ptr<Want> want = std::make_shared<Want>();
578     std::string key = "id";
579     int32_t id = 456;
580     Want wantIn = want->SetParam(key, id);
581     auto data = PasteboardClient::GetInstance()->CreateWantData(std::make_shared<Want>(wantIn));
582     ASSERT_TRUE(data != nullptr);
583     PasteboardClient::GetInstance()->Clear();
584     auto has = PasteboardClient::GetInstance()->HasPasteData();
585     ASSERT_TRUE(has != true);
586     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
587     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
588     has = PasteboardClient::GetInstance()->HasPasteData();
589     ASSERT_TRUE(has == true);
590     PasteData pasteData;
591     ret = PasteboardClient::GetInstance()->GetPasteData(pasteData);
592     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
593     auto record = pasteData.GetPrimaryWant();
594     ASSERT_TRUE(record != nullptr);
595     int32_t defaultValue = 333;
596     ASSERT_TRUE(record->GetIntParam(key, defaultValue) == id);
597 }
598 
599 /**
600  * @tc.name: PasteDataTest002
601  * @tc.desc: Create paste board data test.
602  * @tc.type: FUNC
603  */
604 HWTEST_F(PasteboardServiceTest, PasteDataTest002, TestSize.Level0)
605 {
606     OHOS::Uri uri("uri");
607     auto data = PasteboardClient::GetInstance()->CreateUriData(uri);
608     ASSERT_TRUE(data != nullptr);
609     PasteboardClient::GetInstance()->Clear();
610     auto has = PasteboardClient::GetInstance()->HasPasteData();
611     ASSERT_TRUE(has != true);
612     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
613     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
614     has = PasteboardClient::GetInstance()->HasPasteData();
615     ASSERT_TRUE(has == true);
616     PasteData pasteData;
617     ret = PasteboardClient::GetInstance()->GetPasteData(pasteData);
618     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
619     auto record = pasteData.GetPrimaryUri();
620     ASSERT_TRUE(record != nullptr);
621     ASSERT_TRUE(record->ToString() == uri.ToString());
622 }
623 
624 /**
625  * @tc.name: PasteDataTest003
626  * @tc.desc: Create paste board data test.
627  * @tc.type: FUNC
628  */
629 HWTEST_F(PasteboardServiceTest, PasteDataTest003, TestSize.Level0)
630 {
631     std::string text = "plain text";
632     auto data = PasteboardClient::GetInstance()->CreatePlainTextData(text);
633     ASSERT_TRUE(data != nullptr);
634     PasteboardClient::GetInstance()->Clear();
635     auto has = PasteboardClient::GetInstance()->HasPasteData();
636     ASSERT_TRUE(has != true);
637     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
638     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
639     has = PasteboardClient::GetInstance()->HasPasteData();
640     ASSERT_TRUE(has == true);
641     PasteData pasteData;
642     ret = PasteboardClient::GetInstance()->GetPasteData(pasteData);
643     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
644     auto record = pasteData.GetPrimaryText();
645     ASSERT_TRUE(record != nullptr);
646     ASSERT_TRUE(*record == text);
647 }
648 
649 /**
650  * @tc.name: PasteDataTest004
651  * @tc.desc: Create paste board data test.
652  * @tc.type: FUNC
653  */
654 HWTEST_F(PasteboardServiceTest, PasteDataTest004, TestSize.Level0)
655 {
656     std::string htmlText = "<div class='disabled item tip user-programs'>";
657     auto data = PasteboardClient::GetInstance()->CreateHtmlData(htmlText);
658     ASSERT_TRUE(data != nullptr);
659     PasteboardClient::GetInstance()->Clear();
660     auto has = PasteboardClient::GetInstance()->HasPasteData();
661     ASSERT_TRUE(has != true);
662     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
663     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
664     has = PasteboardClient::GetInstance()->HasPasteData();
665     ASSERT_TRUE(has == true);
666     PasteData pasteData;
667     ret = PasteboardClient::GetInstance()->GetPasteData(pasteData);
668     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
669     auto record = pasteData.GetPrimaryHtml();
670     ASSERT_TRUE(record != nullptr);
671     ASSERT_TRUE(*record == htmlText);
672 }
673 
674 /**
675  * @tc.name: PasteDataTest005
676  * @tc.desc: CreateHtmlData test.
677  * @tc.type: FUNC
678  * @tc.require: AR000HEECD
679  */
680 HWTEST_F(PasteboardServiceTest, PasteDataTest005, TestSize.Level0)
681 {
682     std::string htmlText = "<div class='disabled item tip user-programs'>";
683     auto pasteData = PasteboardClient::GetInstance()->CreateHtmlData(htmlText);
684     ASSERT_TRUE(pasteData != nullptr);
685     std::string plainText = "plain text";
686     PasteDataRecord::Builder builder(MIMETYPE_TEXT_HTML);
687     std::string mimeType = MIMETYPE_TEXT_PLAIN;
688     std::vector<uint8_t> arrayBuffer(46);
689     arrayBuffer = { 2, 7, 6, 8, 9 };
690     std::string mimeType1 = "image/jpg";
691     std::shared_ptr<MineCustomData> customData = std::make_shared<MineCustomData>();
692     customData->AddItemData(mimeType1, arrayBuffer);
693     std::shared_ptr<PasteDataRecord> pasteDataRecord = builder.SetMimeType(mimeType)
694                                                            .SetPlainText(std::make_shared<std::string>(plainText))
695                                                            .SetHtmlText(std::make_shared<std::string>(htmlText))
696                                                            .SetCustomData(customData)
697                                                            .Build();
698     pasteData->AddRecord(pasteDataRecord);
699     PasteData newPasteData;
700     PasteboardServiceTest::CommonTest(*pasteData, newPasteData);
701     auto primaryHtml = newPasteData.GetPrimaryHtml();
702     ASSERT_TRUE(primaryHtml != nullptr);
703     ASSERT_TRUE(*primaryHtml == htmlText);
704     auto firstRecord = newPasteData.GetRecordAt(0);
705     ASSERT_TRUE(firstRecord != nullptr);
706     ASSERT_TRUE(firstRecord->GetMimeType() == mimeType);
707     auto newPlainText = firstRecord->GetPlainTextV0();
708     ASSERT_TRUE(newPlainText != nullptr);
709     ASSERT_TRUE(*newPlainText == plainText);
710     auto newHtmlText = firstRecord->GetHtmlTextV0();
711     ASSERT_TRUE(newHtmlText != nullptr);
712     ASSERT_TRUE(*newHtmlText == htmlText);
713     customData = pasteDataRecord->GetCustomData();
714     ASSERT_TRUE(customData != nullptr);
715     auto itemData = customData->GetItemData();
716     ASSERT_TRUE(itemData.size() == 1);
717     auto item = itemData.find(mimeType1);
718     ASSERT_TRUE(item != itemData.end());
719     ASSERT_TRUE(item->second == arrayBuffer);
720 }
721 
722 /**
723  * @tc.name: PasteDataTest006
724  * @tc.desc: CreatePlainTextData test.
725  * @tc.type: FUNC
726  */
727 HWTEST_F(PasteboardServiceTest, PasteDataTest006, TestSize.Level0)
728 {
729     using namespace OHOS::AAFwk;
730     std::string plainText = "helloWorld";
731     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
732     ASSERT_TRUE(pasteData != nullptr);
733     std::shared_ptr<Want> want = std::make_shared<Want>();
734     std::string key = "id";
735     int32_t id = 456;
736     Want wantIn = want->SetParam(key, id);
737     PasteDataRecord::Builder builder(MIMETYPE_TEXT_WANT);
738     std::shared_ptr<PasteDataRecord> pasteDataRecord =
739         builder.SetWant(std::make_shared<Want>(wantIn)).SetPlainText(std::make_shared<std::string>(plainText)).Build();
740     pasteData->AddRecord(pasteDataRecord);
741     PasteData newPasteData;
742     PasteboardServiceTest::CommonTest(*pasteData, newPasteData);
743     auto firstRecord = newPasteData.GetRecordAt(0);
744     ASSERT_TRUE(firstRecord != nullptr);
745     ASSERT_TRUE(firstRecord->GetMimeType() == MIMETYPE_TEXT_WANT);
746     auto newWant = firstRecord->GetWant();
747     ASSERT_TRUE(newWant != nullptr);
748     int32_t defaultValue = 333;
749     ASSERT_TRUE(newWant->GetIntParam(key, defaultValue) == id);
750     auto newPlainText = firstRecord->GetPlainTextV0();
751     ASSERT_TRUE(newPlainText != nullptr);
752     ASSERT_TRUE(*newPlainText == plainText);
753 }
754 
755 /**
756  * @tc.name: PasteDataTest007
757  * @tc.desc: PixelMap test.
758  * @tc.type: FUNC
759  * @tc.require: AR000H5GKU
760  */
761 HWTEST_F(PasteboardServiceTest, PasteDataTest007, TestSize.Level0)
762 {
763     std::string htmlText = "<div class='disabled item tip user-programs'>";
764     auto pasteData = PasteboardClient::GetInstance()->CreateHtmlData(htmlText);
765     ASSERT_TRUE(pasteData != nullptr);
766     OHOS::Uri uri("uri");
767     uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
768     InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888, PixelFormat::ARGB_8888 };
769     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, sizeof(color) / sizeof(color[0]), opts);
770     std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
771     PasteDataRecord::Builder builder(MIMETYPE_TEXT_URI);
772     std::shared_ptr<PasteDataRecord> pasteDataRecord =
773         builder.SetUri(std::make_shared<OHOS::Uri>(uri)).SetPixelMap(pixelMapIn).Build();
774     pasteData->AddRecord(pasteDataRecord);
775     PasteData newPasteData;
776     PasteboardServiceTest::CommonTest(*pasteData, newPasteData);
777     auto firstRecord = newPasteData.GetRecordAt(0);
778     ASSERT_TRUE(firstRecord != nullptr);
779     ASSERT_TRUE(firstRecord->GetMimeType() == MIMETYPE_TEXT_URI);
780     auto newUri = firstRecord->GetUriV0();
781     ASSERT_TRUE(newUri != nullptr);
782     ASSERT_TRUE(newUri->ToString() == uri.ToString());
783     auto newPixelMap = firstRecord->GetPixelMapV0();
784     ASSERT_TRUE(newPixelMap != nullptr);
785     ImageInfo imageInfo = {};
786     newPixelMap->GetImageInfo(imageInfo);
787     ASSERT_TRUE(imageInfo.size.height == opts.size.height);
788     ASSERT_TRUE(imageInfo.size.width == opts.size.width);
789     ASSERT_TRUE(imageInfo.pixelFormat == opts.pixelFormat);
790 }
791 
792 /**
793  * @tc.name: PasteDataTest008
794  * @tc.desc: Create paste board data test.
795  * @tc.type: FUNC
796  * @tc.require: AR000H5GKU
797  */
798 HWTEST_F(PasteboardServiceTest, PasteDataTest008, TestSize.Level0)
799 {
800     uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
801     InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888, PixelFormat::ARGB_8888 };
802     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, sizeof(color) / sizeof(color[0]), opts);
803     std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
804     auto pasteData = PasteboardClient::GetInstance()->CreatePixelMapData(pixelMapIn);
805     ASSERT_TRUE(pasteData != nullptr);
806     PasteData newPasteData;
807     PasteboardServiceTest::CommonTest(*pasteData, newPasteData);
808     auto primaryPixelMap = newPasteData.GetPrimaryPixelMap();
809     ASSERT_TRUE(primaryPixelMap != nullptr);
810     ImageInfo imageInfo = {};
811     primaryPixelMap->GetImageInfo(imageInfo);
812     ASSERT_TRUE(imageInfo.size.height == opts.size.height);
813     ASSERT_TRUE(imageInfo.size.width == opts.size.width);
814     ASSERT_TRUE(imageInfo.pixelFormat == opts.pixelFormat);
815 }
816 
817 /**
818  * @tc.name: PasteDataTest009
819  * @tc.desc: Create paste board data test.
820  * @tc.type: FUNC
821  * @tc.require: AR000H5GKU
822  */
823 HWTEST_F(PasteboardServiceTest, PasteDataTest009, TestSize.Level0)
824 {
825     std::string plainText = "plain text";
826     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
827     ASSERT_TRUE(pasteData != nullptr);
828     uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
829     InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888, PixelFormat::ARGB_8888 };
830     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, sizeof(color) / sizeof(color[0]), opts);
831     std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
832     pasteData->AddPixelMapRecord(pixelMapIn);
833     PasteData newPasteData;
834     PasteboardServiceTest::CommonTest(*pasteData, newPasteData);
835     auto primaryPlainText = newPasteData.GetPrimaryText();
836     ASSERT_TRUE(primaryPlainText != nullptr);
837     ASSERT_TRUE(*primaryPlainText == plainText);
838     auto primaryPixelMap = newPasteData.GetPrimaryPixelMap();
839     ASSERT_TRUE(primaryPixelMap != nullptr);
840     ImageInfo imageInfo = {};
841     primaryPixelMap->GetImageInfo(imageInfo);
842     ASSERT_TRUE(imageInfo.size.height == opts.size.height);
843     ASSERT_TRUE(imageInfo.size.width == opts.size.width);
844     ASSERT_TRUE(imageInfo.pixelFormat == opts.pixelFormat);
845 }
846 
847 /**
848  * @tc.name: PasteDataTest0010
849  * @tc.desc: Create paste board data test.
850  * @tc.type: FUNC
851  * @tc.require: AR000HEECD
852  */
853 HWTEST_F(PasteboardServiceTest, PasteDataTest0010, TestSize.Level0)
854 {
855     std::vector<uint8_t> arrayBuffer(46);
856     arrayBuffer = { 2, 7, 6, 8, 9 };
857     std::string mimeType = "image/jpg";
858     auto pasteData = PasteboardClient::GetInstance()->CreateKvData(mimeType, arrayBuffer);
859     ASSERT_TRUE(pasteData != nullptr);
860     PasteData newPasteData;
861     PasteboardServiceTest::CommonTest(*pasteData, newPasteData);
862     auto firstRecord = newPasteData.GetRecordAt(0);
863     auto customData = firstRecord->GetCustomData();
864     ASSERT_TRUE(customData != nullptr);
865     auto itemData = customData->GetItemData();
866     ASSERT_TRUE(itemData.size() == 1);
867     auto item = itemData.find(mimeType);
868     ASSERT_TRUE(item != itemData.end());
869     ASSERT_TRUE(item->second == arrayBuffer);
870 }
871 
872 /**
873  * @tc.name: PasteDataTest0011
874  * @tc.desc: Create paste board data test.
875  * @tc.type: FUNC
876  * @tc.require: AR000HEECD
877  */
878 HWTEST_F(PasteboardServiceTest, PasteDataTest0011, TestSize.Level0)
879 {
880     std::string plainText = "plain text";
881     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
882     ASSERT_TRUE(pasteData != nullptr);
883     std::vector<uint8_t> arrayBuffer(46);
884     arrayBuffer = { 2, 7, 6, 8, 9 };
885     std::string mimeType = "image/jpg";
886     pasteData->AddKvRecord(mimeType, arrayBuffer);
887     PasteData newPasteData;
888     PasteboardServiceTest::CommonTest(*pasteData, newPasteData);
889     auto firstRecord = newPasteData.GetRecordAt(0);
890     auto customData = firstRecord->GetCustomData();
891     ASSERT_TRUE(customData != nullptr);
892     auto itemData = customData->GetItemData();
893     ASSERT_TRUE(itemData.size() == 1);
894     auto item = itemData.find(mimeType);
895     ASSERT_TRUE(item != itemData.end());
896     ASSERT_TRUE(item->second == arrayBuffer);
897     auto primaryPlainText = newPasteData.GetPrimaryText();
898     ASSERT_TRUE(primaryPlainText != nullptr);
899     ASSERT_TRUE(*primaryPlainText == plainText);
900 }
901 
902 /**
903  * @tc.name: PasteDataTest0012
904  * @tc.desc: Create paste board data test.
905  * @tc.type: FUNC
906  * @tc.require: AR000HEECD
907  */
908 HWTEST_F(PasteboardServiceTest, PasteDataTest0012, TestSize.Level0)
909 {
910     std::string plainText = "plain text";
911     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
912     ASSERT_TRUE(pasteData != nullptr);
913     std::vector<uint8_t> arrayBuffer(46);
914     arrayBuffer = { 2, 7, 6, 8, 9 };
915     std::string mimeType = "image/jpg";
916     pasteData->AddKvRecord(mimeType, arrayBuffer);
917     auto record = pasteData->GetRecordAt(0);
918     ASSERT_TRUE(record != nullptr);
919     std::string mimeType1 = "img/png";
920     std::vector<uint8_t> arrayBuffer1(54);
921     arrayBuffer1 = { 4, 7, 9, 8, 7 };
922     auto customData = record->GetCustomData();
923     ASSERT_TRUE(customData != nullptr);
924     customData->AddItemData(mimeType1, arrayBuffer1);
925     PasteData newPasteData;
926     PasteboardServiceTest::CommonTest(*pasteData, newPasteData);
927     auto firstRecord = newPasteData.GetRecordAt(0);
928     ASSERT_TRUE(firstRecord != nullptr);
929     customData = firstRecord->GetCustomData();
930     ASSERT_TRUE(customData != nullptr);
931     auto itemData = customData->GetItemData();
932     ASSERT_EQ(itemData.size(), 1);
933     auto item = itemData.find(mimeType);
934     ASSERT_TRUE(item != itemData.end());
935     ASSERT_TRUE(item->second == arrayBuffer);
936     item = itemData.find(mimeType1);
937     ASSERT_TRUE(item == itemData.end());
938     auto primaryPlainText = newPasteData.GetPrimaryText();
939     ASSERT_TRUE(primaryPlainText != nullptr);
940     ASSERT_TRUE(*primaryPlainText == plainText);
941     auto secondRecord = newPasteData.GetRecordAt(1);
942     ASSERT_TRUE(secondRecord != nullptr);
943     auto secondRecordMimeType = secondRecord->GetMimeType();
944     ASSERT_TRUE(secondRecordMimeType == MIMETYPE_TEXT_PLAIN);
945 }
946 
947 /**
948  * @tc.name: PasteDataTest0014
949  * @tc.desc: Create paste board data test.
950  * @tc.type: FUNC
951  * @tc.require: AROOOH5R5G
952  */
953 HWTEST_F(PasteboardServiceTest, PasteDataTest0014, TestSize.Level0)
954 {
955     std::string plainText = "plain text";
956     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
957     ASSERT_TRUE(pasteData != nullptr);
958     auto shareOption = pasteData->GetShareOption();
959     ASSERT_TRUE(shareOption == ShareOption::CrossDevice);
960     pasteData->SetShareOption(ShareOption::InApp);
961     auto tokenId = pasteData->GetTokenId();
962     ASSERT_TRUE(tokenId == 0);
963     pasteData->SetTokenId(1);
964     PasteData newPasteData;
965     PasteboardServiceTest::CommonTest(*pasteData, newPasteData);
966     shareOption = newPasteData.GetShareOption();
967     ASSERT_TRUE(shareOption == ShareOption::InApp);
968     tokenId = pasteData->GetTokenId();
969     ASSERT_TRUE(tokenId != 0);
970 }
971 
972 /**
973  * @tc.name: PasteDataTest0015
974  * @tc.desc: isLocalPaste test.
975  * @tc.type: FUNC
976  * @tc.require: AROOOH5R5G
977  */
978 HWTEST_F(PasteboardServiceTest, PasteDataTest0015, TestSize.Level0)
979 {
980     std::string plainText = "plain text";
981     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
982     ASSERT_TRUE(pasteData != nullptr);
983     auto isLocalPaste = pasteData->IsLocalPaste();
984     ASSERT_FALSE(isLocalPaste);
985     pasteData->SetLocalPasteFlag(true);
986     isLocalPaste = pasteData->IsLocalPaste();
987     ASSERT_TRUE(isLocalPaste);
988     pasteData->SetLocalPasteFlag(false);
989     isLocalPaste = pasteData->IsLocalPaste();
990     ASSERT_FALSE(isLocalPaste);
991     PasteboardClient::GetInstance()->Clear();
992     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
993     ASSERT_FALSE(hasPasteData);
994     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
995     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
996     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
997     ASSERT_TRUE(hasPasteData);
998     PasteData newPasteData;
999     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
1000     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1001     isLocalPaste = newPasteData.IsLocalPaste();
1002     ASSERT_TRUE(isLocalPaste);
1003 }
1004 
1005 /**
1006  * @tc.name: PasteDataTest0016
1007  * @tc.desc: RemoveRecordAt HasMimeType test.
1008  * @tc.type: FUNC
1009  * @tc.require: AROOOH5R5G
1010  */
1011 HWTEST_F(PasteboardServiceTest, PasteDataTest0016, TestSize.Level0)
1012 {
1013     std::string plainText = "plain text";
1014     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
1015     ASSERT_TRUE(pasteData != nullptr);
1016     std::vector<uint8_t> arrayBuffer(46);
1017     arrayBuffer = { 2, 7, 6, 8, 9 };
1018     std::string mimeType = "image/jpg";
1019     pasteData->AddKvRecord(mimeType, arrayBuffer);
1020     pasteData->RemoveRecordAt(1);
1021     PasteboardClient::GetInstance()->Clear();
1022     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1023     ASSERT_FALSE(hasPasteData);
1024     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1025     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1026     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1027     ASSERT_TRUE(hasPasteData);
1028     PasteData newPasteData;
1029     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
1030     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1031     ASSERT_TRUE(newPasteData.HasMimeType(mimeType));
1032     ASSERT_TRUE(newPasteData.GetRecordCount() == 1);
1033     auto record = newPasteData.GetRecordAt(0);
1034     ASSERT_TRUE(record != nullptr);
1035     auto customData = record->GetCustomData();
1036     ASSERT_TRUE(customData != nullptr);
1037     auto itemData = customData->GetItemData();
1038     ASSERT_EQ(itemData.size(), 1);
1039     auto item = itemData.find(mimeType);
1040     ASSERT_TRUE(item != itemData.end());
1041     EXPECT_EQ(item->second, arrayBuffer);
1042 }
1043 
1044 /**
1045  * @tc.name: PasteDataTest0017
1046  * @tc.desc: ReplaceRecordAt GetProperty GetTag test.
1047  * @tc.type: FUNC
1048  * @tc.require: AROOOH5R5G
1049  */
1050 HWTEST_F(PasteboardServiceTest, PasteDataTest0017, TestSize.Level0)
1051 {
1052     uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
1053     InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888, PixelFormat::ARGB_8888 };
1054     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, sizeof(color) / sizeof(color[0]), opts);
1055     std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
1056     auto pasteData = PasteboardClient::GetInstance()->CreatePixelMapData(pixelMapIn);
1057     ASSERT_TRUE(pasteData != nullptr);
1058     auto pixelMap1 = pasteData->GetPrimaryPixelMap();
1059     ASSERT_TRUE(pixelMap1 != nullptr);
1060     ImageInfo imageInfo = {};
1061     pixelMap1->GetImageInfo(imageInfo);
1062     ASSERT_EQ(imageInfo.size.height, opts.size.height);
1063     ASSERT_EQ(imageInfo.size.width, opts.size.width);
1064     ASSERT_EQ(imageInfo.pixelFormat, opts.pixelFormat);
1065     std::string plainText = "plain text";
1066     auto record = PasteboardClient::GetInstance()->CreatePlainTextRecord(plainText);
1067     ASSERT_TRUE(record != nullptr);
1068     ASSERT_TRUE(pasteData->ReplaceRecordAt(0, record));
1069     PasteboardClient::GetInstance()->Clear();
1070     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1071     ASSERT_FALSE(hasPasteData);
1072     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1073     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1074     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1075     ASSERT_TRUE(hasPasteData);
1076     PasteData newPasteData;
1077     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
1078     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1079     ASSERT_EQ(newPasteData.GetRecordCount(), 1);
1080     auto record1 = newPasteData.GetRecordAt(0);
1081     ASSERT_TRUE(record1 != nullptr);
1082     auto plainText1 = record1->GetPlainTextV0();
1083     ASSERT_TRUE(plainText1 != nullptr);
1084     EXPECT_EQ(*plainText1, plainText);
1085     auto property = newPasteData.GetProperty();
1086     EXPECT_TRUE(property.additions.IsEmpty());
1087     EXPECT_EQ(property.mimeTypes.size(), 1);
1088     EXPECT_EQ(property.mimeTypes[0], MIMETYPE_TEXT_PLAIN);
1089     EXPECT_TRUE(property.tag.empty());
1090     EXPECT_EQ(property.shareOption, ShareOption::CrossDevice);
1091     EXPECT_TRUE(property.tokenId != 0);
1092     auto tag = newPasteData.GetTag();
1093     EXPECT_TRUE(tag.empty());
1094 }
1095 
1096 /**
1097  * @tc.name: PasteDataTest0018
1098  * @tc.desc: AddPasteboardChangedObserver RemovePasteboardChangedObserver OnRemoteDied OnRemoteSaDied test.
1099  * @tc.type: FUNC
1100  * @tc.require: AROOOH5R5G
1101  */
1102 HWTEST_F(PasteboardServiceTest, PasteDataTest0018, TestSize.Level0)
1103 {
1104     PasteboardClient::GetInstance()->RemovePasteboardChangedObserver(nullptr);
1105     if (PasteboardServiceTest::pasteboardObserver_ == nullptr) {
1106         PasteboardServiceTest::pasteboardObserver_ = sptr<PasteboardObserverCallback>::MakeSptr();
1107     }
1108     PasteboardServiceTest::pasteboardChangedFlag_ = false;
1109     ASSERT_TRUE(PasteboardServiceTest::pasteboardObserver_ != nullptr);
1110     PasteboardClient::GetInstance()->AddPasteboardChangedObserver(PasteboardServiceTest::pasteboardObserver_);
1111     ASSERT_FALSE(PasteboardServiceTest::pasteboardChangedFlag_);
1112     const wptr<IRemoteObject> object;
1113     PasteboardSaDeathRecipient death;
1114     death.OnRemoteDied(object);
1115     PasteboardServiceLoader::GetInstance().OnRemoteSaDied(object);
1116     uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
1117     InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888, PixelFormat::ARGB_8888 };
1118     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, sizeof(color) / sizeof(color[0]), opts);
1119     std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
1120     auto pasteData = PasteboardClient::GetInstance()->CreatePixelMapData(pixelMapIn);
1121     ASSERT_TRUE(pasteData != nullptr);
1122     PasteboardClient::GetInstance()->Clear();
1123     std::this_thread::sleep_for(std::chrono::milliseconds(5));
1124     ASSERT_FALSE(PasteboardServiceTest::pasteboardChangedFlag_);
1125     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1126     ASSERT_FALSE(hasPasteData);
1127     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1128     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1129     std::this_thread::sleep_for(std::chrono::milliseconds(5));
1130     ASSERT_TRUE(PasteboardServiceTest::pasteboardChangedFlag_);
1131     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1132     ASSERT_TRUE(hasPasteData);
1133     PasteData newPasteData;
1134     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
1135     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1136     PasteboardServiceTest::pasteboardChangedFlag_ = false;
1137     PasteboardClient::GetInstance()->RemovePasteboardChangedObserver(PasteboardServiceTest::pasteboardObserver_);
1138     PasteboardClient::GetInstance()->Clear();
1139     ASSERT_FALSE(PasteboardServiceTest::pasteboardChangedFlag_);
1140     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1141     ASSERT_FALSE(hasPasteData);
1142     PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1143     std::this_thread::sleep_for(std::chrono::milliseconds(5));
1144     ASSERT_FALSE(PasteboardServiceTest::pasteboardChangedFlag_);
1145     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1146     ASSERT_TRUE(hasPasteData);
1147 }
1148 
1149 /**
1150  * @tc.name: PasteDataTest0019
1151  * @tc.desc: AddPasteboardEventObserver RemovePasteboardEventObserver test.
1152  * @tc.type: FUNC
1153  * @tc.require: AROOOH5R5G
1154  */
1155 HWTEST_F(PasteboardServiceTest, PasteDataTest0019, TestSize.Level0)
1156 {
1157     PasteboardClient::GetInstance()->RemovePasteboardEventObserver(nullptr);
1158     if (PasteboardServiceTest::pasteboardEventObserver_ == nullptr) {
1159         PasteboardServiceTest::pasteboardEventObserver_ = sptr<PasteboardEventObserverCallback>::MakeSptr();
1160     }
1161     PasteboardServiceTest::pasteboardEventStatus_ = -1;
1162     ASSERT_TRUE(PasteboardServiceTest::pasteboardEventObserver_ != nullptr);
1163     PasteboardClient::GetInstance()->AddPasteboardEventObserver(PasteboardServiceTest::pasteboardEventObserver_);
1164     ASSERT_EQ(PasteboardServiceTest::pasteboardEventStatus_, -1);
1165     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData("hello");
1166     ASSERT_TRUE(pasteData != nullptr);
1167     PasteboardClient::GetInstance()->Clear();
1168     ASSERT_EQ(PasteboardServiceTest::pasteboardEventStatus_, -1);
1169     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1170     ASSERT_FALSE(hasPasteData);
1171     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1172     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1173     std::this_thread::sleep_for(std::chrono::milliseconds(5));
1174     ASSERT_EQ(PasteboardServiceTest::pasteboardEventStatus_, -1);
1175     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1176     ASSERT_TRUE(hasPasteData);
1177     PasteData newPasteData;
1178     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
1179     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1180     std::this_thread::sleep_for(std::chrono::milliseconds(5));
1181     ASSERT_EQ(PasteboardServiceTest::pasteboardEventStatus_, -1);
1182     PasteboardClient::GetInstance()->Clear();
1183     std::this_thread::sleep_for(std::chrono::milliseconds(5));
1184     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1185     ASSERT_EQ(PasteboardServiceTest::pasteboardEventStatus_, -1);
1186     PasteboardServiceTest::pasteboardEventStatus_ = -1;
1187     PasteboardClient::GetInstance()->RemovePasteboardEventObserver(PasteboardServiceTest::pasteboardEventObserver_);
1188     PasteboardClient::GetInstance()->Clear();
1189     std::this_thread::sleep_for(std::chrono::milliseconds(5));
1190     ASSERT_EQ(PasteboardServiceTest::pasteboardEventStatus_, -1);
1191     PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1192     ASSERT_EQ(PasteboardServiceTest::pasteboardEventStatus_, -1);
1193 }
1194 
1195 /**
1196  * @tc.name: PasteDataTest0020
1197  * @tc.desc: Create paste board test set bundleName and time.
1198  * @tc.type: FUNC
1199  */
1200 HWTEST_F(PasteboardServiceTest, PasteDataTest0020, TestSize.Level0)
1201 {
1202     std::string text = "plain text";
1203     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(text);
1204     ASSERT_TRUE(pasteData != nullptr);
1205     std::string bundleName = "ohos.acts.distributeddatamgr.pasteboard";
1206     pasteData->SetBundleInfo(bundleName, 0);
1207     std::string time = GetTime();
1208     pasteData->SetTime(time);
1209     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1210     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1211     auto has = PasteboardClient::GetInstance()->HasPasteData();
1212     ASSERT_TRUE(has == true);
1213 }
1214 
1215 /**
1216  * @tc.name: PasteDataTest0021
1217  * @tc.desc: AddPasteboardEventObserver RemovePasteboardEventObserver test.
1218  * @tc.type: FUNC
1219  */
1220 HWTEST_F(PasteboardServiceTest, PasteDataTest0021, TestSize.Level0)
1221 {
1222     PasteboardClient::GetInstance()->AddPasteboardEventObserver(sptr<PasteboardEventObserverCallback>::MakeSptr());
1223     PasteboardClient::GetInstance()->AddPasteboardEventObserver(sptr<PasteboardEventObserverCallback>::MakeSptr());
1224     PasteboardClient::GetInstance()->AddPasteboardEventObserver(sptr<PasteboardEventObserverCallback>::MakeSptr());
1225     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData("hello");
1226     ASSERT_TRUE(pasteData != nullptr);
1227     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1228     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1229     auto hasData = PasteboardClient::GetInstance()->HasPasteData();
1230     ASSERT_TRUE(hasData == true);
1231     PasteData newPasteData;
1232     PasteboardClient::GetInstance()->GetPasteData(newPasteData);
1233     PasteboardClient::GetInstance()->Clear();
1234     std::this_thread::sleep_for(std::chrono::milliseconds(5));
1235     PasteboardClient::GetInstance()->RemovePasteboardEventObserver(nullptr);
1236     hasData = PasteboardClient::GetInstance()->HasPasteData();
1237     ASSERT_TRUE(hasData == false);
1238 }
1239 
1240 /**
1241  * @tc.name: PasteDataTest0022
1242  * @tc.desc: isDraggedData test.
1243  * @tc.type: FUNC
1244  * @tc.require: AROOOH5R5G
1245  */
1246 HWTEST_F(PasteboardServiceTest, PasteDataTest0022, TestSize.Level0)
1247 {
1248     std::string plainText = "plain text";
1249     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
1250     ASSERT_TRUE(pasteData != nullptr);
1251     auto isDraggedData = pasteData->IsDraggedData();
1252     ASSERT_FALSE(isDraggedData);
1253     pasteData->SetDraggedDataFlag(true);
1254     ASSERT_TRUE(pasteData->IsDraggedData());
1255     PasteboardClient::GetInstance()->Clear();
1256     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1257     ASSERT_FALSE(hasPasteData);
1258     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1259     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1260     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1261     ASSERT_FALSE(hasPasteData);
1262     PasteData newPasteData;
1263     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
1264     ASSERT_FALSE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1265     isDraggedData = newPasteData.IsDraggedData();
1266     ASSERT_FALSE(isDraggedData);
1267 }
1268 
1269 /**
1270  * @tc.name: PasteDataTest0023
1271  * @tc.desc: paste pastedata with 3 records
1272  * @tc.type: FUNC
1273  * @tc.require: RR2025020589956
1274  * @tc.author: wangchenghao
1275  */
1276 HWTEST_F(PasteboardServiceTest, PasteDataTest0023, TestSize.Level0)
1277 {
1278     std::string text = "plain text";
1279     auto data = PasteboardClient::GetInstance()->CreatePlainTextData(text);
1280     ASSERT_TRUE(data != nullptr);
1281     auto record1 = PasteboardClient::GetInstance()->CreatePlainTextRecord("paste record1");
1282     auto record2 = PasteboardClient::GetInstance()->CreatePlainTextRecord("paste record2");
1283     data->AddRecord(record1);
1284     data->AddRecord(record2);
1285     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
1286     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1287     PasteData pasteData;
1288     ret = PasteboardClient::GetInstance()->GetPasteData(pasteData);
1289     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1290     auto record = pasteData.GetPrimaryText();
1291     ASSERT_TRUE(record != nullptr);
1292     ASSERT_TRUE(*record == "paste record2");
1293 }
1294 
1295 /**
1296  * @tc.name: PasteDataTest0024
1297  * @tc.desc: paste pastedata with 5 records
1298  * @tc.type: FUNC
1299  * @tc.require: RR2025020589956
1300  * @tc.author: wangchenghao
1301  */
1302 HWTEST_F(PasteboardServiceTest, PasteDataTest0024, TestSize.Level0)
1303 {
1304     std::string text = "plain text";
1305     auto data = PasteboardClient::GetInstance()->CreatePlainTextData(text);
1306     ASSERT_TRUE(data != nullptr);
1307     auto record1 = PasteboardClient::GetInstance()->CreatePlainTextRecord("paste record1");
1308     auto record2 = PasteboardClient::GetInstance()->CreatePlainTextRecord("paste record2");
1309     auto record3 = PasteboardClient::GetInstance()->CreatePlainTextRecord("paste record3");
1310     auto record4 = PasteboardClient::GetInstance()->CreatePlainTextRecord("paste record4");
1311     data->AddRecord(record1);
1312     data->AddRecord(record2);
1313     data->AddRecord(record3);
1314     data->AddRecord(record4);
1315     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
1316     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1317     PasteData pasteData;
1318     ret = PasteboardClient::GetInstance()->GetPasteData(pasteData);
1319     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1320     auto record = pasteData.GetPrimaryText();
1321     ASSERT_TRUE(record != nullptr);
1322     ASSERT_TRUE(*record == "paste record4");
1323 }
1324 
1325 /**
1326  * @tc.name: BigPixelMap001
1327  * @tc.desc: paste big pixel map image
1328  * @tc.type: FUNC
1329  * @tc.require:AR000H5I1D
1330  * @tc.author: baoyayong
1331  */
1332 HWTEST_F(PasteboardServiceTest, BigPixelMap001, TestSize.Level1)
1333 {
1334     constexpr uint32_t COLOR_SIZE = 1024 * 1960;
1335     auto color = std::make_unique<uint32_t[]>(COLOR_SIZE);
1336     InitializationOptions opts = { { 1024, 1960 }, PixelFormat::ARGB_8888, PixelFormat::ARGB_8888 };
1337     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color.get(), COLOR_SIZE, opts);
1338     auto pasteData1 = PasteboardClient::GetInstance()->CreatePixelMapData(std::move(pixelMap));
1339     PasteboardClient::GetInstance()->Clear();
1340     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1341     ASSERT_FALSE(hasPasteData);
1342     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData1);
1343     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1344     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1345     ASSERT_TRUE(hasPasteData);
1346     PasteData pasteData2;
1347     ret = PasteboardClient::GetInstance()->GetPasteData(pasteData2);
1348     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1349     auto pixelMap2 = pasteData2.GetPrimaryPixelMap();
1350     ASSERT_TRUE(pixelMap2 != nullptr);
1351     ImageInfo imageInfo {};
1352     pixelMap2->GetImageInfo(imageInfo);
1353     EXPECT_TRUE(imageInfo.size.height == opts.size.height);
1354     EXPECT_TRUE(imageInfo.size.width == opts.size.width);
1355     EXPECT_TRUE(imageInfo.pixelFormat == opts.pixelFormat);
1356 }
1357 
1358 /**
1359  * @tc.name: GetPastedataFail001
1360  * @tc.desc: get paste data fail - SetValue()
1361  * @tc.type: FUNC
1362  * @tc.require: issuesI5WPTM
1363  * @tc.author: chenyu
1364  */
1365 HWTEST_F(PasteboardServiceTest, GetPastedataFail001, TestSize.Level1)
1366 {
1367     PasteboardClient::GetInstance()->Clear();
1368     PasteData data;
1369     auto ret = PasteboardClient::GetInstance()->GetPasteData(data);
1370     EXPECT_TRUE(ret == static_cast<int32_t>(PasteboardError::NO_DATA_ERROR));
1371 }
1372 
1373 /**
1374  * @tc.name: DumpDataTest001
1375  * @tc.desc: DumpData()-remote, CrossDevice
1376  * @tc.type: FUNC
1377  * @tc.require: issueshI5YDEV
1378  * @tc.author: chenyu
1379  */
1380 HWTEST_F(PasteboardServiceTest, DumpDataTest001, TestSize.Level1)
1381 {
1382     std::string plainText = "plain text";
1383     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
1384     pasteData->SetRemote(true);
1385     pasteData->SetShareOption(ShareOption::CrossDevice);
1386     PasteboardClient::GetInstance()->Clear();
1387     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1388     EXPECT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1389     std::string result;
1390     ret = PasteboardServiceTest::ExecuteCmd(result);
1391     EXPECT_TRUE(ret);
1392     EXPECT_TRUE(result.find("CrossDevice") != std::string::npos);
1393     EXPECT_TRUE(result.find("remote") != std::string::npos);
1394     PasteboardClient::GetInstance()->Clear();
1395 }
1396 
1397 /**
1398  * @tc.name: DumpDataTest002
1399  * @tc.desc: DumpData()-local, LocalDevice
1400  * @tc.type: FUNC
1401  * @tc.require: issueshI5YDEV
1402  * @tc.author: chenyu
1403  */
1404 HWTEST_F(PasteboardServiceTest, DumpDataTest002, TestSize.Level1)
1405 {
1406     std::string plainText = "plain text";
1407     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
1408     pasteData->SetShareOption(ShareOption::LocalDevice);
1409     PasteboardClient::GetInstance()->Clear();
1410     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1411     EXPECT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1412     std::string result;
1413     ret = PasteboardServiceTest::ExecuteCmd(result);
1414     EXPECT_TRUE(ret);
1415     EXPECT_TRUE(result.find("LocalDevice") != std::string::npos);
1416     EXPECT_TRUE(result.find("local") != std::string::npos);
1417     PasteboardClient::GetInstance()->Clear();
1418 }
1419 
1420 /**
1421  * @tc.name: DumpDataTest003
1422  * @tc.desc: DumpData()-local, InApp
1423  * @tc.type: FUNC
1424  * @tc.require: issueshI5YDEV
1425  * @tc.author: chenyu
1426  */
1427 HWTEST_F(PasteboardServiceTest, DumpDataTest003, TestSize.Level1)
1428 {
1429     std::string plainText = "plain text";
1430     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
1431     pasteData->SetShareOption(ShareOption::InApp);
1432     PasteboardClient::GetInstance()->Clear();
1433     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1434     EXPECT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1435     std::string result;
1436     ret = PasteboardServiceTest::ExecuteCmd(result);
1437     EXPECT_TRUE(ret);
1438     EXPECT_TRUE(result.find("InAPP") != std::string::npos);
1439     EXPECT_TRUE(result.find("local") != std::string::npos);
1440     PasteboardClient::GetInstance()->Clear();
1441 }
1442 
1443 /**
1444  * @tc.name: DumpDataTest004
1445  * @tc.desc: DumpData()-no data
1446  * @tc.type: FUNC
1447  * @tc.require: issueshI5YDEV
1448  * @tc.author: chenyu
1449  */
1450 HWTEST_F(PasteboardServiceTest, DumpDataTest004, TestSize.Level1)
1451 {
1452     PasteboardClient::GetInstance()->Clear();
1453 
1454     std::string result;
1455     auto ret = PasteboardServiceTest::ExecuteCmd(result);
1456     EXPECT_TRUE(ret);
1457     EXPECT_EQ(result.find("Share"), std::string::npos);
1458     EXPECT_EQ(result.find("Option"), std::string::npos);
1459 }
1460 
1461 /**
1462  * @tc.name: HasPasteDataTest001
1463  * @tc.desc: if !pasteData->IsDraggedData()
1464  * @tc.type: FUNC
1465  * @tc.require: issueshI5YDEV
1466  * @tc.author: chenyu
1467  */
1468 HWTEST_F(PasteboardServiceTest, HasPasteDataTest001, TestSize.Level0)
1469 {
1470     std::vector<uint8_t> arrayBuffer(46);
1471     arrayBuffer = { 2, 7, 6, 8, 9 };
1472     std::string mimeType = "image/jpg";
1473     auto pasteData = PasteboardClient::GetInstance()->CreateKvData(mimeType, arrayBuffer);
1474     PasteboardClient::GetInstance()->Clear();
1475     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1476     EXPECT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1477     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1478     // not DraggedData, not DefaultIME
1479     EXPECT_TRUE(hasPasteData);
1480     PasteboardClient::GetInstance()->Clear();
1481 }
1482 
1483 /**
1484  * @tc.name: SetAppShareOptions
1485  * @tc.desc: set app share options
1486  * @tc.type: FUNC
1487  * @tc.require: issuesIA7V62
1488  * @tc.author: caozhijun
1489  */
1490 HWTEST_F(PasteboardServiceTest, SetAppShareOptions, TestSize.Level0)
1491 {
1492     uint64_t tempTokenID = testAppTokenId_ | SYSTEM_APP_MASK;
1493     auto result = SetSelfTokenID(tempTokenID);
1494     AccessTokenKit::GrantPermission(
1495         tempTokenID, "ohos.permission.MANAGE_PASTEBOARD_APP_SHARE_OPTION", PERMISSION_USER_SET);
1496     PASTEBOARD_HILOGD(
1497         PASTEBOARD_MODULE_SERVICE, "testTokenId= 0x%{public}x, ret= %{public}d!", testAppTokenId_, result);
1498     ShareOption setting = ShareOption::InApp;
1499     int32_t ret = PasteboardClient::GetInstance()->SetAppShareOptions(setting);
1500     EXPECT_TRUE(ret == 0);
1501     ret = PasteboardClient::GetInstance()->SetAppShareOptions(setting);
1502     EXPECT_TRUE(ret == static_cast<int32_t>(PasteboardError::INVALID_OPERATION_ERROR));
1503     ret = PasteboardClient::GetInstance()->RemoveAppShareOptions();
1504     EXPECT_TRUE(ret == 0);
1505     ret = PasteboardClient::GetInstance()->RemoveAppShareOptions();
1506     EXPECT_TRUE(ret == 0);
1507 
1508     setuid(EDM_UID);
1509     std::map<uint32_t, ShareOption> globalShareOptions;
1510     setting = ShareOption::InApp;
1511     globalShareOptions.insert({tempTokenID, setting});
1512     PasteboardClient::GetInstance()->SetGlobalShareOption(globalShareOptions);
1513     ret = PasteboardClient::GetInstance()->SetAppShareOptions(setting);
1514     EXPECT_TRUE(ret == static_cast<int32_t>(PasteboardError::INVALID_OPERATION_ERROR));
1515     ret = PasteboardClient::GetInstance()->RemoveAppShareOptions();
1516     EXPECT_TRUE(ret == 0);
1517     std::vector<uint32_t> tokenIds;
1518     tokenIds.push_back(tempTokenID);
1519     PasteboardClient::GetInstance()->RemoveGlobalShareOption(tokenIds);
1520 
1521     ret = PasteboardClient::GetInstance()->SetAppShareOptions(setting);
1522     EXPECT_TRUE(ret == 0);
1523     PasteboardClient::GetInstance()->SetGlobalShareOption(globalShareOptions);
1524     ret = PasteboardClient::GetInstance()->RemoveAppShareOptions();
1525     EXPECT_TRUE(ret == 0);
1526     PasteboardServiceTest::RestoreSelfTokenId();
1527 }
1528 
1529 } // namespace OHOS::MiscServices