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