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