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 "tlv_object.h"
17 #include "pasteboard_client.h"
18 #include "pasteboard_hilog.h"
19 #include <gtest/gtest.h>
20 
21 namespace OHOS::MiscServices {
22 using namespace testing::ext;
23 using namespace OHOS::AAFwk;
24 class TLVObjectTest : public testing::Test {
25 public:
26     static void SetUpTestCase(void);
27     static void TearDownTestCase(void);
28     void SetUp();
29     void TearDown();
30 
31     static std::shared_ptr<PasteDataRecord> GenRecord(std::uint32_t index);
32 };
33 
SetUpTestCase(void)34 void TLVObjectTest::SetUpTestCase(void)
35 {
36 }
37 
TearDownTestCase(void)38 void TLVObjectTest::TearDownTestCase(void)
39 {
40 }
41 
SetUp(void)42 void TLVObjectTest::SetUp(void)
43 {
44 }
45 
TearDown(void)46 void TLVObjectTest::TearDown(void)
47 {
48 }
49 
GenRecord(std::uint32_t index)50 std::shared_ptr<PasteDataRecord> TLVObjectTest::GenRecord(std::uint32_t index)
51 {
52     std::string indexStr = "";
53     auto plainText = std::make_shared<std::string>("hello" + indexStr);
54     auto htmlText = std::make_shared<std::string>("<span>hello" + indexStr + "</span>");
55     auto uri = std::make_shared<OHOS::Uri>("dataability://hello" + indexStr + ".txt");
56     std::shared_ptr<Want> want = std::make_shared<Want>();
57     std::string key = "id";
58     int32_t id = 456;
59     want->SetParam(key, id);
60 
61     PasteDataRecord::Builder builder(MIMETYPE_TEXT_HTML);
62     auto record1 = builder.SetPlainText(plainText).SetHtmlText(htmlText).SetUri(uri).SetWant(want).Build();
63     return record1;
64 }
65 
66 /**
67 * @tc.name: TLVOjbectTest001
68 * @tc.desc: test tlv coder.
69 * @tc.type: FUNC
70 * @tc.require:AR000H5I1D
71 * @tc.author: baoyayong
72 */
73 HWTEST_F(TLVObjectTest, TLVOjbectTest001, TestSize.Level0)
74 {
75     PasteData pasteData1;
76     for (uint32_t i = 0; i < 10; ++i) {
77         pasteData1.AddRecord(TLVObjectTest::GenRecord(i));
78     }
79 
80     std::vector<uint8_t> buffer;
81     auto ret = pasteData1.Encode(buffer);
82     ASSERT_TRUE(ret);
83     ASSERT_EQ(buffer.size(), pasteData1.Count());
84 
85     PasteData pasteData2;
86     ret = pasteData2.Decode(buffer);
87     EXPECT_TRUE(ret);
88     EXPECT_EQ(pasteData2.GetRecordCount(), pasteData1.GetRecordCount());
89 
90     for (uint32_t i = 0; i < 10; ++i) {
91         auto record2 = pasteData2.GetRecordAt(i);
92         auto record1 = pasteData1.GetRecordAt(i);
93         EXPECT_EQ(*(record2->GetHtmlText()), *(record1->GetHtmlText()));
94         EXPECT_EQ(*(record2->GetPlainText()), *(record1->GetPlainText()));
95         EXPECT_TRUE(record2->GetUri()->ToString() == record1->GetUri()->ToString());
96         EXPECT_EQ(record2->GetWant()->OperationEquals(*(record1->GetWant())), true);
97     }
98 }
99 
100 /**
101 * @tc.name: TLVOjbectTest002
102 * @tc.desc: test tlv coder.
103 * @tc.type: FUNC
104 * @tc.require:AR000H5I1D
105 * @tc.author: baoyayong
106 */
107 HWTEST_F(TLVObjectTest, TLVOjbectTest002, TestSize.Level0)
108 {
109     std::shared_ptr<Want> want = std::make_shared<Want>();
110     std::string key = "id";
111     int32_t id = 456;
112     Want wantIn = want->SetParam(key, id);
113     auto pasteData1 = PasteboardClient::GetInstance()->CreateWantData(std::make_shared<Want>(wantIn));
114 
115     std::vector<uint8_t> buffer;
116     auto ret = pasteData1->Encode(buffer);
117     ASSERT_TRUE(ret);
118     ASSERT_EQ(buffer.size(), pasteData1->Count());
119 
120     PasteData pasteData2;
121     ret = pasteData2.Decode(buffer);
122     EXPECT_TRUE(ret);
123     EXPECT_EQ(pasteData2.GetRecordCount(), pasteData1->GetRecordCount());
124 
125     auto record2 = pasteData2.GetRecordAt(0);
126     auto record1 = pasteData1->GetRecordAt(0);
127     EXPECT_EQ(record2->GetWant()->OperationEquals(*(record1->GetWant())), true);
128 }
129 
130 /**
131 * @tc.name: TLVOjbectTest003
132 * @tc.desc: test tlv coder map.
133 * @tc.type: FUNC
134 * @tc.require:AR000H5I1D
135 * @tc.author: baoyayong
136 */
137 HWTEST_F(TLVObjectTest, TLVOjbectTest003, TestSize.Level0)
138 {
139     std::string plainText = "plain text";
140     auto pasteData1 = PasteboardClient::GetInstance()->CreatePlainTextData(plainText);
141     std::vector<uint8_t> arrayBuffer(46);
142     arrayBuffer = { 2, 7, 6, 8, 9 };
143     std::string mimeType1 = "image/jpg";
144     std::shared_ptr<MineCustomData> customData = std::make_shared<MineCustomData>();
145     customData->AddItemData(mimeType1, arrayBuffer);
146     PasteDataRecord::Builder builder(MIMETYPE_TEXT_PLAIN);
147     std::shared_ptr<PasteDataRecord> pasteDataRecord = builder.SetCustomData(customData).Build();
148     pasteData1->AddRecord(pasteDataRecord);
149 
150     std::vector<uint8_t> buffer;
151     auto ret = pasteData1->Encode(buffer);
152     ASSERT_TRUE(ret);
153     ASSERT_EQ(buffer.size(), pasteData1->Count());
154 
155     PasteData pasteData2;
156     ret = pasteData2.Decode(buffer);
157     EXPECT_TRUE(ret);
158     EXPECT_EQ(pasteData2.GetRecordCount(), pasteData1->GetRecordCount());
159     EXPECT_EQ(pasteData2.GetRecordCount(), pasteData1->GetRecordCount());
160 
161     auto record1 = pasteData1->GetRecordAt(0);
162     auto record2 = pasteData2.GetRecordAt(0);
163     ASSERT_TRUE(record2 != nullptr);
164     auto custom2 = record2->GetCustomData();
165     auto custom1 = record1->GetCustomData();
166     ASSERT_TRUE(custom1 != nullptr && custom2 != nullptr);
167     EXPECT_EQ(custom2->GetItemData().size(), custom1->GetItemData().size());
168 }
169 } // namespace OHOS::MiscServices