1 /*
2 * Copyright (c) 2023-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 "pasteboard_web_controller.h"
17 #include "pasteboard_client.h"
18 #include <gtest/gtest.h>
19
20 using namespace testing;
21 using namespace testing::ext;
22 using namespace OHOS::MiscServices;
23 class WebControllerTest : public testing::Test {
24 public:
WebControllerTest()25 WebControllerTest() {};
~WebControllerTest()26 ~WebControllerTest() {};
27 static void SetUpTestCase(void);
28 static void TearDownTestCase(void);
29 void SetUp();
30 void TearDown();
31 };
32
SetUpTestCase(void)33 void WebControllerTest::SetUpTestCase(void)
34 {
35 }
36
TearDownTestCase(void)37 void WebControllerTest::TearDownTestCase(void)
38 {
39 }
40
SetUp(void)41 void WebControllerTest::SetUp(void)
42 {
43 }
44
TearDown(void)45 void WebControllerTest::TearDown(void)
46 {
47 }
48
49 /**
50 * @tc.name: SplitHtmlTest_001.
51 * @tc.desc: Test did not use local image address HTML with SplitHtml.
52 * @tc.type: FUNC.
53 * @tc.require:
54 * @tc.author:
55 */
56 HWTEST_F(WebControllerTest, SplitHtmlTest_001, TestSize.Level1)
57 {
58 auto webClipboardController = PasteboardWebController::GetInstance();
59 std::shared_ptr<std::string> html(
60 new std::string("<img data-ohos='clipboard' src='http://file1.jpg'><img data-ohos='clipboard' "
61 "src='https://data/storage/el2/distributedfiles/202305301.png'>"));
62 auto records = webClipboardController.SplitHtml2Records(html, 1);
63 EXPECT_EQ(records.size(), 0);
64 }
65
66 /**
67 * @tc.name: SplitHtmlTest_002.
68 * @tc.desc: Test contains a local image address HTML with SplitHtml.
69 * @tc.type: FUNC.
70 * @tc.require:
71 * @tc.author:
72 */
73 HWTEST_F(WebControllerTest, SplitHtmlTest_002, TestSize.Level1)
74 {
75 auto webClipboardController = PasteboardWebController::GetInstance();
76 std::shared_ptr<std::string> html(
77 new std::string("<img data-ohos='clipboard' src='file:///file1.jpg'><img data-ohos='clipboard' "
78 "src='https://data/storage/el2/distributedfiles/202305301.png'>"));
79 auto records = webClipboardController.SplitHtml2Records(html, 1);
80 EXPECT_EQ(records.size(), 1);
81 }
82
83 /**
84 * @tc.name: SplitHtmlTest_003.
85 * @tc.desc: Test contains multiple image addresses, but no local address with SplitHtml.
86 * @tc.type: FUNC.
87 * @tc.require:
88 * @tc.author:
89 */
90 HWTEST_F(WebControllerTest, SplitHtmlTest_003, TestSize.Level1)
91 {
92 auto webClipboardController = PasteboardWebController::GetInstance();
93 std::shared_ptr<std::string> html(
94 new std::string("<img data-ohos='clipboard' src='file://file1.jpg'><img data-ohos='clipboard' "
95 "src='file2.jpg'><img data-ohos='clipboard' "
96 "src='https://data/storage/el2/distributedfiles/202305301.png'>"));
97 auto records = webClipboardController.SplitHtml2Records(html, 1);
98 EXPECT_FALSE(records.empty());
99 }
100
101 /**
102 * @tc.name: RebuildHtmlTest_004.
103 * @tc.desc: Test does not include local image address HTML with RebuildHtml.
104 * @tc.type: FUNC.
105 * @tc.require:
106 * @tc.author:
107 */
108 HWTEST_F(WebControllerTest, RebuildHtmlTest_004, TestSize.Level1)
109 {
110 std::shared_ptr<std::string> html(
111 new std::string("<img data-ohos='clipboard' src='http://file1.jpg'><img data-ohos='clipboard' "
112 "src='https://data/storage/el2/distributedfiles/202305301.png'>"));
113 auto pasteData = PasteboardClient::GetInstance()->CreateHtmlData(*html);
114 auto htmlRecord = pasteData->GetRecordAt(0);
115
116 auto webClipboardController = PasteboardWebController::GetInstance();
117 auto records = webClipboardController.SplitHtml2Records(html, htmlRecord->GetRecordId());
118 EXPECT_EQ(records.size(), 0);
119
120 webClipboardController.MergeExtraUris2Html(*pasteData);
121 EXPECT_EQ(pasteData->GetRecordCount(), 1);
122 }
123
124 /**
125 * @tc.name: RebuildHtmlTest_005.
126 * @tc.desc: Test contains a local image address HTML with RebuildHtml.
127 * @tc.type: FUNC.
128 * @tc.require:
129 * @tc.author:
130 */
131 HWTEST_F(WebControllerTest, RebuildHtmlTest_005, TestSize.Level1)
132 {
133 const int32_t splitRecordCount = 1;
134 const std::string uri = "file:///data/storage/el2/distributedfiles/temp.png";
135 auto webClipboardController = PasteboardWebController::GetInstance();
136 std::shared_ptr<std::string> html(
137 new std::string("<img data-ohos='clipboard' src='file:///file1.jpg'><img data-ohos='clipboard' "
138 "src='https://data/storage/el2/distributedfiles/202305301.png'>"));
139 auto pasteData = PasteboardClient::GetInstance()->CreateHtmlData(*html);
140 auto htmlRecord = pasteData->GetRecordAt(0);
141 htmlRecord->SetFrom(htmlRecord->GetRecordId());
142
143 const char* execptHtml =
144 "<img data-ohos='clipboard' src='file:///data/storage/el2/distributedfiles/temp.png'><img "
145 "data-ohos='clipboard' "
146 "src='https://data/storage/el2/distributedfiles/202305301.png'>";
147 auto records = webClipboardController.SplitHtml2Records(html, htmlRecord->GetRecordId());
148 EXPECT_EQ(records.size(), splitRecordCount);
149 pasteData->AddRecord(records[0]);
150
151 std::shared_ptr<PasteData> newPasteData = std::make_shared<PasteData>();
152 std::vector<std::shared_ptr<PasteDataRecord>> pasteDataRecords = pasteData->AllRecords();
153 EXPECT_EQ(*(pasteDataRecords[pasteData->GetRecordCount() - 1]->GetHtmlText()), *html);
154
155 newPasteData->AddHtmlRecord(*html);
156 for (auto i = 0; i < pasteData->GetRecordCount() - 1; i++) {
157 PasteDataRecord::Builder builder(MIMETYPE_TEXT_URI);
158 auto newUri = std::make_shared<OHOS::Uri>(uri);
159 builder.SetUri(newUri);
160 builder.SetCustomData(pasteDataRecords[i]->GetCustomData());
161 auto record = builder.Build();
162 newPasteData->AddRecord(record);
163 }
164 EXPECT_EQ(newPasteData->GetRecordCount(), 2);
165 std::shared_ptr<std::string> newHtml = webClipboardController.RebuildHtml(newPasteData);
166 EXPECT_EQ(newPasteData->GetRecordCount(), 1);
167 const char* newHtmlStr = newHtml.get()->c_str();
168 EXPECT_STREQ(newHtmlStr, execptHtml);
169 }
170
171 /**
172 * @tc.name: RebuildHtmlTest_006.
173 * @tc.desc: Test contains a multiple image address HTML with MergeExtraUris2Html.
174 * @tc.type: FUNC.
175 * @tc.require:
176 * @tc.author:
177 */
178 HWTEST_F(WebControllerTest, RebuildHtmlTest_006, TestSize.Level1)
179 {
180 const std::string uri = "file:///data/storage/el2/distributedfiles/temp.png";
181 auto webClipboardController = PasteboardWebController::GetInstance();
182 std::shared_ptr<std::string> html(
183 new std::string("<img data-ohos='clipboard' src='file:///file1.jpg'><img data-ohos='clipboard' "
184 "src=\"file2.jpg\"><img data-ohos='clipboard' "
185 "src='https://data/storage/el2/distributedfiles/202305301.png'>"));
186 auto pasteData = PasteboardClient::GetInstance()->CreateHtmlData(*html);
187 auto htmlRecord = pasteData->GetRecordAt(0);
188 htmlRecord->SetFrom(htmlRecord->GetRecordId());
189
190 const char* execptHtml =
191 "<img data-ohos='clipboard' src='file:///data/storage/el2/distributedfiles/temp.png'><img "
192 "data-ohos='clipboard' "
193 "src=\"file:///data/storage/el2/distributedfiles/temp.png\"><img data-ohos='clipboard' "
194 "src='https://data/storage/el2/distributedfiles/202305301.png'>";
195 auto records = webClipboardController.SplitHtml2Records(html, htmlRecord->GetRecordId());
196 EXPECT_EQ(records.size(), 2);
197 EXPECT_EQ(records[0]->GetFrom(), htmlRecord->GetRecordId());
198 pasteData->AddRecord(records[0]);
199 pasteData->AddRecord(records[1]);
200
201 std::shared_ptr<PasteData> newPasteData = std::make_shared<PasteData>();
202 std::vector<std::shared_ptr<PasteDataRecord>> pasteDataRecords = pasteData->AllRecords();
203 EXPECT_EQ(*(pasteDataRecords[pasteData->GetRecordCount() - 1]->GetHtmlText()), *html);
204
205 newPasteData->AddHtmlRecord(*html);
206 auto newHtmlRecord = newPasteData->GetRecordAt(0);
207 newHtmlRecord->SetFrom(newHtmlRecord->GetRecordId());
208 for (auto i = 0; i < pasteData->GetRecordCount() - 1; i++) {
209 PasteDataRecord::Builder builder(MIMETYPE_TEXT_URI);
210 auto newUri = std::make_shared<OHOS::Uri>(uri);
211 builder.SetUri(newUri);
212 builder.SetCustomData(pasteDataRecords[i]->GetCustomData());
213 auto record = builder.Build();
214 record->SetFrom(newHtmlRecord->GetRecordId());
215 newPasteData->AddRecord(record);
216 }
217 EXPECT_EQ(newPasteData->GetRecordCount(), 3);
218 webClipboardController.MergeExtraUris2Html(*newPasteData);
219 ASSERT_EQ(newPasteData->GetRecordCount(), 1);
220 auto recordGet = newPasteData->GetRecordAt(0);
221 auto newHtmlStr = recordGet->GetHtmlText();
222 ASSERT_NE(newHtmlStr, nullptr);
223 EXPECT_STREQ(newHtmlStr->c_str(), execptHtml);
224 }
225
226 /**
227 * @tc.name: SplitHtmlTest_007.
228 * @tc.desc: Test contains invalid protocol image link HTML with SplitHtml.
229 * @tc.type: FUNC.
230 * @tc.require:
231 * @tc.author:
232 */
233 HWTEST_F(WebControllerTest, SplitHtmlTest_007, TestSize.Level1)
234 {
235 auto webClipboardController = PasteboardWebController::GetInstance();
236 std::shared_ptr<std::string> html(
237 new std::string("<img data-ohos='clipboard' src='xxx://file1.jpg'><img data-ohos='clipboard' "
238 "src='yyy://data/storage/el2/distributedfiles/202305301.png'>"));
239 auto records = webClipboardController.SplitHtml2Records(html, 1);
240 EXPECT_EQ(records.size(), 0);
241 }
242
243 /**
244 * @tc.name: RebuildHtmlTest_008.
245 * @tc.desc: Test contains invalid protocol image link HTML with RebuildHtml.
246 * @tc.type: FUNC.
247 * @tc.require:
248 * @tc.author:
249 */
250 HWTEST_F(WebControllerTest, RebuildHtmlTest_008, TestSize.Level1)
251 {
252 auto webClipboardController = PasteboardWebController::GetInstance();
253 std::shared_ptr<std::string> html(
254 new std::string("<img data-ohos='clipboard' src='xxx://file1.jpg'><img data-ohos='clipboard' "
255 "src='ttt://data/storage/el2/distributedfiles/202305301.png'>"));
256 auto pasteData = PasteboardClient::GetInstance()->CreateHtmlData(*html);
257 EXPECT_EQ(pasteData->GetRecordCount(), 1);
258 std::shared_ptr<std::string> newHtml = webClipboardController.RebuildHtml(pasteData);
259 EXPECT_EQ(*newHtml, *html);
260 }
261
262 /**
263 * @tc.name: RebuildHtmlTest_009.
264 * @tc.desc: Test contains a local image address HTML with RebuildHtml.
265 * @tc.type: FUNC.
266 * @tc.require:
267 * @tc.author:
268 */
269 HWTEST_F(WebControllerTest, RebuildHtmlTest_009, TestSize.Level1)
270 {
271 const std::string uri = "file:///data/storage/el2/distributedfiles/temp.png";
272 auto webClipboardController = PasteboardWebController::GetInstance();
273 std::shared_ptr<std::string> html(
274 new std::string("<img src='file:///file1.jpg'><img src=\"file2.jpg\"><img "
275 "src='https://data/storage/el2/distributedfiles/202305301.png'>"));
276 const char* execptHtml =
277 "<img src='file:///data/storage/el2/distributedfiles/temp.png'><img "
278 ""
279 "src=\"file:///data/storage/el2/distributedfiles/temp.png\"><img "
280 "src='https://data/storage/el2/distributedfiles/202305301.png'>";
281 auto pasteData = PasteboardClient::GetInstance()->CreateHtmlData(*html);
282 auto htmlRecord = pasteData->GetRecordAt(0);
283 htmlRecord->SetFrom(htmlRecord->GetRecordId());
284 auto records = webClipboardController.SplitHtml2Records(html, htmlRecord->GetRecordId());
285 EXPECT_EQ(records.size(), 2);
286 pasteData->AddRecord(records[0]);
287 pasteData->AddRecord(records[1]);
288
289 std::shared_ptr<PasteData> newPasteData = std::make_shared<PasteData>();
290 std::vector<std::shared_ptr<PasteDataRecord>> pasteDataRecords = pasteData->AllRecords();
291 EXPECT_EQ(*(pasteDataRecords[pasteData->GetRecordCount() - 1]->GetHtmlText()), *html);
292
293 newPasteData->AddHtmlRecord(*html);
294 for (auto i = 0; i < pasteData->GetRecordCount() - 1; i++) {
295 PasteDataRecord::Builder builder(MIMETYPE_TEXT_URI);
296 auto newUri = std::make_shared<OHOS::Uri>(uri);
297 builder.SetUri(newUri);
298 builder.SetCustomData(pasteDataRecords[i]->GetCustomData());
299 auto record = builder.Build();
300 newPasteData->AddRecord(record);
301 }
302 EXPECT_EQ(newPasteData->GetRecordCount(), 3);
303 std::shared_ptr<std::string> newHtml = webClipboardController.RebuildHtml(newPasteData);
304 EXPECT_EQ(newPasteData->GetRecordCount(), 1);
305 const char* newHtmlStr = newHtml.get()->c_str();
306 EXPECT_STREQ(newHtmlStr, execptHtml);
307 }
308
309 /**
310 * @tc.name: RebuildHtmlTest_010.
311 * @tc.desc: Test contains a local image address HTML with MergeExtraUris2Html.
312 * @tc.type: FUNC.
313 * @tc.require:
314 * @tc.author:
315 */
316 HWTEST_F(WebControllerTest, RebuildHtmlTest_010, TestSize.Level1)
317 {
318 const std::string uri = "file:///data/storage/el2/distributedfiles/temp.png";
319 auto webClipboardController = PasteboardWebController::GetInstance();
320 std::shared_ptr<std::string> html(
321 new std::string("<img src='file:///file1.jpg'><img src=\"file2.jpg\"><img "
322 "src='https://data/storage/el2/distributedfiles/202305301.png'>"));
323 const char* execptHtml =
324 "<img src='file:///data/storage/el2/distributedfiles/temp.png'><img "
325 "src=\"file:///data/storage/el2/distributedfiles/temp.png\"><img "
326 "src='https://data/storage/el2/distributedfiles/202305301.png'>";
327 auto pasteData = PasteboardClient::GetInstance()->CreateHtmlData(*html);
328 auto htmlRecord = pasteData->GetRecordAt(0);
329 htmlRecord->SetFrom(htmlRecord->GetRecordId());
330 auto records = webClipboardController.SplitHtml2Records(html, htmlRecord->GetRecordId());
331 ASSERT_EQ(records.size(), 2);
332 EXPECT_EQ(records[0]->GetFrom(), htmlRecord->GetRecordId());
333 pasteData->AddRecord(records[0]);
334 pasteData->AddRecord(records[1]);
335
336 std::shared_ptr<PasteData> newPasteData = std::make_shared<PasteData>();
337 std::vector<std::shared_ptr<PasteDataRecord>> pasteDataRecords = pasteData->AllRecords();
338 EXPECT_EQ(*(pasteDataRecords[pasteData->GetRecordCount() - 1]->GetHtmlText()), *html);
339
340 newPasteData->AddHtmlRecord(*html);
341 auto newHtmlRecord = newPasteData->GetRecordAt(0);
342 newHtmlRecord->SetFrom(newHtmlRecord->GetRecordId());
343 for (auto i = 0; i < pasteData->GetRecordCount() - 1; i++) {
344 PasteDataRecord::Builder builder(MIMETYPE_TEXT_URI);
345 auto newUri = std::make_shared<OHOS::Uri>(uri);
346 builder.SetUri(newUri);
347 builder.SetCustomData(pasteDataRecords[i]->GetCustomData());
348 auto record = builder.Build();
349 record->SetFrom(newHtmlRecord->GetRecordId());
350 newPasteData->AddRecord(record);
351 }
352 EXPECT_EQ(newPasteData->GetRecordCount(), 3);
353 webClipboardController.MergeExtraUris2Html(*newPasteData);
354
355 ASSERT_EQ(newPasteData->GetRecordCount(), 1);
356 auto recordGet = newPasteData->GetRecordAt(0);
357 auto newHtmlStr = recordGet->GetHtmlText();
358 ASSERT_NE(newHtmlStr, nullptr);
359 EXPECT_STREQ(newHtmlStr->c_str(), execptHtml);
360 }