• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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 <gtest/gtest.h>
16 #include <unistd.h>
17 
18 #include <cstdint>
19 #include <vector>
20 
21 #include "access_token.h"
22 #include "accesstoken_kit.h"
23 #include "hap_token_info.h"
24 #include "os_account_manager.h"
25 #include "pasteboard_client.h"
26 #include "pasteboard_error.h"
27 #include "pasteboard_hilog.h"
28 #include "pasteboard_observer_callback.h"
29 #include "permission_state_full.h"
30 #include "pixel_map.h"
31 #include "token_setproc.h"
32 #include "uri.h"
33 #include "want.h"
34 namespace OHOS::MiscServices {
35 using namespace testing::ext;
36 using namespace OHOS::Media;
37 using namespace OHOS::Security::AccessToken;
38 constexpr const char *CMD = "hidumper -s 3701 -a --data";
39 constexpr const uint16_t EACH_LINE_LENGTH = 50;
40 constexpr const uint16_t TOTAL_LENGTH = 500;
41 class PasteboardServiceTest : public testing::Test {
42 public:
43     static void SetUpTestCase(void);
44     static void TearDownTestCase(void);
45     void SetUp();
46     void TearDown();
47     static bool ExecuteCmd(std::string &result);
48 
49     static void AllocTestTokenId();
50     static void DeleteTestTokenId();
51     static void SetTestTokenId();
52     static void RestoreSelfTokenId();
53     static sptr<PasteboardObserver> pasteboardObserver_;
54     static sptr<PasteboardObserver> pasteboardEventObserver_;
55     static std::atomic_bool pasteboardChangedFlag_;
56     static std::atomic_int32_t pasteboardEventStatus_;
57     static uint64_t selfTokenId_;
58     static AccessTokenID testTokenId_;
59 };
60 std::atomic_bool PasteboardServiceTest::pasteboardChangedFlag_ = false;
61 std::atomic_int32_t PasteboardServiceTest::pasteboardEventStatus_ = -1;
62 sptr<PasteboardObserver> PasteboardServiceTest::pasteboardObserver_ = nullptr;
63 sptr<PasteboardObserver> PasteboardServiceTest::pasteboardEventObserver_ = nullptr;
64 uint64_t PasteboardServiceTest::selfTokenId_ = 0;
65 AccessTokenID PasteboardServiceTest::testTokenId_ = 0;
66 
SetUpTestCase(void)67 void PasteboardServiceTest::SetUpTestCase(void)
68 {
69     selfTokenId_ = GetSelfTokenID();
70     AllocTestTokenId();
71 }
72 
TearDownTestCase(void)73 void PasteboardServiceTest::TearDownTestCase(void)
74 {
75     DeleteTestTokenId();
76 }
77 
SetUp(void)78 void PasteboardServiceTest::SetUp(void)
79 {
80 }
81 
TearDown(void)82 void PasteboardServiceTest::TearDown(void)
83 {
84     if (PasteboardServiceTest::pasteboardObserver_ != nullptr) {
85         PasteboardClient::GetInstance()->RemovePasteboardEventObserver(PasteboardServiceTest::pasteboardObserver_);
86     }
87     if (PasteboardServiceTest::pasteboardEventObserver_ != nullptr) {
88         PasteboardClient::GetInstance()->RemovePasteboardEventObserver(PasteboardServiceTest::pasteboardEventObserver_);
89     }
90     PasteboardClient::GetInstance()->Clear();
91     PASTEBOARD_HILOGI(PASTEBOARD_MODULE_SERVICE, "TearDown.");
92 }
93 
OnPasteboardChanged()94 void PasteboardObserverCallback::OnPasteboardChanged()
95 {
96     PasteboardServiceTest::pasteboardChangedFlag_ = true;
97     PASTEBOARD_HILOGI(PASTEBOARD_MODULE_SERVICE, "callback.");
98 }
99 
OnPasteboardEvent(std::string bundleName,int32_t status)100 void PasteboardEventObserverCallback::OnPasteboardEvent(std::string bundleName, int32_t status)
101 {
102     PasteboardServiceTest::pasteboardEventStatus_ = status;
103     PASTEBOARD_HILOGI(PASTEBOARD_MODULE_SERVICE, "event callback bundleName: %{public}s,status:%{public}d",
104         bundleName.c_str(), status);
105 }
106 
ExecuteCmd(std::string & result)107 bool PasteboardServiceTest::ExecuteCmd(std::string &result)
108 {
109     char buff[EACH_LINE_LENGTH] = { 0x00 };
110     char output[TOTAL_LENGTH] = { 0x00 };
111     FILE *ptr = NULL;
112     if ((ptr = popen(CMD, "r")) != NULL) {
113         while (fgets(buff, sizeof(buff), ptr) != nullptr) {
114             if (strcat_s(output, sizeof(output), buff) != 0) {
115                 pclose(ptr);
116                 ptr = NULL;
117                 return false;
118             }
119         }
120         pclose(ptr);
121         ptr = NULL;
122     } else {
123         return false;
124     }
125     result = std::string(output);
126     return true;
127 }
128 
AllocTestTokenId()129 void PasteboardServiceTest::AllocTestTokenId()
130 {
131     std::vector<int32_t> ids;
132     auto ret = AccountSA::OsAccountManager::QueryActiveOsAccountIds(ids);
133     if (ret != ERR_OK || ids.empty()) {
134         PASTEBOARD_HILOGE(PASTEBOARD_MODULE_SERVICE, "query active user failed errCode = %{public}d", ret);
135         return;
136     }
137     HapInfoParams infoParams = {
138         .userID = ids[0],
139         .bundleName = "ohos.privacy_test.pasteboard",
140         .instIndex = 0,
141         .appIDDesc = "privacy_test.pasteboard"
142     };
143     PermissionStateFull testState = {
144         .permissionName = "ohos.permission.DUMP",
145         .isGeneral = true,
146         .resDeviceID = { "local" },
147         .grantStatus = { PermissionState::PERMISSION_GRANTED },
148         .grantFlags = { 1 }
149     };
150     HapPolicyParams policyParams = {
151         .apl = APL_NORMAL,
152         .domain = "test.domain.pasteboard",
153         .permList = {},
154         .permStateList = { testState }
155     };
156 
157     AccessTokenKit::AllocHapToken(infoParams, policyParams);
158     testTokenId_ = Security::AccessToken::AccessTokenKit::GetHapTokenID(
159         infoParams.userID, infoParams.bundleName, infoParams.instIndex);
160     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_SERVICE, "userID = %{public}d, testTokenId = 0x%{public}x.", infoParams.userID,
161         testTokenId_);
162 }
163 
DeleteTestTokenId()164 void PasteboardServiceTest::DeleteTestTokenId()
165 {
166     AccessTokenKit::DeleteToken(testTokenId_);
167 }
168 
169 
SetTestTokenId()170 void PasteboardServiceTest::SetTestTokenId()
171 {
172     auto ret = SetSelfTokenID(testTokenId_);
173     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_SERVICE, "testTokenId = 0x%{public}x, ret = %{public}d!", testTokenId_, ret);
174 }
175 
RestoreSelfTokenId()176 void PasteboardServiceTest::RestoreSelfTokenId()
177 {
178     auto ret = SetSelfTokenID(selfTokenId_);
179     PASTEBOARD_HILOGD(PASTEBOARD_MODULE_SERVICE, "ret = %{public}d!", ret);
180 }
181 
182 /**
183 * @tc.name: PasteboardTest001
184 * @tc.desc: Create paste board test.
185 * @tc.type: FUNC
186 */
187 HWTEST_F(PasteboardServiceTest, PasteboardTest001, TestSize.Level0)
188 {
189     auto record = PasteboardClient::GetInstance()->CreatePlainTextRecord("paste record1");
190     ASSERT_TRUE(record != nullptr);
191     std::string plainText = "plain text";
192     auto data = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
193     ASSERT_TRUE(data != nullptr);
194     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
195     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
196     auto has = PasteboardClient::GetInstance()->HasPasteData();
197     ASSERT_TRUE(has == true);
198     PasteData pasteData;
199     ret = PasteboardClient::GetInstance()->GetPasteData(pasteData);
200     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
201     PASTEBOARD_HILOGI(PASTEBOARD_MODULE_SERVICE, "get.");
202     auto primaryText = pasteData.GetPrimaryText();
203     ASSERT_TRUE(primaryText != nullptr);
204     ASSERT_TRUE(*primaryText == plainText);
205 }
206 
207 /**
208 * @tc.name: PasteRecordTest001
209 * @tc.desc: Create paste board record test.
210 * @tc.type: FUNC
211 */
212 HWTEST_F(PasteboardServiceTest, PasteRecordTest001, TestSize.Level0)
213 {
214     std::string plainText = "helloWorld";
215     auto record = PasteboardClient::GetInstance()->CreatePlainTextRecord(plainText);
216     ASSERT_TRUE(record != nullptr);
217     auto newPlainText = record->GetPlainText();
218     ASSERT_TRUE(newPlainText != nullptr);
219     ASSERT_TRUE(*newPlainText == plainText);
220 }
221 
222 /**
223 * @tc.name: PasteRecordTest002
224 * @tc.desc: Create paste board record test.
225 * @tc.type: FUNC
226 */
227 HWTEST_F(PasteboardServiceTest, PasteRecordTest002, TestSize.Level0)
228 {
229     std::string htmlText = "<div class='disabled item tip user-programs'>";
230     auto record = PasteboardClient::GetInstance()->CreateHtmlTextRecord(htmlText);
231     ASSERT_TRUE(record != nullptr);
232     auto newHtmlText = record->GetHtmlText();
233     ASSERT_TRUE(newHtmlText != nullptr);
234     ASSERT_TRUE(*newHtmlText == htmlText);
235 }
236 
237 /**
238 * @tc.name: PasteRecordTest003
239 * @tc.desc: Create paste board record test.
240 * @tc.type: FUNC
241 */
242 HWTEST_F(PasteboardServiceTest, PasteRecordTest003, TestSize.Level0)
243 {
244     using namespace OHOS::AAFwk;
245     std::shared_ptr<Want> want = std::make_shared<Want>();
246     std::string key = "id";
247     int32_t id = 456;
248     Want wantIn = want->SetParam(key, id);
249     auto record = PasteboardClient::GetInstance()->CreateWantRecord(want);
250     ASSERT_TRUE(record != nullptr);
251     auto newWant = record->GetWant();
252     ASSERT_TRUE(newWant != nullptr);
253     int32_t defaultValue = 333;
254     ASSERT_TRUE(newWant->GetIntParam(key, defaultValue) == id);
255 }
256 
257 /**
258 * @tc.name: PasteRecordTest004
259 * @tc.desc: Create paste board record test.
260 * @tc.type: FUNC
261 */
262 HWTEST_F(PasteboardServiceTest, PasteRecordTest004, TestSize.Level0)
263 {
264     OHOS::Uri uri("uri");
265     auto record = PasteboardClient::GetInstance()->CreateUriRecord(uri);
266     ASSERT_TRUE(record != nullptr);
267     auto newUri = record->GetUri();
268     ASSERT_TRUE(newUri != nullptr);
269     ASSERT_TRUE(newUri->ToString() == uri.ToString());
270 }
271 
272 /**
273 * @tc.name: PasteRecordTest005
274 * @tc.desc: Create paste board record test.
275 * @tc.type: FUNC
276 * @tc.require: AR000H5GKU
277 */
278 HWTEST_F(PasteboardServiceTest, PasteRecordTest005, TestSize.Level0)
279 {
280     uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
281     InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888 };
282     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, 100, opts);
283     std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
284     auto pasteDataRecord = PasteboardClient::GetInstance()->CreatePixelMapRecord(pixelMapIn);
285     ASSERT_TRUE(pasteDataRecord != nullptr);
286     auto newPixelMap = pasteDataRecord->GetPixelMap();
287     ASSERT_TRUE(newPixelMap != nullptr);
288     ImageInfo imageInfo = {};
289     newPixelMap->GetImageInfo(imageInfo);
290     ASSERT_TRUE(imageInfo.size.height == opts.size.height);
291     ASSERT_TRUE(imageInfo.size.width == opts.size.width);
292     ASSERT_TRUE(imageInfo.pixelFormat == opts.pixelFormat);
293 }
294 
295 /**
296 * @tc.name: PasteRecordTest006
297 * @tc.desc: Create paste board record test.
298 * @tc.type: FUNC
299 * @tc.require: AR000H5GKU
300 */
301 HWTEST_F(PasteboardServiceTest, PasteRecordTest006, TestSize.Level0)
302 {
303     uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
304     InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888 };
305     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, sizeof(color)/sizeof(color[0]), opts);
306     std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
307     auto pasteDataRecord = PasteboardClient::GetInstance()->CreatePixelMapRecord(pixelMapIn);
308     ASSERT_TRUE(pasteDataRecord != nullptr);
309     InitializationOptions opts1 = { { 6, 9 }, PixelFormat::RGB_565 };
310     std::unique_ptr<PixelMap> pixelMap1 = PixelMap::Create(color, sizeof(color)/sizeof(color[0]), opts1);
311     std::shared_ptr<PixelMap> pixelMapIn1 = move(pixelMap1);
312     pasteDataRecord = pasteDataRecord->NewPixelMapRecord(pixelMapIn1);
313     ASSERT_TRUE(pasteDataRecord != nullptr);
314     auto newPixelMap = pasteDataRecord->GetPixelMap();
315     ASSERT_TRUE(newPixelMap != nullptr);
316     ImageInfo imageInfo = {};
317     newPixelMap->GetImageInfo(imageInfo);
318     ASSERT_TRUE(imageInfo.size.height == opts1.size.height);
319     ASSERT_TRUE(imageInfo.size.width == opts1.size.width);
320     ASSERT_TRUE(imageInfo.pixelFormat == opts1.pixelFormat);
321 }
322 
323 /**
324 * @tc.name: PasteRecordTest007
325 * @tc.desc: Create paste board record test.
326 * @tc.type: FUNC
327 * @tc.require: AR000HEECD
328 */
329 HWTEST_F(PasteboardServiceTest, PasteRecordTest007, TestSize.Level0)
330 {
331     std::vector<uint8_t> arrayBuffer(46);
332     arrayBuffer = { 2, 7, 6, 8, 9 };
333     std::string mimeType = "image/jpg";
334     auto pasteDataRecord = PasteboardClient::GetInstance()->CreateKvRecord(mimeType, arrayBuffer);
335     ASSERT_TRUE(pasteDataRecord != nullptr);
336     auto customData = pasteDataRecord->GetCustomData();
337     ASSERT_TRUE(customData != nullptr);
338     auto itemData = customData->GetItemData();
339     ASSERT_TRUE(itemData.size() == 1);
340     auto item = itemData.find(mimeType);
341     ASSERT_TRUE(item != itemData.end());
342     ASSERT_TRUE(item->second == arrayBuffer);
343 }
344 
345 /**
346 * @tc.name: PasteRecordTest008
347 * @tc.desc: Create paste board record test.
348 * @tc.type: FUNC
349 * @tc.require: AR000HEECD
350 */
351 HWTEST_F(PasteboardServiceTest, PasteRecordTest008, TestSize.Level0)
352 {
353     std::vector<uint8_t> arrayBuffer(46);
354     arrayBuffer = { 2, 7, 6, 8, 9 };
355     std::string mimeType = "image/jpg";
356     auto pasteDataRecord = PasteboardClient::GetInstance()->CreateKvRecord(mimeType, arrayBuffer);
357     ASSERT_TRUE(pasteDataRecord != nullptr);
358     std::string mimeType1 = "img/png";
359     std::vector<uint8_t> arrayBuffer1(46);
360     arrayBuffer1 = { 2, 7, 6, 8, 9 };
361     pasteDataRecord = pasteDataRecord->NewKvRecord(mimeType1, arrayBuffer1);
362     auto customData = pasteDataRecord->GetCustomData();
363     ASSERT_TRUE(customData != nullptr);
364     auto itemData = customData->GetItemData();
365     ASSERT_TRUE(itemData.size() == 1);
366     auto item = itemData.find(mimeType1);
367     ASSERT_TRUE(item != itemData.end());
368     ASSERT_TRUE(item->second == arrayBuffer1);
369 }
370 
371 /**
372 * @tc.name: PasteDataTest001
373 * @tc.desc: Create paste board data test.
374 * @tc.type: FUNC
375 */
376 HWTEST_F(PasteboardServiceTest, PasteDataTest001, TestSize.Level0)
377 {
378     using namespace OHOS::AAFwk;
379     std::shared_ptr<Want> want = std::make_shared<Want>();
380     std::string key = "id";
381     int32_t id = 456;
382     Want wantIn = want->SetParam(key, id);
383     auto data = PasteboardClient::GetInstance()->CreateWantData(std::make_shared<Want>(wantIn));
384     ASSERT_TRUE(data != nullptr);
385     PasteboardClient::GetInstance()->Clear();
386     auto has = PasteboardClient::GetInstance()->HasPasteData();
387     ASSERT_TRUE(has != true);
388     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
389     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
390     has = PasteboardClient::GetInstance()->HasPasteData();
391     ASSERT_TRUE(has == true);
392     PasteData pasteData;
393     ret = PasteboardClient::GetInstance()->GetPasteData(pasteData);
394     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
395     auto record = pasteData.GetPrimaryWant();
396     ASSERT_TRUE(record != nullptr);
397     int32_t defaultValue = 333;
398     ASSERT_TRUE(record->GetIntParam(key, defaultValue) == id);
399 }
400 
401 /**
402 * @tc.name: PasteDataTest002
403 * @tc.desc: Create paste board data test.
404 * @tc.type: FUNC
405 */
406 HWTEST_F(PasteboardServiceTest, PasteDataTest002, TestSize.Level0)
407 {
408     OHOS::Uri uri("uri");
409     auto data = PasteboardClient::GetInstance()->CreateUriData(uri);
410     ASSERT_TRUE(data != nullptr);
411     PasteboardClient::GetInstance()->Clear();
412     auto has = PasteboardClient::GetInstance()->HasPasteData();
413     ASSERT_TRUE(has != true);
414     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
415     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
416     has = PasteboardClient::GetInstance()->HasPasteData();
417     ASSERT_TRUE(has == true);
418     PasteData pasteData;
419     ret = PasteboardClient::GetInstance()->GetPasteData(pasteData);
420     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
421     auto record = pasteData.GetPrimaryUri();
422     ASSERT_TRUE(record != nullptr);
423     ASSERT_TRUE(record->ToString() == uri.ToString());
424 }
425 
426 /**
427 * @tc.name: PasteDataTest003
428 * @tc.desc: Create paste board data test.
429 * @tc.type: FUNC
430 */
431 HWTEST_F(PasteboardServiceTest, PasteDataTest003, TestSize.Level0)
432 {
433     std::string text = "plain text";
434     auto data = PasteboardClient::GetInstance()->CreatePlainTextData(text);
435     ASSERT_TRUE(data != nullptr);
436     PasteboardClient::GetInstance()->Clear();
437     auto has = PasteboardClient::GetInstance()->HasPasteData();
438     ASSERT_TRUE(has != true);
439     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
440     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
441     has = PasteboardClient::GetInstance()->HasPasteData();
442     ASSERT_TRUE(has == true);
443     PasteData pasteData;
444     ret = PasteboardClient::GetInstance()->GetPasteData(pasteData);
445     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
446     auto record = pasteData.GetPrimaryText();
447     ASSERT_TRUE(record != nullptr);
448     ASSERT_TRUE(*record == text);
449 }
450 
451 /**
452 * @tc.name: PasteDataTest004
453 * @tc.desc: Create paste board data test.
454 * @tc.type: FUNC
455 */
456 HWTEST_F(PasteboardServiceTest, PasteDataTest004, TestSize.Level0)
457 {
458     std::string htmlText = "<div class='disabled item tip user-programs'>";
459     auto data = PasteboardClient::GetInstance()->CreateHtmlData(htmlText);
460     ASSERT_TRUE(data != nullptr);
461     PasteboardClient::GetInstance()->Clear();
462     auto has = PasteboardClient::GetInstance()->HasPasteData();
463     ASSERT_TRUE(has != true);
464     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*data);
465     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
466     has = PasteboardClient::GetInstance()->HasPasteData();
467     ASSERT_TRUE(has == true);
468     PasteData pasteData;
469     ret = PasteboardClient::GetInstance()->GetPasteData(pasteData);
470     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
471     auto record = pasteData.GetPrimaryHtml();
472     ASSERT_TRUE(record != nullptr);
473     ASSERT_TRUE(*record == htmlText);
474 }
475 
476 /**
477 * @tc.name: PasteDataTest005
478 * @tc.desc: marshalling test.
479 * @tc.type: FUNC
480 * @tc.require: AR000HEECD
481 */
482 HWTEST_F(PasteboardServiceTest, PasteDataTest005, TestSize.Level0)
483 {
484     std::string htmlText = "<div class='disabled item tip user-programs'>";
485     auto pasteData = PasteboardClient::GetInstance()->CreateHtmlData(htmlText);
486     ASSERT_TRUE(pasteData != nullptr);
487     std::string plainText = "plain text";
488     PasteDataRecord::Builder builder(MIMETYPE_TEXT_HTML);
489     std::string mimeType = MIMETYPE_TEXT_PLAIN;
490     std::vector<uint8_t> arrayBuffer(46);
491     arrayBuffer = { 2, 7, 6, 8, 9 };
492     std::string mimeType1 = "image/jpg";
493     std::shared_ptr<MineCustomData> customData = std::make_shared<MineCustomData>();
494     customData->AddItemData(mimeType1, arrayBuffer);
495     std::shared_ptr<PasteDataRecord> pasteDataRecord = builder.SetMimeType(mimeType)
496                                                            .SetPlainText(std::make_shared<std::string>(plainText))
497                                                            .SetHtmlText(std::make_shared<std::string>(htmlText))
498                                                            .SetCustomData(customData)
499                                                            .Build();
500     pasteData->AddRecord(pasteDataRecord);
501     PasteboardClient::GetInstance()->Clear();
502     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
503     ASSERT_TRUE(hasPasteData != true);
504     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
505     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
506     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
507     ASSERT_TRUE(hasPasteData == true);
508     PasteData newPasteData;
509     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
510     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
511     auto primaryHtml = newPasteData.GetPrimaryHtml();
512     ASSERT_TRUE(primaryHtml != nullptr);
513     ASSERT_TRUE(*primaryHtml == htmlText);
514     auto firstRecord = newPasteData.GetRecordAt(0);
515     ASSERT_TRUE(firstRecord != nullptr);
516     ASSERT_TRUE(firstRecord->GetMimeType() == mimeType);
517     auto newPlainText = firstRecord->GetPlainText();
518     ASSERT_TRUE(newPlainText != nullptr);
519     ASSERT_TRUE(*newPlainText == plainText);
520     auto newHtmlText = firstRecord->GetHtmlText();
521     ASSERT_TRUE(newHtmlText != nullptr);
522     ASSERT_TRUE(*newHtmlText == htmlText);
523     customData = pasteDataRecord->GetCustomData();
524     ASSERT_TRUE(customData != nullptr);
525     auto itemData = customData->GetItemData();
526     ASSERT_TRUE(itemData.size() == 1);
527     auto item = itemData.find(mimeType1);
528     ASSERT_TRUE(item != itemData.end());
529     ASSERT_TRUE(item->second == arrayBuffer);
530 }
531 
532 /**
533 * @tc.name: PasteDataTest006
534 * @tc.desc: marshalling test.
535 * @tc.type: FUNC
536 */
537 HWTEST_F(PasteboardServiceTest, PasteDataTest006, TestSize.Level0)
538 {
539     using namespace OHOS::AAFwk;
540     std::string plainText = "helloWorld";
541     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
542     ASSERT_TRUE(pasteData != nullptr);
543     std::shared_ptr<Want> want = std::make_shared<Want>();
544     std::string key = "id";
545     int32_t id = 456;
546     Want wantIn = want->SetParam(key, id);
547     PasteDataRecord::Builder builder(MIMETYPE_TEXT_WANT);
548     std::shared_ptr<PasteDataRecord> pasteDataRecord =
549         builder.SetWant(std::make_shared<Want>(wantIn)).SetPlainText(std::make_shared<std::string>(plainText)).Build();
550     pasteData->AddRecord(pasteDataRecord);
551     PasteboardClient::GetInstance()->Clear();
552     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
553     ASSERT_TRUE(hasPasteData != true);
554     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
555     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
556     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
557     ASSERT_TRUE(hasPasteData == true);
558     PasteData newPasteData;
559     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
560     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
561     auto firstRecord = newPasteData.GetRecordAt(0);
562     ASSERT_TRUE(firstRecord != nullptr);
563     ASSERT_TRUE(firstRecord->GetMimeType() == MIMETYPE_TEXT_WANT);
564     auto newWant = firstRecord->GetWant();
565     ASSERT_TRUE(newWant != nullptr);
566     int32_t defaultValue = 333;
567     ASSERT_TRUE(newWant->GetIntParam(key, defaultValue) == id);
568     auto newPlainText = firstRecord->GetPlainText();
569     ASSERT_TRUE(newPlainText != nullptr);
570     ASSERT_TRUE(*newPlainText == plainText);
571 }
572 
573 /**
574 * @tc.name: PasteDataTest007
575 * @tc.desc: marshalling test.
576 * @tc.type: FUNC
577 * @tc.require: AR000H5GKU
578 */
579 HWTEST_F(PasteboardServiceTest, PasteDataTest007, TestSize.Level0)
580 {
581     std::string htmlText = "<div class='disabled item tip user-programs'>";
582     auto pasteData = PasteboardClient::GetInstance()->CreateHtmlData(htmlText);
583     ASSERT_TRUE(pasteData != nullptr);
584     OHOS::Uri uri("uri");
585     uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
586     InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888 };
587     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, sizeof(color)/sizeof(color[0]), opts);
588     std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
589     PasteDataRecord::Builder builder(MIMETYPE_TEXT_URI);
590     std::shared_ptr<PasteDataRecord> pasteDataRecord =
591         builder.SetUri(std::make_shared<OHOS::Uri>(uri)).SetPixelMap(pixelMapIn).Build();
592     pasteData->AddRecord(pasteDataRecord);
593     PasteboardClient::GetInstance()->Clear();
594     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
595     ASSERT_TRUE(hasPasteData != true);
596     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
597     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
598     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
599     ASSERT_TRUE(hasPasteData == true);
600     PasteData newPasteData;
601     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
602     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
603     auto firstRecord = newPasteData.GetRecordAt(0);
604     ASSERT_TRUE(firstRecord != nullptr);
605     ASSERT_TRUE(firstRecord->GetMimeType() == MIMETYPE_TEXT_URI);
606     auto newUri = firstRecord->GetUri();
607     ASSERT_TRUE(newUri != nullptr);
608     ASSERT_TRUE(newUri->ToString() == uri.ToString());
609     auto newPixelMap = firstRecord->GetPixelMap();
610     ASSERT_TRUE(newPixelMap != nullptr);
611     ImageInfo imageInfo = {};
612     newPixelMap->GetImageInfo(imageInfo);
613     ASSERT_TRUE(imageInfo.size.height == opts.size.height);
614     ASSERT_TRUE(imageInfo.size.width == opts.size.width);
615     ASSERT_TRUE(imageInfo.pixelFormat == opts.pixelFormat);
616 }
617 
618 /**
619 * @tc.name: PasteDataTest008
620 * @tc.desc: Create paste board data test.
621 * @tc.type: FUNC
622 * @tc.require: AR000H5GKU
623 */
624 HWTEST_F(PasteboardServiceTest, PasteDataTest008, TestSize.Level0)
625 {
626     uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
627     InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888 };
628     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, sizeof(color)/sizeof(color[0]), opts);
629     std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
630     auto pasteData = PasteboardClient::GetInstance()->CreatePixelMapData(pixelMapIn);
631     ASSERT_TRUE(pasteData != nullptr);
632     PasteboardClient::GetInstance()->Clear();
633     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
634     ASSERT_TRUE(hasPasteData != true);
635     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
636     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
637     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
638     ASSERT_TRUE(hasPasteData == true);
639     PasteData newPasteData;
640     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
641     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
642     auto primaryPixelMap = newPasteData.GetPrimaryPixelMap();
643     ASSERT_TRUE(primaryPixelMap != nullptr);
644     ImageInfo imageInfo = {};
645     primaryPixelMap->GetImageInfo(imageInfo);
646     ASSERT_TRUE(imageInfo.size.height == opts.size.height);
647     ASSERT_TRUE(imageInfo.size.width == opts.size.width);
648     ASSERT_TRUE(imageInfo.pixelFormat == opts.pixelFormat);
649 }
650 
651 /**
652 * @tc.name: PasteDataTest009
653 * @tc.desc: Create paste board data test.
654 * @tc.type: FUNC
655 * @tc.require: AR000H5GKU
656 */
657 HWTEST_F(PasteboardServiceTest, PasteDataTest009, TestSize.Level0)
658 {
659     std::string plainText = "plain text";
660     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
661     ASSERT_TRUE(pasteData != nullptr);
662     uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
663     InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888 };
664     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, sizeof(color)/sizeof(color[0]), opts);
665     std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
666     pasteData->AddPixelMapRecord(pixelMapIn);
667     PasteboardClient::GetInstance()->Clear();
668     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
669     ASSERT_TRUE(hasPasteData != true);
670     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
671     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
672     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
673     ASSERT_TRUE(hasPasteData == true);
674     PasteData newPasteData;
675     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
676     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
677     auto primaryPlainText = newPasteData.GetPrimaryText();
678     ASSERT_TRUE(primaryPlainText != nullptr);
679     ASSERT_TRUE(*primaryPlainText == plainText);
680     auto primaryPixelMap = newPasteData.GetPrimaryPixelMap();
681     ASSERT_TRUE(primaryPixelMap != nullptr);
682     ImageInfo imageInfo = {};
683     primaryPixelMap->GetImageInfo(imageInfo);
684     ASSERT_TRUE(imageInfo.size.height == opts.size.height);
685     ASSERT_TRUE(imageInfo.size.width == opts.size.width);
686     ASSERT_TRUE(imageInfo.pixelFormat == opts.pixelFormat);
687 }
688 
689 /**
690 * @tc.name: PasteDataTest0010
691 * @tc.desc: Create paste board data test.
692 * @tc.type: FUNC
693 * @tc.require: AR000HEECD
694 */
695 HWTEST_F(PasteboardServiceTest, PasteDataTest0010, TestSize.Level0)
696 {
697     std::vector<uint8_t> arrayBuffer(46);
698     arrayBuffer = { 2, 7, 6, 8, 9 };
699     std::string mimeType = "image/jpg";
700     auto pasteData = PasteboardClient::GetInstance()->CreateKvData(mimeType, arrayBuffer);
701     ASSERT_TRUE(pasteData != nullptr);
702     PasteboardClient::GetInstance()->Clear();
703     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
704     ASSERT_TRUE(hasPasteData != true);
705     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
706     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
707     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
708     ASSERT_TRUE(hasPasteData == true);
709     PasteData newPasteData;
710     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
711     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
712     auto firstRecord = newPasteData.GetRecordAt(0);
713     auto customData = firstRecord->GetCustomData();
714     ASSERT_TRUE(customData != nullptr);
715     auto itemData = customData->GetItemData();
716     ASSERT_TRUE(itemData.size() == 1);
717     auto item = itemData.find(mimeType);
718     ASSERT_TRUE(item != itemData.end());
719     ASSERT_TRUE(item->second == arrayBuffer);
720 }
721 
722 /**
723 * @tc.name: PasteDataTest0011
724 * @tc.desc: Create paste board data test.
725 * @tc.type: FUNC
726 * @tc.require: AR000HEECD
727 */
728 HWTEST_F(PasteboardServiceTest, PasteDataTest0011, TestSize.Level0)
729 {
730     std::string plainText = "plain text";
731     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
732     ASSERT_TRUE(pasteData != nullptr);
733     std::vector<uint8_t> arrayBuffer(46);
734     arrayBuffer = { 2, 7, 6, 8, 9 };
735     std::string mimeType = "image/jpg";
736     pasteData->AddKvRecord(mimeType, arrayBuffer);
737     PasteboardClient::GetInstance()->Clear();
738     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
739     ASSERT_TRUE(hasPasteData != true);
740     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
741     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
742     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
743     ASSERT_TRUE(hasPasteData == true);
744     PasteData newPasteData;
745     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
746     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
747     auto firstRecord = newPasteData.GetRecordAt(0);
748     auto customData = firstRecord->GetCustomData();
749     ASSERT_TRUE(customData != nullptr);
750     auto itemData = customData->GetItemData();
751     ASSERT_TRUE(itemData.size() == 1);
752     auto item = itemData.find(mimeType);
753     ASSERT_TRUE(item != itemData.end());
754     ASSERT_TRUE(item->second == arrayBuffer);
755     auto primaryPlainText = newPasteData.GetPrimaryText();
756     ASSERT_TRUE(primaryPlainText != nullptr);
757     ASSERT_TRUE(*primaryPlainText == plainText);
758 }
759 
760 /**
761 * @tc.name: PasteDataTest0012
762 * @tc.desc: Create paste board data test.
763 * @tc.type: FUNC
764 * @tc.require: AR000HEECD
765 */
766 HWTEST_F(PasteboardServiceTest, PasteDataTest0012, TestSize.Level0)
767 {
768     std::string plainText = "plain text";
769     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
770     ASSERT_TRUE(pasteData != nullptr);
771     std::vector<uint8_t> arrayBuffer(46);
772     arrayBuffer = { 2, 7, 6, 8, 9 };
773     std::string mimeType = "image/jpg";
774     pasteData->AddKvRecord(mimeType, arrayBuffer);
775     auto record = pasteData->GetRecordAt(0);
776     ASSERT_TRUE(record != nullptr);
777     std::string mimeType1 = "img/png";
778     std::vector<uint8_t> arrayBuffer1(54);
779     arrayBuffer1 = { 4, 7, 9, 8, 7 };
780     auto customData = record->GetCustomData();
781     ASSERT_TRUE(customData != nullptr);
782     customData->AddItemData(mimeType1, arrayBuffer1);
783     PasteboardClient::GetInstance()->Clear();
784     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
785     ASSERT_TRUE(hasPasteData != true);
786     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
787     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
788     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
789     ASSERT_TRUE(hasPasteData == true);
790     PasteData newPasteData;
791     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
792     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
793     auto firstRecord = newPasteData.GetRecordAt(0);
794     ASSERT_TRUE(firstRecord != nullptr);
795     customData = firstRecord->GetCustomData();
796     ASSERT_TRUE(customData != nullptr);
797     auto itemData = customData->GetItemData();
798     ASSERT_TRUE(itemData.size() == 2);
799     auto item = itemData.find(mimeType);
800     ASSERT_TRUE(item != itemData.end());
801     ASSERT_TRUE(item->second == arrayBuffer);
802     item = itemData.find(mimeType1);
803     ASSERT_TRUE(item != itemData.end());
804     ASSERT_TRUE(item->second == arrayBuffer1);
805     auto primaryPlainText = newPasteData.GetPrimaryText();
806     ASSERT_TRUE(primaryPlainText != nullptr);
807     ASSERT_TRUE(*primaryPlainText == plainText);
808     auto secondRecord = newPasteData.GetRecordAt(1);
809     ASSERT_TRUE(secondRecord != nullptr);
810     auto secondRecordMimeType = secondRecord->GetMimeType();
811     ASSERT_TRUE(secondRecordMimeType == MIMETYPE_TEXT_PLAIN);
812 }
813 
814 /**
815 * @tc.name: PasteDataTest0013
816 * @tc.desc: MineCustomData: Marshalling unMarshalling
817 * @tc.type: FUNC
818 * @tc.require: AR000HEECD
819 */
820 HWTEST_F(PasteboardServiceTest, PasteDataTest0013, TestSize.Level0)
821 {
822     std::string plainText = "plain text";
823     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
824     ASSERT_TRUE(pasteData != nullptr);
825     std::vector<uint8_t> arrayBuffer(46);
826     arrayBuffer = { 2, 7, 6, 8, 9 };
827     std::string mimeType = "image/jpg";
828     pasteData->AddKvRecord(mimeType, arrayBuffer);
829     auto record = pasteData->GetRecordAt(0);
830     ASSERT_TRUE(record != nullptr);
831     std::string mimeType1 = "img/png";
832     std::vector<uint8_t> arrayBuffer1(54);
833     arrayBuffer1 = { 4, 7, 9, 8, 7 };
834     auto customData = record->GetCustomData();
835     ASSERT_TRUE(customData != nullptr);
836     customData->AddItemData(mimeType1, arrayBuffer1);
837     Parcel parcel;
838     auto ret = customData->Marshalling(parcel);
839     ASSERT_TRUE(ret == true);
840     std::shared_ptr<MineCustomData> customDataGet(customData->Unmarshalling(parcel));
841     ASSERT_TRUE(customDataGet != nullptr);
842     auto itemData = customDataGet->GetItemData();
843     ASSERT_TRUE(itemData.size() == 2);
844     auto item = itemData.find(mimeType);
845     ASSERT_TRUE(item != itemData.end());
846     ASSERT_TRUE(item->second == arrayBuffer);
847     item = itemData.find(mimeType1);
848     ASSERT_TRUE(item != itemData.end());
849     ASSERT_TRUE(item->second == arrayBuffer1);
850 }
851 
852 /**
853 * @tc.name: PasteDataTest0014
854 * @tc.desc: Create paste board data test.
855 * @tc.type: FUNC
856 * @tc.require: AROOOH5R5G
857 */
858 HWTEST_F(PasteboardServiceTest, PasteDataTest0014, TestSize.Level0)
859 {
860     std::string plainText = "plain text";
861     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
862     ASSERT_TRUE(pasteData != nullptr);
863     auto shareOption = pasteData->GetShareOption();
864     ASSERT_TRUE(shareOption == ShareOption::CrossDevice);
865     pasteData->SetShareOption(ShareOption::InApp);
866     auto tokenId = pasteData->GetTokenId();
867     ASSERT_TRUE(tokenId == 0);
868     pasteData->SetTokenId(1);
869     PasteboardClient::GetInstance()->Clear();
870     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
871     ASSERT_TRUE(hasPasteData != true);
872     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
873     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
874     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
875     ASSERT_TRUE(hasPasteData == true);
876     PasteData newPasteData;
877     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
878     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
879     shareOption = newPasteData.GetShareOption();
880     ASSERT_TRUE(shareOption == ShareOption::InApp);
881     tokenId = pasteData->GetTokenId();
882     ASSERT_TRUE(tokenId != 0);
883 }
884 
885 /**
886 * @tc.name: PasteDataTest0015
887 * @tc.desc: isLocalPaste and isDraggedData test.
888 * @tc.type: FUNC
889 * @tc.require: AROOOH5R5G
890 */
891 HWTEST_F(PasteboardServiceTest, PasteDataTest0015, TestSize.Level0)
892 {
893     std::string plainText = "plain text";
894     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
895     ASSERT_TRUE(pasteData != nullptr);
896     auto isDraggedData = pasteData->IsDraggedData();
897     ASSERT_FALSE(isDraggedData);
898     pasteData->SetDraggedDataFlag(true);
899     auto isLocalPaste = pasteData->IsLocalPaste();
900     ASSERT_FALSE(isLocalPaste);
901     pasteData->SetLocalPasteFlag(true);
902     isLocalPaste = pasteData->IsLocalPaste();
903     ASSERT_TRUE(isLocalPaste);
904     pasteData->SetLocalPasteFlag(false);
905     isLocalPaste = pasteData->IsLocalPaste();
906     ASSERT_FALSE(isLocalPaste);
907     PasteboardClient::GetInstance()->Clear();
908     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
909     ASSERT_FALSE(hasPasteData);
910     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
911     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
912     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
913     ASSERT_TRUE(hasPasteData);
914     PasteData newPasteData;
915     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
916     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
917     isDraggedData = newPasteData.IsDraggedData();
918     ASSERT_TRUE(isDraggedData);
919     isLocalPaste = newPasteData.IsLocalPaste();
920     ASSERT_TRUE(isLocalPaste);
921 }
922 
923 /**
924 * @tc.name: PasteDataTest0016
925 * @tc.desc: RemoveRecordAt HasMimeType test.
926 * @tc.type: FUNC
927 * @tc.require: AROOOH5R5G
928 */
929 HWTEST_F(PasteboardServiceTest, PasteDataTest0016, TestSize.Level0)
930 {
931     std::string plainText = "plain text";
932     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
933     ASSERT_TRUE(pasteData != nullptr);
934     std::vector<uint8_t> arrayBuffer(46);
935     arrayBuffer = { 2, 7, 6, 8, 9 };
936     std::string mimeType = "image/jpg";
937     pasteData->AddKvRecord(mimeType, arrayBuffer);
938     pasteData->RemoveRecordAt(1);
939     PasteboardClient::GetInstance()->Clear();
940     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
941     ASSERT_FALSE(hasPasteData);
942     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
943     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
944     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
945     ASSERT_TRUE(hasPasteData);
946     PasteData newPasteData;
947     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
948     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
949     ASSERT_TRUE(newPasteData.HasMimeType(mimeType));
950     ASSERT_TRUE(newPasteData.GetRecordCount() == 1);
951     auto record = newPasteData.GetRecordAt(0);
952     ASSERT_TRUE(record != nullptr);
953     auto customData = record->GetCustomData();
954     ASSERT_TRUE(customData != nullptr);
955     auto itemData = customData->GetItemData();
956     ASSERT_EQ(itemData.size(), 1);
957     auto item = itemData.find(mimeType);
958     ASSERT_TRUE(item != itemData.end());
959     EXPECT_EQ(item->second, arrayBuffer);
960 }
961 
962 /**
963 * @tc.name: PasteDataTest0017
964 * @tc.desc: ReplaceRecordAt GetProperty GetTag test.
965 * @tc.type: FUNC
966 * @tc.require: AROOOH5R5G
967 */
968 HWTEST_F(PasteboardServiceTest, PasteDataTest0017, TestSize.Level0)
969 {
970     uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
971     InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888 };
972     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, sizeof(color)/sizeof(color[0]), opts);
973     std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
974     auto pasteData = PasteboardClient::GetInstance()->CreatePixelMapData(pixelMapIn);
975     ASSERT_TRUE(pasteData != nullptr);
976     auto pixelMap1 = pasteData->GetPrimaryPixelMap();
977     ASSERT_TRUE(pixelMap1 != nullptr);
978     ImageInfo imageInfo = {};
979     pixelMap1->GetImageInfo(imageInfo);
980     ASSERT_EQ(imageInfo.size.height, opts.size.height);
981     ASSERT_EQ(imageInfo.size.width, opts.size.width);
982     ASSERT_EQ(imageInfo.pixelFormat, opts.pixelFormat);
983     std::string plainText = "plain text";
984     auto record = PasteboardClient::GetInstance()->CreatePlainTextRecord(plainText);
985     ASSERT_TRUE(record != nullptr);
986     ASSERT_TRUE(pasteData->ReplaceRecordAt(0, record));
987     PasteboardClient::GetInstance()->Clear();
988     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
989     ASSERT_FALSE(hasPasteData);
990     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
991     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
992     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
993     ASSERT_TRUE(hasPasteData);
994     PasteData newPasteData;
995     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
996     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
997     ASSERT_EQ(newPasteData.GetRecordCount(), 1);
998     auto record1 = newPasteData.GetRecordAt(0);
999     ASSERT_TRUE(record1 != nullptr);
1000     auto plainText1 = record1->GetPlainText();
1001     ASSERT_TRUE(plainText1 != nullptr);
1002     EXPECT_EQ(*plainText1, plainText);
1003     auto property = newPasteData.GetProperty();
1004     EXPECT_TRUE(property.additions.IsEmpty());
1005     EXPECT_EQ(property.mimeTypes.size(), 1);
1006     EXPECT_EQ(property.mimeTypes[0], MIMETYPE_TEXT_PLAIN);
1007     EXPECT_TRUE(property.tag.empty());
1008     EXPECT_EQ(property.shareOption, ShareOption::CrossDevice);
1009     EXPECT_TRUE(property.tokenId != 0);
1010     auto tag = newPasteData.GetTag();
1011     EXPECT_TRUE(tag.empty());
1012 }
1013 
1014 /**
1015 * @tc.name: PasteDataTest0018
1016 * @tc.desc: AddPasteboardChangedObserver RemovePasteboardChangedObserver OnRemoteDied OnRemoteSaDied test.
1017 * @tc.type: FUNC
1018 * @tc.require: AROOOH5R5G
1019 */
1020 HWTEST_F(PasteboardServiceTest, PasteDataTest0018, TestSize.Level0)
1021 {
1022     if (PasteboardServiceTest::pasteboardObserver_ == nullptr) {
1023         PasteboardServiceTest::pasteboardObserver_ = new PasteboardObserverCallback();
1024     }
1025     ASSERT_TRUE(PasteboardServiceTest::pasteboardObserver_ != nullptr);
1026     PasteboardClient::GetInstance()->AddPasteboardChangedObserver(PasteboardServiceTest::pasteboardObserver_);
1027     ASSERT_FALSE(PasteboardServiceTest::pasteboardChangedFlag_);
1028     const wptr<IRemoteObject> object;
1029     PasteboardSaDeathRecipient death;
1030     death.OnRemoteDied(object);
1031     PasteboardClient::GetInstance()->OnRemoteSaDied(object);
1032     uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
1033     InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888 };
1034     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, sizeof(color)/sizeof(color[0]), opts);
1035     std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
1036     auto pasteData = PasteboardClient::GetInstance()->CreatePixelMapData(pixelMapIn);
1037     ASSERT_TRUE(pasteData != nullptr);
1038     PasteboardClient::GetInstance()->Clear();
1039     ASSERT_FALSE(PasteboardServiceTest::pasteboardChangedFlag_);
1040     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1041     ASSERT_FALSE(hasPasteData);
1042     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1043     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1044     ASSERT_TRUE(PasteboardServiceTest::pasteboardChangedFlag_);
1045     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1046     ASSERT_TRUE(hasPasteData);
1047     PasteData newPasteData;
1048     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
1049     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1050     PasteboardServiceTest::pasteboardChangedFlag_ = false;
1051     PasteboardClient::GetInstance()->RemovePasteboardChangedObserver(PasteboardServiceTest::pasteboardObserver_);
1052     PasteboardClient::GetInstance()->Clear();
1053     ASSERT_FALSE(PasteboardServiceTest::pasteboardChangedFlag_);
1054     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1055     ASSERT_FALSE(hasPasteData);
1056     PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1057     ASSERT_FALSE(PasteboardServiceTest::pasteboardChangedFlag_);
1058     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1059     ASSERT_TRUE(hasPasteData);
1060 }
1061 
1062 
1063 /**
1064  * @tc.name: PasteDataTest0019
1065  * @tc.desc: AddPasteboardEventObserver RemovePasteboardEventObserver OnRemoteDied OnRemoteSaDied test.
1066  * @tc.type: FUNC
1067  * @tc.require: AROOOH5R5G
1068  */
1069 HWTEST_F(PasteboardServiceTest, PasteDataTest0019, TestSize.Level0)
1070 {
1071     if (PasteboardServiceTest::pasteboardEventObserver_ == nullptr) {
1072         PasteboardServiceTest::pasteboardEventObserver_ = new PasteboardEventObserverCallback();
1073     }
1074     ASSERT_TRUE(PasteboardServiceTest::pasteboardEventObserver_ != nullptr);
1075     PasteboardClient::GetInstance()->AddPasteboardEventObserver(PasteboardServiceTest::pasteboardEventObserver_);
1076     ASSERT_FALSE(PasteboardServiceTest::pasteboardChangedFlag_);
1077     ASSERT_EQ(PasteboardServiceTest::pasteboardEventStatus_, -1);
1078     const wptr<IRemoteObject> object;
1079     PasteboardSaDeathRecipient death;
1080     death.OnRemoteDied(object);
1081     PasteboardClient::GetInstance()->OnRemoteSaDied(object);
1082     uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
1083     InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888 };
1084     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, sizeof(color) / sizeof(color[0]), opts);
1085     std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
1086     auto pasteData = PasteboardClient::GetInstance()->CreatePixelMapData(pixelMapIn);
1087     ASSERT_TRUE(pasteData != nullptr);
1088     PasteboardClient::GetInstance()->Clear();
1089     ASSERT_FALSE(PasteboardServiceTest::pasteboardChangedFlag_);
1090     ASSERT_EQ(PasteboardServiceTest::pasteboardEventStatus_, -1);
1091     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1092     ASSERT_FALSE(hasPasteData);
1093     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1094     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1095     ASSERT_FALSE(PasteboardServiceTest::pasteboardChangedFlag_);
1096     ASSERT_EQ(PasteboardServiceTest::pasteboardEventStatus_,
1097         static_cast<int32_t>(PasteboardEventStatus::PASTEBOARD_WRITE));
1098     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1099     ASSERT_TRUE(hasPasteData);
1100     PasteData newPasteData;
1101     ret = PasteboardClient::GetInstance()->GetPasteData(newPasteData);
1102     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1103     ASSERT_EQ(PasteboardServiceTest::pasteboardEventStatus_,
1104         static_cast<int32_t>(PasteboardEventStatus::PASTEBOARD_READ));
1105     PasteboardClient::GetInstance()->Clear();
1106     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1107     ASSERT_EQ(PasteboardServiceTest::pasteboardEventStatus_,
1108         static_cast<int32_t>(PasteboardEventStatus::PASTEBOARD_CLEAR));
1109     PasteboardServiceTest::pasteboardEventStatus_ = -1;
1110     PasteboardClient::GetInstance()->RemovePasteboardEventObserver(PasteboardServiceTest::pasteboardEventObserver_);
1111     PasteboardClient::GetInstance()->Clear();
1112     ASSERT_FALSE(PasteboardServiceTest::pasteboardChangedFlag_);
1113     ASSERT_EQ(PasteboardServiceTest::pasteboardEventStatus_, -1);
1114     PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1115     ASSERT_FALSE(PasteboardServiceTest::pasteboardChangedFlag_);
1116     ASSERT_EQ(PasteboardServiceTest::pasteboardEventStatus_, -1);
1117 }
1118 
1119 /**
1120 * @tc.name: BigPixelMap001
1121 * @tc.desc: paste big pixel map image
1122 * @tc.type: FUNC
1123 * @tc.require:AR000H5I1D
1124 * @tc.author: baoyayong
1125 */
1126 HWTEST_F(PasteboardServiceTest, BigPixelMap001, TestSize.Level1)
1127 {
1128     constexpr uint32_t COLOR_SIZE = 1024 * 1960;
1129     auto color = std::make_unique<uint32_t[]>(COLOR_SIZE);
1130     InitializationOptions opts = { { 1024, 1960 }, PixelFormat::ARGB_8888 };
1131     std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color.get(), COLOR_SIZE, opts);
1132 
1133     auto pasteData1 = PasteboardClient::GetInstance()->CreatePixelMapData(std::move(pixelMap));
1134     PasteboardClient::GetInstance()->Clear();
1135     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1136     ASSERT_FALSE(hasPasteData);
1137     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData1);
1138     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1139     hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1140     ASSERT_TRUE(hasPasteData);
1141 
1142     PasteData pasteData2;
1143     ret = PasteboardClient::GetInstance()->GetPasteData(pasteData2);
1144     ASSERT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1145 
1146     auto pixelMap2 = pasteData2.GetPrimaryPixelMap();
1147     ASSERT_TRUE(pixelMap2 != nullptr);
1148     ImageInfo imageInfo{};
1149     pixelMap2->GetImageInfo(imageInfo);
1150     EXPECT_TRUE(imageInfo.size.height == opts.size.height);
1151     EXPECT_TRUE(imageInfo.size.width == opts.size.width);
1152     EXPECT_TRUE(imageInfo.pixelFormat == opts.pixelFormat);
1153 }
1154 
1155 /**
1156 * @tc.name: GetPastedataFail001
1157 * @tc.desc: get paste data fail - SetValue()
1158 * @tc.type: FUNC
1159 * @tc.require: issuesI5WPTM
1160 * @tc.author: chenyu
1161 */
1162 HWTEST_F(PasteboardServiceTest, GetPastedataFail001, TestSize.Level1)
1163 {
1164     PasteboardClient::GetInstance()->Clear();
1165     PasteData data;
1166     auto ret = PasteboardClient::GetInstance()->GetPasteData(data);
1167     EXPECT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_ERROR));
1168 }
1169 
1170 /**
1171 * @tc.name: DumpDataTest001
1172 * @tc.desc: DumpData()-remote, CrossDevice
1173 * @tc.type: FUNC
1174 * @tc.require: issueshI5YDEV
1175 * @tc.author: chenyu
1176 */
1177 HWTEST_F(PasteboardServiceTest, DumpDataTest001, TestSize.Level1)
1178 {
1179     PasteboardServiceTest::SetTestTokenId();
1180     std::string plainText = "plain text";
1181     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
1182     pasteData->SetRemote(true);
1183     pasteData->SetShareOption(ShareOption::CrossDevice);
1184     PasteboardClient::GetInstance()->Clear();
1185     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1186     EXPECT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1187     std::string result;
1188     ret = PasteboardServiceTest::ExecuteCmd(result);
1189     EXPECT_TRUE(ret);
1190     EXPECT_TRUE(result.find("CrossDevice") != std::string::npos);
1191     EXPECT_TRUE(result.find("remote") != std::string::npos);
1192     PasteboardClient::GetInstance()->Clear();
1193     PasteboardServiceTest::RestoreSelfTokenId();
1194 }
1195 
1196 /**
1197 * @tc.name: DumpDataTest002
1198 * @tc.desc: DumpData()-local, LocalDevice
1199 * @tc.type: FUNC
1200 * @tc.require: issueshI5YDEV
1201 * @tc.author: chenyu
1202 */
1203 HWTEST_F(PasteboardServiceTest, DumpDataTest002, TestSize.Level1)
1204 {
1205     PasteboardServiceTest::SetTestTokenId();
1206     std::string plainText = "plain text";
1207     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
1208     pasteData->SetShareOption(ShareOption::LocalDevice);
1209     PasteboardClient::GetInstance()->Clear();
1210     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1211     EXPECT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1212     std::string result;
1213     ret = PasteboardServiceTest::ExecuteCmd(result);
1214     EXPECT_TRUE(ret);
1215     EXPECT_TRUE(result.find("LocalDevice") != std::string::npos);
1216     EXPECT_TRUE(result.find("local") != std::string::npos);
1217     PasteboardClient::GetInstance()->Clear();
1218     PasteboardServiceTest::RestoreSelfTokenId();
1219 }
1220 
1221 /**
1222 * @tc.name: DumpDataTest003
1223 * @tc.desc: DumpData()-local, InApp
1224 * @tc.type: FUNC
1225 * @tc.require: issueshI5YDEV
1226 * @tc.author: chenyu
1227 */
1228 HWTEST_F(PasteboardServiceTest, DumpDataTest003, TestSize.Level1)
1229 {
1230     PasteboardServiceTest::SetTestTokenId();
1231     std::string plainText = "plain text";
1232     auto pasteData = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
1233     pasteData->SetShareOption(ShareOption::InApp);
1234     PasteboardClient::GetInstance()->Clear();
1235     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1236     EXPECT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1237     std::string result;
1238     ret = PasteboardServiceTest::ExecuteCmd(result);
1239     EXPECT_TRUE(ret);
1240     EXPECT_TRUE(result.find("InAPP") != std::string::npos);
1241     EXPECT_TRUE(result.find("local") != std::string::npos);
1242     PasteboardClient::GetInstance()->Clear();
1243     PasteboardServiceTest::RestoreSelfTokenId();
1244 }
1245 
1246 /**
1247 * @tc.name: DumpDataTest004
1248 * @tc.desc: DumpData()-no data
1249 * @tc.type: FUNC
1250 * @tc.require: issueshI5YDEV
1251 * @tc.author: chenyu
1252 */
1253 HWTEST_F(PasteboardServiceTest, DumpDataTest004, TestSize.Level1)
1254 {
1255     PasteboardServiceTest::SetTestTokenId();
1256     PasteboardClient::GetInstance()->Clear();
1257 
1258     std::string result;
1259     auto ret = PasteboardServiceTest::ExecuteCmd(result);
1260     EXPECT_TRUE(ret);
1261     EXPECT_EQ(result.find("Share"), std::string::npos);
1262     EXPECT_EQ(result.find("Option"), std::string::npos);
1263     PasteboardServiceTest::RestoreSelfTokenId();
1264 }
1265 
1266 /**
1267 * @tc.name: HasPastePermissionTest001
1268 * @tc.desc: if (!pasteData->IsDraggedData() && (!isFocusedApp && !IsDefaultIME(GetAppInfo(tokenId))))
1269 * @tc.type: FUNC
1270 * @tc.require: issueshI5YDEV
1271 * @tc.author: chenyu
1272 */
1273 HWTEST_F(PasteboardServiceTest, HasPastePermissionTest001, TestSize.Level0)
1274 {
1275     PasteboardServiceTest::SetTestTokenId();
1276     std::vector<uint8_t> arrayBuffer(46);
1277     arrayBuffer = { 2, 7, 6, 8, 9 };
1278     std::string mimeType = "image/jpg";
1279     auto pasteData = PasteboardClient::GetInstance()->CreateKvData(mimeType, arrayBuffer);
1280     PasteboardClient::GetInstance()->Clear();
1281     int32_t ret = PasteboardClient::GetInstance()->SetPasteData(*pasteData);
1282     EXPECT_TRUE(ret == static_cast<int32_t>(PasteboardError::E_OK));
1283     auto hasPasteData = PasteboardClient::GetInstance()->HasPasteData();
1284     // not DraggedData, not DefaultIME, not FocusedApp
1285     EXPECT_FALSE(hasPasteData);
1286     PasteboardClient::GetInstance()->Clear();
1287     PasteboardServiceTest::RestoreSelfTokenId();
1288 }
1289 } // namespace OHOS::MiscServices