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