1 /*
2 * Copyright (c) 2024 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
16 #include "pasteboard_utils.h"
17
18 #include <gtest/gtest.h>
19
20 #include "application_defined_record.h"
21 #include "audio.h"
22 #include "folder.h"
23 #include "html.h"
24 #include "image.h"
25 #include "link.h"
26 #include "plain_text.h"
27 #include "system_defined_appitem.h"
28 #include "system_defined_form.h"
29 #include "system_defined_pixelmap.h"
30 #include "video.h"
31 namespace OHOS::MiscServices {
32 using namespace testing::ext;
33 using namespace testing;
34 using namespace OHOS::Media;
35 using UnifiedDataProperties = UDMF::UnifiedDataProperties;
36 class PasteboardUtilsTest : public testing::Test {
37 public:
38 static void SetUpTestCase(void);
39 static void TearDownTestCase(void);
40 void SetUp();
41 void TearDown();
42 UDMF::UnifiedData InitTextData();
43 UDMF::UnifiedData InitPlainData();
44 UDMF::UnifiedData InitHtmlData();
45 UDMF::UnifiedData InitWantData();
46 UDMF::UnifiedData InitLinkData();
47 UDMF::UnifiedData InitFileData();
48 UDMF::UnifiedData InitImageData();
49 UDMF::UnifiedData InitVideoData();
50 UDMF::UnifiedData InitAudioData();
51 UDMF::UnifiedData InitFolderData();
52 UDMF::UnifiedData InitSystemRecordData();
53 UDMF::UnifiedData InitSystemAppItemData();
54 UDMF::UnifiedData InitSysteFormData();
55 UDMF::UnifiedData InitSystemPixelMapData();
56 UDMF::UnifiedData InitAppDefinedData();
57
58 protected:
59 Details details_;
60 std::vector<uint8_t> rawData_;
61 std::string text_;
62 std::string extraText_;
63 std::string uri_;
64 };
65
SetUpTestCase(void)66 void PasteboardUtilsTest::SetUpTestCase(void) {}
67
TearDownTestCase(void)68 void PasteboardUtilsTest::TearDownTestCase(void) {}
69
SetUp(void)70 void PasteboardUtilsTest::SetUp(void)
71 {
72 rawData_ = { 1, 2, 3, 4, 5, 6, 7, 8 };
73 details_.insert({ "keyString", "string_test" });
74 details_.insert({ "keyInt32", 1 });
75 details_.insert({ "keyBool", true });
76 details_.insert({ "KeyU8Array", rawData_ });
77 details_.insert({ "KeyDouble", 1.234 });
78 }
79
TearDown(void)80 void PasteboardUtilsTest::TearDown(void) {}
81
InitTextData()82 UDMF::UnifiedData PasteboardUtilsTest::InitTextData()
83 {
84 UDMF::UnifiedData data;
85 std::shared_ptr<UDMF::Text> textRecord = std::make_shared<UDMF::Text>();
86 textRecord->SetDetails(details_);
87 data.AddRecord(textRecord);
88 return data;
89 }
90
InitPlainData()91 UDMF::UnifiedData PasteboardUtilsTest::InitPlainData()
92 {
93 text_ = "helloWorld_plainText";
94 extraText_ = "helloWorld_plainabstract";
95 UDMF::UnifiedData data;
96 std::shared_ptr<UDMF::PlainText> plainTextRecord = std::make_shared<UDMF::PlainText>(text_, extraText_);
97 plainTextRecord->SetDetails(details_);
98 data.AddRecord(plainTextRecord);
99 auto unifiedDataProperties = std::make_shared<UnifiedDataProperties>();
100 unifiedDataProperties->isRemote = true;
101 data.SetProperties(unifiedDataProperties);
102 return data;
103 }
104
InitHtmlData()105 UDMF::UnifiedData PasteboardUtilsTest::InitHtmlData()
106 {
107 text_ = "<div class='disable'>helloWorld</div>";
108 extraText_ = "helloWorld_plainabstract";
109 UDMF::UnifiedData data;
110 std::shared_ptr<UDMF::Html> htmlRecord = std::make_shared<UDMF::Html>(text_, extraText_);
111 htmlRecord->SetDetails(details_);
112 data.AddRecord(htmlRecord);
113 return data;
114 }
InitWantData()115 UDMF::UnifiedData PasteboardUtilsTest::InitWantData()
116 {
117 using namespace OHOS::AAFwk;
118 std::shared_ptr<Want> want = std::make_shared<Want>();
119 std::string idKey = "id";
120 int32_t idValue = 123;
121 std::string deviceKey = "deviceId_key";
122 want->SetParam(idKey, idValue);
123 std::shared_ptr<UDMF::UnifiedRecord> wantRecord =
124 std::make_shared<UDMF::UnifiedRecord>(UDMF::OPENHARMONY_WANT, want);
125 UDMF::UnifiedData data;
126 data.AddRecord(wantRecord);
127 return data;
128 }
129
InitLinkData()130 UDMF::UnifiedData PasteboardUtilsTest::InitLinkData()
131 {
132 text_ = "https://www.test.com";
133 extraText_ = "https://www.test.com/content";
134 UDMF::UnifiedData data;
135 std::shared_ptr<UDMF::Link> linkRecord = std::make_shared<UDMF::Link>(text_, extraText_);
136 linkRecord->SetDetails(details_);
137 data.AddRecord(linkRecord);
138 return data;
139 }
InitFileData()140 UDMF::UnifiedData PasteboardUtilsTest::InitFileData()
141 {
142 UDMF::UnifiedData data;
143 auto typeStr = UDMF::UtdUtils::GetUtdIdFromUtdEnum(UDMF::FILE);
144 uri_ = "file:/uri";
145 std::shared_ptr<UDMF::File> fileRecord = std::make_shared<UDMF::File>(uri_);
146 fileRecord->SetDetails(details_);
147 data.AddRecord(fileRecord);
148 return data;
149 }
InitImageData()150 UDMF::UnifiedData PasteboardUtilsTest::InitImageData()
151 {
152 UDMF::UnifiedData data;
153 auto typeStr = UDMF::UtdUtils::GetUtdIdFromUtdEnum(UDMF::IMAGE);
154 uri_ = "file:/image";
155 std::shared_ptr<UDMF::Image> imageRecord = std::make_shared<UDMF::Image>(uri_);
156 imageRecord->SetDetails(details_);
157 data.AddRecord(imageRecord);
158 return data;
159 }
InitVideoData()160 UDMF::UnifiedData PasteboardUtilsTest::InitVideoData()
161 {
162 UDMF::UnifiedData data;
163 auto typeStr = UDMF::UtdUtils::GetUtdIdFromUtdEnum(UDMF::VIDEO);
164 uri_ = "file:/Video";
165 std::shared_ptr<UDMF::Video> videoRecord = std::make_shared<UDMF::Video>(uri_);
166 videoRecord->SetDetails(details_);
167 data.AddRecord(videoRecord);
168
169 return data;
170 }
InitAudioData()171 UDMF::UnifiedData PasteboardUtilsTest::InitAudioData()
172 {
173 UDMF::UnifiedData data;
174 auto typeStr = UDMF::UtdUtils::GetUtdIdFromUtdEnum(UDMF::AUDIO);
175 uri_ = "file:/Audio";
176 std::shared_ptr<UDMF::Audio> audioRecord = std::make_shared<UDMF::Audio>(uri_);
177 audioRecord->SetDetails(details_);
178 data.AddRecord(audioRecord);
179 return data;
180 }
InitFolderData()181 UDMF::UnifiedData PasteboardUtilsTest::InitFolderData()
182 {
183 UDMF::UnifiedData data;
184 auto typeStr = UDMF::UtdUtils::GetUtdIdFromUtdEnum(UDMF::FOLDER);
185 uri_ = "file:/Folder";
186 std::shared_ptr<UDMF::Folder> folderRecord = std::make_shared<UDMF::Folder>(uri_);
187 folderRecord->SetDetails(details_);
188 data.AddRecord(folderRecord);
189 return data;
190 }
InitSystemRecordData()191 UDMF::UnifiedData PasteboardUtilsTest::InitSystemRecordData()
192 {
193 UDMF::UnifiedData data;
194 std::shared_ptr<UDMF::SystemDefinedRecord> systemRecord = std::make_shared<UDMF::SystemDefinedRecord>();
195 systemRecord->SetDetails(details_);
196 data.AddRecord(systemRecord);
197 return data;
198 }
InitSystemAppItemData()199 UDMF::UnifiedData PasteboardUtilsTest::InitSystemAppItemData()
200 {
201 UDMF::UnifiedData data;
202 std::shared_ptr<UDMF::SystemDefinedAppItem> systemDefinedAppItem1 = std::make_shared<UDMF::SystemDefinedAppItem>();
203 std::string appId = "appId";
204 std::string appIconId = "appIconId";
205 std::string appName = "appName";
206 std::string appLabelId = "appLabelId";
207 std::string bundleName = "bundleName";
208 std::string abilityName = "abilityName";
209 systemDefinedAppItem1->SetDetails(details_);
210 systemDefinedAppItem1->SetAppId(appId);
211 systemDefinedAppItem1->SetAppName(appName);
212 systemDefinedAppItem1->SetAppIconId(appIconId);
213 systemDefinedAppItem1->SetAppLabelId(appLabelId);
214 systemDefinedAppItem1->SetBundleName(bundleName);
215 systemDefinedAppItem1->SetAbilityName(abilityName);
216 systemDefinedAppItem1->SetType(UDMF::SYSTEM_DEFINED_APP_ITEM);
217 data.AddRecord(systemDefinedAppItem1);
218 return data;
219 }
InitSysteFormData()220 UDMF::UnifiedData PasteboardUtilsTest::InitSysteFormData()
221 {
222 UDMF::UnifiedData data;
223 std::shared_ptr<UDMF::SystemDefinedForm> form = std::make_shared<UDMF::SystemDefinedForm>();
224 int32_t formId = 1;
225 std::string formName = "formName";
226 std::string module = "module";
227 std::string bundleName = "bundleName";
228 std::string abilityName = "abilityName";
229 form->SetDetails(details_);
230 form->SetFormId(formId);
231 form->SetFormName(formName);
232 form->SetAbilityName(abilityName);
233 form->SetBundleName(bundleName);
234 form->SetModule(module);
235 form->SetType(UDMF::SYSTEM_DEFINED_FORM);
236 data.AddRecord(form);
237 return data;
238 }
InitSystemPixelMapData()239 UDMF::UnifiedData PasteboardUtilsTest::InitSystemPixelMapData()
240 {
241 uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
242 InitializationOptions opts = { { 5, 7 }, PixelFormat::ARGB_8888, PixelFormat::ARGB_8888 };
243 std::unique_ptr<PixelMap> pixelMap = PixelMap::Create(color, sizeof(color) / sizeof(color[0]), opts);
244 std::shared_ptr<PixelMap> pixelMapIn = move(pixelMap);
245 std::shared_ptr<UDMF::UnifiedRecord> pixelMapRecord =
246 std::make_shared<UDMF::SystemDefinedPixelMap>(UDMF::SYSTEM_DEFINED_PIXEL_MAP, pixelMapIn);
247 UDMF::UnifiedData data;
248 data.AddRecord(pixelMapRecord);
249 return data;
250 }
251
InitAppDefinedData()252 UDMF::UnifiedData PasteboardUtilsTest::InitAppDefinedData()
253 {
254 UDMF::UnifiedData data;
255 std::shared_ptr<UDMF::ApplicationDefinedRecord> appRecord = std::make_shared<UDMF::ApplicationDefinedRecord>();
256 std::map<std::string, std::vector<uint8_t>> customData;
257 customData[UDMF::UtdUtils::GetUtdIdFromUtdEnum(UDMF::APPLICATION_DEFINED_RECORD)] = rawData_;
258 appRecord->SetApplicationDefinedType(UDMF::UtdUtils::GetUtdIdFromUtdEnum(UDMF::APPLICATION_DEFINED_RECORD));
259 appRecord->SetRawData(rawData_);
260 data.AddRecord(appRecord);
261 return data;
262 }
263
264 /**
265 * @tc.name: Text2PasteRecord001
266 * @tc.desc: pasteData is local data.
267 * @tc.type: FUNC
268 * @tc.require:
269 * @tc.author:
270 */
271 HWTEST_F(PasteboardUtilsTest, Text2PasteRecord001, TestSize.Level0)
272 {
273 auto data = InitTextData();
274 auto pasteData = PasteboardUtils::GetInstance().Convert(data);
275 ASSERT_EQ(1, pasteData->GetRecordCount());
276 auto record = pasteData->GetRecordAt(0);
277 auto type = record->GetMimeType();
278 ASSERT_EQ(type, UDMF::UtdUtils::GetUtdIdFromUtdEnum(UDMF::TEXT));
279 auto udType = record->GetUDType();
280 ASSERT_EQ(udType, UDMF::UDType::TEXT);
281 auto details1 = record->GetDetails();
282 ASSERT_EQ(*details1, details_);
283
284 auto newData = PasteboardUtils::GetInstance().Convert(*pasteData);
285 ASSERT_EQ(1, newData->GetRecords().size());
286 auto newRecord = newData->GetRecordAt(0);
287 auto newType = newRecord->GetType();
288 ASSERT_EQ(newType, UDMF::TEXT);
289 auto newPlainRecord = static_cast<UDMF::Text*>(newRecord.get());
290 auto newDetails = newPlainRecord->GetDetails();
291 ASSERT_EQ(newDetails, details_);
292 }
293
294 /**
295 * @tc.name: PlainText2PasteRecord001
296 * @tc.desc: pasteData is local data.
297 * @tc.type: FUNC
298 * @tc.require:
299 * @tc.author:
300 */
301 HWTEST_F(PasteboardUtilsTest, PlainText2PasteRecord001, TestSize.Level0)
302 {
303 auto data = InitPlainData();
304 auto pasteData = PasteboardUtils::GetInstance().Convert(data);
305 ASSERT_EQ(1, pasteData->GetRecordCount());
306 auto record = pasteData->GetRecordAt(0);
307 auto type = record->GetMimeType();
308 ASSERT_EQ(type, MIMETYPE_TEXT_PLAIN);
309 auto udType = record->GetUDType();
310 ASSERT_EQ(udType, UDMF::UDType::PLAIN_TEXT);
311 auto udmfValue = record->GetUDMFValue();
312 ASSERT_NE(udmfValue, nullptr);
313 auto link = std::make_shared<UDMF::PlainText>(UDMF::PLAIN_TEXT, *udmfValue);
314 ASSERT_EQ(link->GetContent(), text_);
315 ASSERT_EQ(link->GetAbstract(), extraText_);
316
317 auto newData = PasteboardUtils::GetInstance().Convert(*pasteData);
318 ASSERT_EQ(1, newData->GetRecords().size());
319 auto newRecord = newData->GetRecordAt(0);
320 auto newType = newRecord->GetType();
321 ASSERT_EQ(newType, UDMF::PLAIN_TEXT);
322 auto newPlainRecord = static_cast<UDMF::PlainText*>(newRecord.get());
323 auto newPlainText = newPlainRecord->GetContent();
324 auto newAbstract = newPlainRecord->GetAbstract();
325 auto newDetails = newPlainRecord->GetDetails();
326 ASSERT_EQ(newPlainText, text_);
327 ASSERT_EQ(newAbstract, extraText_);
328 ASSERT_EQ(newDetails, details_);
329 auto unifiedProp = newData->GetProperties();
330 ASSERT_EQ(unifiedProp->isRemote, true);
331 }
332
333 /**
334 * @tc.name: Html2PasteRecord001
335 * @tc.desc: pasteData is local data.
336 * @tc.type: FUNC
337 * @tc.require:
338 * @tc.author:
339 */
340 HWTEST_F(PasteboardUtilsTest, Html2PasteRecord001, TestSize.Level0)
341 {
342 auto data = InitHtmlData();
343 auto pasteData = PasteboardUtils::GetInstance().Convert(data);
344 ASSERT_EQ(1, pasteData->GetRecordCount());
345 auto record = pasteData->GetRecordAt(0);
346 auto type = record->GetMimeType();
347 ASSERT_EQ(type, MIMETYPE_TEXT_HTML);
348 auto udType = record->GetUDType();
349 ASSERT_EQ(udType, UDMF::UDType::HTML);
350 auto udmfValue = record->GetUDMFValue();
351 ASSERT_NE(udmfValue, nullptr);
352 auto link = std::make_shared<UDMF::Html>(UDMF::HTML, *udmfValue);
353 ASSERT_EQ(link->GetHtmlContent(), text_);
354 ASSERT_EQ(link->GetPlainContent(), extraText_);
355
356 auto newData = PasteboardUtils::GetInstance().Convert(*pasteData);
357 ASSERT_EQ(1, newData->GetRecords().size());
358 auto newRecord = newData->GetRecordAt(0);
359 auto newType = newRecord->GetType();
360 ASSERT_EQ(newType, UDMF::HTML);
361 auto newPlainRecord = static_cast<UDMF::Html*>(newRecord.get());
362 auto newPlainText = newPlainRecord->GetHtmlContent();
363 auto newAbstract = newPlainRecord->GetPlainContent();
364 auto newDetails = newPlainRecord->GetDetails();
365 ASSERT_EQ(newPlainText, text_);
366 ASSERT_EQ(newAbstract, extraText_);
367 ASSERT_EQ(newDetails, details_);
368 }
369
370 /**
371 * @tc.name: Link2PasteRecord001
372 * @tc.desc: pasteData is local data.
373 * @tc.type: FUNC
374 * @tc.require:
375 * @tc.author:
376 */
377 HWTEST_F(PasteboardUtilsTest, Link2PasteRecord001, TestSize.Level0)
378 {
379 auto data = InitLinkData();
380 auto pasteData = PasteboardUtils::GetInstance().Convert(data);
381 ASSERT_EQ(1, pasteData->GetRecordCount());
382 auto record = pasteData->GetRecordAt(0);
383 auto type = record->GetMimeType();
384 ASSERT_EQ(type, MIMETYPE_TEXT_PLAIN);
385 auto udType = record->GetUDType();
386 ASSERT_EQ(udType, UDMF::UDType::HYPERLINK);
387 auto udmfValue = record->GetUDMFValue();
388 ASSERT_NE(udmfValue, nullptr);
389 auto link = std::make_shared<UDMF::Link>(UDMF::HYPERLINK, *udmfValue);
390 ASSERT_EQ(link->GetUrl(), text_);
391 ASSERT_EQ(link->GetDescription(), extraText_);
392
393 auto newData = PasteboardUtils::GetInstance().Convert(*pasteData);
394 ASSERT_EQ(1, newData->GetRecords().size());
395 auto newRecord = newData->GetRecordAt(0);
396 auto newType = newRecord->GetType();
397 ASSERT_EQ(newType, UDMF::HYPERLINK);
398 auto newPlainRecord = static_cast<UDMF::Link*>(newRecord.get());
399 auto newUrl = newPlainRecord->GetUrl();
400 auto newDescription = newPlainRecord->GetDescription();
401 auto newDetails = newPlainRecord->GetDetails();
402 ASSERT_EQ(newUrl, text_);
403 ASSERT_EQ(newDescription, extraText_);
404 ASSERT_EQ(newDetails, details_);
405 }
406
407 /**
408 * @tc.name: Want2PasteRecord001
409 * @tc.desc: pasteData is local data.
410 * @tc.type: FUNC
411 * @tc.require:
412 * @tc.author:
413 */
414 HWTEST_F(PasteboardUtilsTest, Want2PasteRecord001, TestSize.Level0)
415 {
416 auto data = InitWantData();
417 auto pasteData = PasteboardUtils::GetInstance().Convert(data);
418 ASSERT_EQ(1, pasteData->GetRecordCount());
419 auto record = pasteData->GetRecordAt(0);
420 auto type = record->GetMimeType();
421 ASSERT_EQ(type, MIMETYPE_TEXT_WANT);
422 auto udType = record->GetUDType();
423 ASSERT_EQ(udType, int32_t(UDMF::UDType::OPENHARMONY_WANT));
424 auto want1 = record->GetWant();
425 int32_t idValue1 = want1->GetIntParam("id", 0);
426 ASSERT_EQ(idValue1, 123);
427
428 auto newData = PasteboardUtils::GetInstance().Convert(*pasteData);
429 ASSERT_EQ(1, newData->GetRecords().size());
430 auto newRecord = newData->GetRecordAt(0);
431 auto newType = newRecord->GetType();
432 ASSERT_EQ(newType, UDMF::OPENHARMONY_WANT);
433 auto recordValue = newRecord->GetValue();
434 auto wantValue = std::get_if<std::shared_ptr<OHOS::AAFwk::Want>>(&recordValue);
435 ASSERT_NE(wantValue, nullptr);
436 int32_t idValue2 = (*(wantValue))->GetIntParam("id", 0);
437 ASSERT_EQ(idValue2, 123);
438 }
439
440 /**
441 * @tc.name: File2PasteRecord001
442 * @tc.desc: pasteData is local data.
443 * @tc.type: FUNC
444 * @tc.require:
445 * @tc.author:
446 */
447 HWTEST_F(PasteboardUtilsTest, File2PasteRecord001, TestSize.Level0)
448 {
449 auto data = InitFileData();
450 auto pasteData = PasteboardUtils::GetInstance().Convert(data);
451 ASSERT_EQ(1, pasteData->GetRecordCount());
452 auto record = pasteData->GetRecordAt(0);
453 auto type = record->GetMimeType();
454 ASSERT_EQ(type, MIMETYPE_TEXT_URI);
455 auto udType = record->GetUDType();
456 ASSERT_EQ(udType, UDMF::UDType::FILE);
457 auto uri1 = record->GetUri()->ToString();
458 ASSERT_EQ(uri1, uri_);
459 auto details1 = record->GetDetails();
460 ASSERT_EQ(*details1, details_);
461
462 auto newData = PasteboardUtils::GetInstance().Convert(*pasteData);
463 ASSERT_EQ(1, newData->GetRecords().size());
464 auto newRecord = newData->GetRecordAt(0);
465 auto newType = newRecord->GetType();
466 ASSERT_EQ(newType, UDMF::FILE);
467 auto newFileRecord = static_cast<UDMF::File*>(newRecord.get());
468 auto newDetails = newFileRecord->GetDetails();
469 ASSERT_EQ(newDetails, details_);
470 auto uri2 = newFileRecord->GetUri();
471 ASSERT_EQ(uri2, uri_);
472 }
473
474 /**
475 * @tc.name: Image2PasteRecord001
476 * @tc.desc: pasteData is local data.
477 * @tc.type: FUNC
478 * @tc.require:
479 * @tc.author:
480 */
481 HWTEST_F(PasteboardUtilsTest, Image2PasteRecord001, TestSize.Level0)
482 {
483 auto data = InitImageData();
484 auto pasteData = PasteboardUtils::GetInstance().Convert(data);
485 ASSERT_EQ(1, pasteData->GetRecordCount());
486 auto record = pasteData->GetRecordAt(0);
487 auto type = record->GetMimeType();
488 ASSERT_EQ(type, MIMETYPE_TEXT_URI);
489 auto udType = record->GetUDType();
490 ASSERT_EQ(udType, UDMF::UDType::IMAGE);
491 auto uri1 = record->GetUri()->ToString();
492 ASSERT_EQ(uri1, uri_);
493 auto details1 = record->GetDetails();
494 ASSERT_EQ(*details1, details_);
495
496 auto newData = PasteboardUtils::GetInstance().Convert(*pasteData);
497 ASSERT_EQ(1, newData->GetRecords().size());
498 auto newRecord = newData->GetRecordAt(0);
499 auto newType = newRecord->GetType();
500 ASSERT_EQ(newType, UDMF::IMAGE);
501 auto newImageRecord = static_cast<UDMF::Image*>(newRecord.get());
502 auto newDetails = newImageRecord->GetDetails();
503 ASSERT_EQ(newDetails, details_);
504 auto uri2 = newImageRecord->GetUri();
505 ASSERT_EQ(uri2, uri_);
506 }
507
508 /**
509 * @tc.name: Audio2PasteRecord001
510 * @tc.desc: pasteData is local data.
511 * @tc.type: FUNC
512 * @tc.require:
513 * @tc.author:
514 */
515 HWTEST_F(PasteboardUtilsTest, Audio2PasteRecord001, TestSize.Level0)
516 {
517 auto data = InitAudioData();
518 auto pasteData = PasteboardUtils::GetInstance().Convert(data);
519 ASSERT_EQ(1, pasteData->GetRecordCount());
520 auto record = pasteData->GetRecordAt(0);
521 auto type = record->GetMimeType();
522 ASSERT_EQ(type, MIMETYPE_TEXT_URI);
523 auto udType = record->GetUDType();
524 ASSERT_EQ(udType, UDMF::UDType::AUDIO);
525 auto uri1 = record->GetUri()->ToString();
526 ASSERT_EQ(uri1, uri_);
527 auto details1 = record->GetDetails();
528 ASSERT_EQ(*details1, details_);
529
530 auto newData = PasteboardUtils::GetInstance().Convert(*pasteData);
531 ASSERT_EQ(1, newData->GetRecords().size());
532 auto newRecord = newData->GetRecordAt(0);
533 auto newType = newRecord->GetType();
534 ASSERT_EQ(newType, UDMF::AUDIO);
535 auto newAudioRecord = static_cast<UDMF::Audio*>(newRecord.get());
536 auto newDetails = newAudioRecord->GetDetails();
537 ASSERT_EQ(newDetails, details_);
538 auto uri2 = newAudioRecord->GetUri();
539 ASSERT_EQ(uri2, uri_);
540 }
541
542 /**
543 * @tc.name: Video2PasteRecord001
544 * @tc.desc: pasteData is local data.
545 * @tc.type: FUNC
546 * @tc.require:
547 * @tc.author:
548 */
549 HWTEST_F(PasteboardUtilsTest, Video2PasteRecord001, TestSize.Level0)
550 {
551 auto data = InitVideoData();
552 auto pasteData = PasteboardUtils::GetInstance().Convert(data);
553 ASSERT_EQ(1, pasteData->GetRecordCount());
554 auto record = pasteData->GetRecordAt(0);
555 auto type = record->GetMimeType();
556 ASSERT_EQ(type, MIMETYPE_TEXT_URI);
557 auto udType = record->GetUDType();
558 ASSERT_EQ(udType, UDMF::UDType::VIDEO);
559 auto uri1 = record->GetUri()->ToString();
560 ASSERT_EQ(uri1, uri_);
561 auto details1 = record->GetDetails();
562 ASSERT_EQ(*details1, details_);
563
564 auto newData = PasteboardUtils::GetInstance().Convert(*pasteData);
565 ASSERT_EQ(1, newData->GetRecords().size());
566 auto newRecord = newData->GetRecordAt(0);
567 auto newType = newRecord->GetType();
568 ASSERT_EQ(newType, UDMF::VIDEO);
569 auto newVideoRecord = static_cast<UDMF::Video*>(newRecord.get());
570 auto newDetails = newVideoRecord->GetDetails();
571 ASSERT_EQ(newDetails, details_);
572 auto uri2 = newVideoRecord->GetUri();
573 ASSERT_EQ(uri2, uri_);
574 }
575
576 /**
577 * @tc.name: Folder2PasteRecord001
578 * @tc.desc: pasteData is local data.
579 * @tc.type: FUNC
580 * @tc.require:
581 * @tc.author:
582 */
583 HWTEST_F(PasteboardUtilsTest, Folder2PasteRecord001, TestSize.Level0)
584 {
585 auto data = InitFolderData();
586 auto pasteData = PasteboardUtils::GetInstance().Convert(data);
587 ASSERT_EQ(1, pasteData->GetRecordCount());
588 auto record = pasteData->GetRecordAt(0);
589 auto type = record->GetMimeType();
590 ASSERT_EQ(type, MIMETYPE_TEXT_URI);
591 auto udType = record->GetUDType();
592 ASSERT_EQ(udType, UDMF::UDType::FOLDER);
593 auto uri1 = record->GetUri()->ToString();
594 ASSERT_EQ(uri1, uri_);
595 auto details1 = record->GetDetails();
596 ASSERT_EQ(*details1, details_);
597
598 auto newData = PasteboardUtils::GetInstance().Convert(*pasteData);
599 ASSERT_EQ(1, newData->GetRecords().size());
600 auto newRecord = newData->GetRecordAt(0);
601 auto newType = newRecord->GetType();
602 ASSERT_EQ(newType, UDMF::FOLDER);
603 auto newFolderRecord = static_cast<UDMF::Folder*>(newRecord.get());
604 auto newDetails = newFolderRecord->GetDetails();
605 ASSERT_EQ(newDetails, details_);
606 auto uri2 = newFolderRecord->GetUri();
607 ASSERT_EQ(uri2, uri_);
608 }
609
610 /**
611 * @tc.name: SystemDefined2PasteRecord001
612 * @tc.desc: pasteData is local data.
613 * @tc.type: FUNC
614 * @tc.require:
615 * @tc.author:
616 */
617 HWTEST_F(PasteboardUtilsTest, SystemDefined2PasteRecord001, TestSize.Level0)
618 {
619 auto data = InitSystemRecordData();
620 auto pasteData = PasteboardUtils::GetInstance().Convert(data);
621 ASSERT_EQ(1, pasteData->GetRecordCount());
622 auto record = pasteData->GetRecordAt(0);
623 auto type = record->GetMimeType();
624 ASSERT_EQ(type, UDMF::UtdUtils::GetUtdIdFromUtdEnum(UDMF::SYSTEM_DEFINED_RECORD));
625 auto udType = record->GetUDType();
626 ASSERT_EQ(udType, UDMF::SYSTEM_DEFINED_RECORD);
627 auto details1 = record->GetDetails();
628 ASSERT_EQ(*details1, details_);
629
630 auto newData = PasteboardUtils::GetInstance().Convert(*pasteData);
631 ASSERT_EQ(1, newData->GetRecords().size());
632 auto newRecord = newData->GetRecordAt(0);
633 auto newType = newRecord->GetType();
634 ASSERT_EQ(newType, UDMF::SYSTEM_DEFINED_RECORD);
635 auto newSystemRecord = static_cast<UDMF::SystemDefinedRecord*>(newRecord.get());
636 ASSERT_EQ(newSystemRecord->GetDetails(), details_);
637 }
638
639 /**
640 * @tc.name: AppItem2PasteRecord001
641 * @tc.desc: pasteData is local data.
642 * @tc.type: FUNC
643 * @tc.require:
644 * @tc.author:
645 */
646 HWTEST_F(PasteboardUtilsTest, AppItem2PasteRecord001, TestSize.Level0)
647 {
648 auto data = InitSystemAppItemData();
649 auto pasteData = PasteboardUtils::GetInstance().Convert(data);
650 ASSERT_EQ(1, pasteData->GetRecordCount());
651 auto record = pasteData->GetRecordAt(0);
652 auto type = record->GetMimeType();
653 ASSERT_EQ(type, UDMF::UtdUtils::GetUtdIdFromUtdEnum(UDMF::SYSTEM_DEFINED_APP_ITEM));
654 auto udType = record->GetUDType();
655 ASSERT_EQ(udType, UDMF::SYSTEM_DEFINED_APP_ITEM);
656 auto details1 = record->GetDetails();
657 ASSERT_NE(details1, nullptr);
658 ASSERT_EQ(*details1, details_);
659 auto udmfValue = record->GetUDMFValue();
660 ASSERT_NE(udmfValue, nullptr);
661 auto newAppItem1 = std::make_shared<UDMF::SystemDefinedAppItem>(UDMF::SYSTEM_DEFINED_APP_ITEM, *udmfValue);
662 ASSERT_EQ(newAppItem1->GetAppId(), "appId");
663 ASSERT_EQ(newAppItem1->GetAppIconId(), "appIconId");
664 ASSERT_EQ(newAppItem1->GetAppName(), "appName");
665 ASSERT_EQ(newAppItem1->GetAppLabelId(), "appLabelId");
666 ASSERT_EQ(newAppItem1->GetBundleName(), "bundleName");
667 ASSERT_EQ(newAppItem1->GetAbilityName(), "abilityName");
668
669 auto newData = PasteboardUtils::GetInstance().Convert(*pasteData);
670 ASSERT_EQ(1, newData->GetRecords().size());
671 auto newRecord = newData->GetRecordAt(0);
672 auto newType = newRecord->GetType();
673 ASSERT_EQ(newType, UDMF::SYSTEM_DEFINED_APP_ITEM);
674 auto newAppItem = static_cast<UDMF::SystemDefinedAppItem*>(newRecord.get());
675 ASSERT_EQ(newAppItem->GetAppId(), "appId");
676 ASSERT_EQ(newAppItem->GetAppIconId(), "appIconId");
677 ASSERT_EQ(newAppItem->GetAppName(), "appName");
678 ASSERT_EQ(newAppItem->GetAppLabelId(), "appLabelId");
679 ASSERT_EQ(newAppItem->GetBundleName(), "bundleName");
680 ASSERT_EQ(newAppItem->GetAbilityName(), "abilityName");
681 ASSERT_EQ(newAppItem->GetDetails(), details_);
682 }
683
684 /**
685 * @tc.name: Form2PasteRecord001
686 * @tc.desc: pasteData is local data.
687 * @tc.type: FUNC
688 * @tc.require:
689 * @tc.author:
690 */
691 HWTEST_F(PasteboardUtilsTest, Form2PasteRecord001, TestSize.Level0)
692 {
693 auto data = InitSysteFormData();
694 auto pasteData = PasteboardUtils::GetInstance().Convert(data);
695 ASSERT_EQ(1, pasteData->GetRecordCount());
696 auto record = pasteData->GetRecordAt(0);
697 auto type = record->GetMimeType();
698 ASSERT_EQ(type, UDMF::UtdUtils::GetUtdIdFromUtdEnum(UDMF::SYSTEM_DEFINED_FORM));
699 auto udType = record->GetUDType();
700 ASSERT_EQ(udType, UDMF::SYSTEM_DEFINED_FORM);
701 auto details1 = record->GetDetails();
702 auto content = *(record->GetSystemDefinedContent());
703 ASSERT_EQ(*details1, details_);
704 auto formId1 = std::get<std::int32_t>(content["formId"]);
705 auto formName1 = std::get<std::string>(content["formName"]);
706 auto module1 = std::get<std::string>(content["module"]);
707 auto bundleName1 = std::get<std::string>(content["bundleName"]);
708 auto abilityName1 = std::get<std::string>(content["abilityName"]);
709 ASSERT_EQ(1, formId1);
710 ASSERT_EQ("formName", formName1);
711 ASSERT_EQ("module", module1);
712 ASSERT_EQ("bundleName", bundleName1);
713 ASSERT_EQ("abilityName", abilityName1);
714
715 auto newData = PasteboardUtils::GetInstance().Convert(*pasteData);
716 ASSERT_EQ(1, newData->GetRecords().size());
717 auto newRecord = newData->GetRecordAt(0);
718 auto newType = newRecord->GetType();
719 ASSERT_EQ(newType, UDMF::SYSTEM_DEFINED_FORM);
720 auto newForm = static_cast<UDMF::SystemDefinedForm*>(newRecord.get());
721 ASSERT_EQ(newForm->GetFormId(), formId1);
722 ASSERT_EQ(newForm->GetFormName(), formName1);
723 ASSERT_EQ(newForm->GetModule(), module1);
724 ASSERT_EQ(newForm->GetBundleName(), bundleName1);
725 ASSERT_EQ(newForm->GetAbilityName(), abilityName1);
726 ASSERT_EQ(newForm->GetDetails(), details_);
727 }
728
729 /**
730 * @tc.name: PixelMap2PasteRecord001
731 * @tc.desc: pasteData is local data.
732 * @tc.type: FUNC
733 * @tc.require:
734 * @tc.author:
735 */
736 HWTEST_F(PasteboardUtilsTest, PixelMap2PasteRecord001, TestSize.Level0)
737 {
738 auto data = InitSystemPixelMapData();
739 auto pasteData = PasteboardUtils::GetInstance().Convert(data);
740 ASSERT_EQ(1, pasteData->GetRecordCount());
741 auto record = pasteData->GetRecordAt(0);
742 auto type = record->GetMimeType();
743 ASSERT_EQ(type, MIMETYPE_PIXELMAP);
744 auto udType = record->GetUDType();
745 ASSERT_EQ(udType, int32_t(UDMF::UDType::SYSTEM_DEFINED_PIXEL_MAP));
746 auto newPixelMap = record->GetPixelMap();
747 ASSERT_TRUE(newPixelMap != nullptr);
748 ImageInfo imageInfo = {};
749 newPixelMap->GetImageInfo(imageInfo);
750 ASSERT_TRUE(imageInfo.size.height == 7);
751 ASSERT_TRUE(imageInfo.size.width == 5);
752 ASSERT_TRUE(imageInfo.pixelFormat == PixelFormat::ARGB_8888);
753
754 auto newData = PasteboardUtils::GetInstance().Convert(*pasteData);
755 ASSERT_EQ(1, newData->GetRecords().size());
756 auto newRecord = newData->GetRecordAt(0);
757 auto newType = newRecord->GetType();
758 ASSERT_EQ(newType, UDMF::SYSTEM_DEFINED_PIXEL_MAP);
759 auto recordValue = newRecord->GetValue();
760 auto newPixelMap1 = std::get_if<std::shared_ptr<OHOS::Media::PixelMap>>(&recordValue);
761 ASSERT_NE(newPixelMap1, nullptr);
762 ImageInfo imageInfo1 = {};
763 (*newPixelMap1)->GetImageInfo(imageInfo1);
764 ASSERT_TRUE(imageInfo1.size.height == imageInfo.size.height);
765 ASSERT_TRUE(imageInfo1.size.width == imageInfo.size.width);
766 ASSERT_TRUE(imageInfo1.pixelFormat == imageInfo.pixelFormat);
767 }
768
769 /**
770 * @tc.name: AppDefined2PasteRecord001
771 * @tc.desc: pasteData is local data.
772 * @tc.type: FUNC
773 * @tc.require:
774 * @tc.author:
775 */
776 HWTEST_F(PasteboardUtilsTest, AppDefined2PasteRecord001, TestSize.Level0)
777 {
778 auto data = InitAppDefinedData();
779 auto pasteData = PasteboardUtils::GetInstance().Convert(data);
780 ASSERT_EQ(1, pasteData->GetRecordCount());
781 auto record = pasteData->GetRecordAt(0);
782 auto type = record->GetMimeType();
783 ASSERT_EQ(type, UDMF::UtdUtils::GetUtdIdFromUtdEnum(UDMF::APPLICATION_DEFINED_RECORD));
784 auto udType = record->GetUDType();
785 ASSERT_EQ(udType, UDMF::APPLICATION_DEFINED_RECORD);
786 auto items = record->GetCustomData()->GetItemData();
787 std::map<std::string, std::vector<uint8_t>> customData{ { type, rawData_ } };
788 ASSERT_EQ(items, customData);
789
790 auto newData = PasteboardUtils::GetInstance().Convert(*pasteData);
791 ASSERT_EQ(1, newData->GetRecords().size());
792 auto newRecord = newData->GetRecordAt(0);
793 auto newType = newRecord->GetType();
794 ASSERT_EQ(newType, UDMF::APPLICATION_DEFINED_RECORD);
795 auto newSystemRecord = static_cast<UDMF::ApplicationDefinedRecord*>(newRecord.get());
796 ASSERT_EQ(newSystemRecord->GetRawData(), rawData_);
797 }
798 } // namespace OHOS::MiscServices