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