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