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