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