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 <gtest/gtest.h>
18
19 using namespace testing;
20 using namespace testing::ext;
21 using namespace OHOS::MiscServices;
22 class WebControllerTest : public testing::Test {
23 public:
WebControllerTest()24 WebControllerTest() {};
~WebControllerTest()25 ~WebControllerTest() {};
26 static void SetUpTestCase(void);
27 static void TearDownTestCase(void);
28 void SetUp();
29 void TearDown();
30 };
31
SetUpTestCase(void)32 void WebControllerTest::SetUpTestCase(void)
33 {
34 }
35
TearDownTestCase(void)36 void WebControllerTest::TearDownTestCase(void)
37 {
38 }
39
SetUp(void)40 void WebControllerTest::SetUp(void)
41 {
42 }
43
TearDown(void)44 void WebControllerTest::TearDown(void)
45 {
46 }
47
48 /**
49 * @tc.name: SplitHtmlTest_001.
50 * @tc.desc: Test did not use local image address HTML with SplitHtml.
51 * @tc.type: FUNC.
52 * @tc.require:
53 * @tc.author:
54 */
55 HWTEST_F(WebControllerTest, SplitHtmlTest_001, TestSize.Level1)
56 {
57 auto webClipboardController = PasteboardWebController::GetInstance();
58 std::shared_ptr<std::string> html(
59 new std::string("<img data-ohos='clipboard' src='http://file1.jpg'><img data-ohos='clipboard' "
60 "src='https://data/storage/el2/distributedfiles/202305301.png'>"));
61 auto pasteData = webClipboardController.SplitHtml(html);
62 EXPECT_EQ(pasteData->GetRecordCount(), 1);
63 std::vector<std::shared_ptr<PasteDataRecord>> pasteDataRecords = pasteData->AllRecords();
64 EXPECT_EQ(*(pasteDataRecords[0]->GetHtmlText()), *html);
65 }
66
67 /**
68 * @tc.name: SplitHtmlTest_002.
69 * @tc.desc: Test contains a local image address HTML with SplitHtml.
70 * @tc.type: FUNC.
71 * @tc.require:
72 * @tc.author:
73 */
74 HWTEST_F(WebControllerTest, SplitHtmlTest_002, TestSize.Level1)
75 {
76 auto webClipboardController = PasteboardWebController::GetInstance();
77 std::shared_ptr<std::string> html(
78 new std::string("<img data-ohos='clipboard' src='file:///file1.jpg'><img data-ohos='clipboard' "
79 "src='https://data/storage/el2/distributedfiles/202305301.png'>"));
80 auto pasteData = webClipboardController.SplitHtml(html);
81 EXPECT_NE(pasteData, nullptr);
82 std::vector<std::shared_ptr<PasteDataRecord>> pasteDataRecords = pasteData->AllRecords();
83 EXPECT_FALSE(pasteDataRecords.empty());
84 }
85
86 /**
87 * @tc.name: SplitHtmlTest_003.
88 * @tc.desc: Test contains multiple local image addresses HTML with SplitHtml.
89 * @tc.type: FUNC.
90 * @tc.require:
91 * @tc.author:
92 */
93 HWTEST_F(WebControllerTest, SplitHtmlTest_003, TestSize.Level1)
94 {
95 auto webClipboardController = PasteboardWebController::GetInstance();
96 std::shared_ptr<std::string> html(
97 new std::string("<img data-ohos='clipboard' src='file:///file1.jpg'><img data-ohos='clipboard' "
98 "src='file2.jpg'><img data-ohos='clipboard' "
99 "src='https://data/storage/el2/distributedfiles/202305301.png'>"));
100 auto pasteData = webClipboardController.SplitHtml(html);
101 EXPECT_NE(pasteData, nullptr);
102 std::vector<std::shared_ptr<PasteDataRecord>> pasteDataRecords = pasteData->AllRecords();
103 EXPECT_FALSE(pasteDataRecords.empty());
104 }
105
106 /**
107 * @tc.name: RebuildHtmlTest_004.
108 * @tc.desc: Test does not include local image address HTML with RebuildHtml.
109 * @tc.type: FUNC.
110 * @tc.require:
111 * @tc.author:
112 */
113 HWTEST_F(WebControllerTest, RebuildHtmlTest_004, TestSize.Level1)
114 {
115 auto webClipboardController = PasteboardWebController::GetInstance();
116 std::shared_ptr<std::string> html(
117 new std::string("<img data-ohos='clipboard' src='http://file1.jpg'><img data-ohos='clipboard' "
118 "src='https://data/storage/el2/distributedfiles/202305301.png'>"));
119 auto pasteData = webClipboardController.SplitHtml(html);
120 EXPECT_EQ(pasteData->GetRecordCount(), 1);
121 std::shared_ptr<std::string> newHtml = webClipboardController.RebuildHtml(pasteData);
122 EXPECT_EQ(*newHtml, *html);
123 }
124
125 /**
126 * @tc.name: RebuildHtmlTest_005.
127 * @tc.desc: Test contains a local image address HTML with RebuildHtml.
128 * @tc.type: FUNC.
129 * @tc.require:
130 * @tc.author:
131 */
132 HWTEST_F(WebControllerTest, RebuildHtmlTest_005, TestSize.Level1)
133 {
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 const std::string execptHtml =
140 "<img data-ohos='clipboard' src='file:///data/storage/el2/distributedfiles/temp.png'><img "
141 "data-ohos='clipboard' "
142 "src='https://data/storage/el2/distributedfiles/202305301.png'>";
143 auto pasteData = webClipboardController.SplitHtml(html);
144 EXPECT_NE(pasteData, nullptr);
145 std::shared_ptr<PasteData> newPasteData = std::make_shared<PasteData>();
146 std::vector<std::shared_ptr<PasteDataRecord>> pasteDataRecords = pasteData->AllRecords();
147 EXPECT_EQ(*(pasteDataRecords[pasteData->GetRecordCount() - 1]->GetHtmlText()), *html);
148
149 newPasteData->AddHtmlRecord(*html);
150 for (auto i = 0; i < pasteData->GetRecordCount() - 1; i++) {
151 PasteDataRecord::Builder builder(MIMETYPE_TEXT_URI);
152 auto newUri = std::make_shared<OHOS::Uri>(uri);
153 builder.SetUri(newUri);
154 builder.SetCustomData(pasteDataRecords[i]->GetCustomData());
155 auto record = builder.Build();
156 newPasteData->AddRecord(record);
157 }
158 std::shared_ptr<std::string> newHtml = webClipboardController.RebuildHtml(newPasteData);
159 EXPECT_NE(newHtml, nullptr);
160 }
161
162 /**
163 * @tc.name: RebuildHtmlTest_006.
164 * @tc.desc: Test contains a multiple image address HTML with RebuildHtml.
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 const std::string execptHtml =
178 "<img data-ohos='clipboard' src='file:///data/storage/el2/distributedfiles/temp.png'><img "
179 "data-ohos='clipboard' "
180 "src='file:///data/storage/el2/distributedfiles/temp.png'><img data-ohos='clipboard' "
181 "src='https://data/storage/el2/distributedfiles/202305301.png'>";
182 auto pasteData = webClipboardController.SplitHtml(html);
183 EXPECT_NE(pasteData, nullptr);
184 std::shared_ptr<PasteData> newPasteData = std::make_shared<PasteData>();
185 std::vector<std::shared_ptr<PasteDataRecord>> pasteDataRecords = pasteData->AllRecords();
186 EXPECT_EQ(*(pasteDataRecords[pasteData->GetRecordCount() - 1]->GetHtmlText()), *html);
187
188 newPasteData->AddHtmlRecord(*html);
189 for (auto i = 0; i < pasteData->GetRecordCount() - 1; i++) {
190 PasteDataRecord::Builder builder(MIMETYPE_TEXT_URI);
191 auto newUri = std::make_shared<OHOS::Uri>(uri);
192 builder.SetUri(newUri);
193 builder.SetCustomData(pasteDataRecords[i]->GetCustomData());
194 auto record = builder.Build();
195 newPasteData->AddRecord(record);
196 }
197 std::shared_ptr<std::string> newHtml = webClipboardController.RebuildHtml(newPasteData);
198 EXPECT_NE(newHtml, nullptr);
199 }
200
201 /**
202 * @tc.name: SplitHtmlTest_007.
203 * @tc.desc: Test contains invalid protocol image link HTML with SplitHtml.
204 * @tc.type: FUNC.
205 * @tc.require:
206 * @tc.author:
207 */
208 HWTEST_F(WebControllerTest, SplitHtmlTest_007, TestSize.Level1)
209 {
210 auto webClipboardController = PasteboardWebController::GetInstance();
211 std::shared_ptr<std::string> html(
212 new std::string("<img data-ohos='clipboard' src='xxx://file1.jpg'><img data-ohos='clipboard' "
213 "src='yyy://data/storage/el2/distributedfiles/202305301.png'>"));
214 auto pasteData = webClipboardController.SplitHtml(html);
215 EXPECT_EQ(pasteData->GetRecordCount(), 1);
216 std::vector<std::shared_ptr<PasteDataRecord>> pasteDataRecords = pasteData->AllRecords();
217 EXPECT_EQ(*(pasteDataRecords[0]->GetHtmlText()), *html);
218 }
219
220 /**
221 * @tc.name: RebuildHtmlTest_008.
222 * @tc.desc: Test contains invalid protocol image link HTML with RebuildHtml.
223 * @tc.type: FUNC.
224 * @tc.require:
225 * @tc.author:
226 */
227 HWTEST_F(WebControllerTest, RebuildHtmlTest_008, TestSize.Level1)
228 {
229 auto webClipboardController = PasteboardWebController::GetInstance();
230 std::shared_ptr<std::string> html(
231 new std::string("<img data-ohos='clipboard' src='xxx://file1.jpg'><img data-ohos='clipboard' "
232 "src='ttt://data/storage/el2/distributedfiles/202305301.png'>"));
233 auto pasteData = webClipboardController.SplitHtml(html);
234 EXPECT_EQ(pasteData->GetRecordCount(), 1);
235 std::shared_ptr<std::string> newHtml = webClipboardController.RebuildHtml(pasteData);
236 EXPECT_EQ(*newHtml, *html);
237 }