• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }