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