1 /*
2 * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 
16 #include <gtest/gtest.h>
17 
18 #include "pasteboard_client.h"
19 #include "pasteboard_hilog.h"
20 #include "tlv_object.h"
21 
22 namespace OHOS::MiscServices {
23 using namespace testing::ext;
24 using namespace OHOS::AAFwk;
25 class TLVObjectTest : public testing::Test {
26 public:
27     static void SetUpTestCase(void);
28     static void TearDownTestCase(void);
29     void SetUp();
30     void TearDown();
31 
32     static std::shared_ptr<PasteDataRecord> GenRecord(std::uint32_t index);
33 };
34 
SetUpTestCase(void)35 void TLVObjectTest::SetUpTestCase(void) {}
36 
TearDownTestCase(void)37 void TLVObjectTest::TearDownTestCase(void) {}
38 
SetUp(void)39 void TLVObjectTest::SetUp(void) {}
40 
TearDown(void)41 void TLVObjectTest::TearDown(void) {}
42 
GenRecord(std::uint32_t index)43 std::shared_ptr<PasteDataRecord> TLVObjectTest::GenRecord(std::uint32_t index)
44 {
45     std::string indexStr = "";
46     auto plainText = std::make_shared<std::string>("hello" + indexStr);
47     auto htmlText = std::make_shared<std::string>("<span>hello" + indexStr + "</span>");
48     auto uri = std::make_shared<OHOS::Uri>("dataability://hello" + indexStr + ".txt");
49     std::shared_ptr<Want> want = std::make_shared<Want>();
50     std::string key = "id";
51     int32_t id = 456;
52     want->SetParam(key, id);
53 
54     PasteDataRecord::Builder builder(MIMETYPE_TEXT_HTML);
55     auto record1 = builder.SetPlainText(plainText).SetHtmlText(htmlText).SetUri(uri).SetWant(want).Build();
56     return record1;
57 }
58 
59 /**
60 * @tc.name: TLVOjbectTest001
61 * @tc.desc: test tlv coder.
62 * @tc.type: FUNC
63 * @tc.require:AR000H5I1D
64 * @tc.author: baoyayong
65 */
HWTEST_F(TLVObjectTest, TLVOjbectTest001, TestSize.Level0)66 HWTEST_F(TLVObjectTest, TLVOjbectTest001, TestSize.Level0)
67 {
68     PasteData pasteData1;
69     for (uint32_t i = 0; i < 10; ++i) {
70         pasteData1.AddRecord(TLVObjectTest::GenRecord(i));
71     }
72 
73     std::vector<uint8_t> buffer;
74     auto ret = pasteData1.Encode(buffer);
75     ASSERT_TRUE(ret);
76     ASSERT_EQ(buffer.size(), pasteData1.Count());
77 
78     PasteData pasteData2;
79     ret = pasteData2.Decode(buffer);
80     EXPECT_TRUE(ret);
81     EXPECT_EQ(pasteData2.GetRecordCount(), pasteData1.GetRecordCount());
82 
83     for (uint32_t i = 0; i < 10; ++i) {
84         auto record2 = pasteData2.GetRecordAt(i);
85         auto record1 = pasteData1.GetRecordAt(i);
86         EXPECT_EQ(*(record2->GetHtmlText()), *(record1->GetHtmlText()));
87         EXPECT_EQ(*(record2->GetPlainText()), *(record1->GetPlainText()));
88         EXPECT_TRUE(record2->GetUri()->ToString() == record1->GetUri()->ToString());
89         EXPECT_EQ(record2->GetWant()->OperationEquals(*(record1->GetWant())), true);
90     }
91 }
92 
93 /**
94 * @tc.name: TLVOjbectTest002
95 * @tc.desc: test tlv coder.
96 * @tc.type: FUNC
97 * @tc.require:AR000H5I1D
98 * @tc.author: baoyayong
99 */
HWTEST_F(TLVObjectTest, TLVOjbectTest002, TestSize.Level0)100 HWTEST_F(TLVObjectTest, TLVOjbectTest002, TestSize.Level0)
101 {
102     std::shared_ptr<Want> want = std::make_shared<Want>();
103     std::string key = "id";
104     int32_t id = 456;
105     Want wantIn = want->SetParam(key, id);
106     auto pasteData1 = PasteboardClient::GetInstance()->CreateWantData(std::make_shared<Want>(wantIn));
107 
108     std::vector<uint8_t> buffer;
109     auto ret = pasteData1->Encode(buffer);
110     ASSERT_TRUE(ret);
111     ASSERT_EQ(buffer.size(), pasteData1->Count());
112 
113     PasteData pasteData2;
114     ret = pasteData2.Decode(buffer);
115     EXPECT_TRUE(ret);
116     EXPECT_EQ(pasteData2.GetRecordCount(), pasteData1->GetRecordCount());
117 
118     auto record2 = pasteData2.GetRecordAt(0);
119     auto record1 = pasteData1->GetRecordAt(0);
120     EXPECT_EQ(record2->GetWant()->OperationEquals(*(record1->GetWant())), true);
121 }
122 
123 /**
124 * @tc.name: TLVOjbectTest003
125 * @tc.desc: test tlv coder map.
126 * @tc.type: FUNC
127 * @tc.require:AR000H5I1D
128 * @tc.author: baoyayong
129 */
HWTEST_F(TLVObjectTest, TLVOjbectTest003, TestSize.Level0)130 HWTEST_F(TLVObjectTest, TLVOjbectTest003, TestSize.Level0)
131 {
132     std::string plainText = "plain text";
133     auto pasteData1 = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
134     std::vector<uint8_t> arrayBuffer(46);
135     arrayBuffer = { 2, 7, 6, 8, 9 };
136     std::string mimeType1 = "image/jpg";
137     std::shared_ptr<MineCustomData> customData = std::make_shared<MineCustomData>();
138     customData->AddItemData(mimeType1, arrayBuffer);
139     PasteDataRecord::Builder builder(MIMETYPE_TEXT_PLAIN);
140     std::shared_ptr<PasteDataRecord> pasteDataRecord = builder.SetCustomData(customData).Build();
141     pasteData1->AddRecord(pasteDataRecord);
142 
143     std::vector<uint8_t> buffer;
144     auto ret = pasteData1->Encode(buffer);
145     ASSERT_TRUE(ret);
146     ASSERT_EQ(buffer.size(), pasteData1->Count());
147 
148     PasteData pasteData2;
149     ret = pasteData2.Decode(buffer);
150     EXPECT_TRUE(ret);
151     EXPECT_EQ(pasteData2.GetRecordCount(), pasteData1->GetRecordCount());
152     EXPECT_EQ(pasteData2.GetRecordCount(), pasteData1->GetRecordCount());
153 
154     auto record1 = pasteData1->GetRecordAt(0);
155     auto record2 = pasteData2.GetRecordAt(0);
156     ASSERT_TRUE(record2 != nullptr);
157     auto custom2 = record2->GetCustomData();
158     auto custom1 = record1->GetCustomData();
159     ASSERT_TRUE(custom1 != nullptr && custom2 != nullptr);
160     EXPECT_EQ(custom2->GetItemData().size(), custom1->GetItemData().size());
161 }
162 } // namespace OHOS::MiscServices