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