1 /*
2 * Copyright (c) 2025 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 #include <gmock/gmock.h>
18 #include <securec.h>
19
20 #define private public
21 #include "nweb.h"
22 #include "nweb_helper.h"
23 #include "nweb_config_helper.h"
24 #include "nweb_adapter_helper.h"
25 #include "base/web/webview/interfaces/native/arkweb_interface.h"
26
27 using namespace testing;
28 using namespace testing::ext;
29
30 namespace OHOS {
31 namespace NWeb {
32 class MockNWebEngine : public OHOS::NWeb::NWebEngine {
33 public:
CreateNWeb(std::shared_ptr<NWebCreateInfo> create_info)34 std::shared_ptr<NWeb> CreateNWeb(std::shared_ptr<NWebCreateInfo> create_info)
35 {
36 return nullptr;
37 }
38
GetNWeb(int32_t nweb_id)39 std::shared_ptr<NWeb> GetNWeb(int32_t nweb_id)
40 {
41 return nullptr;
42 }
43
GetDataBase()44 std::shared_ptr<NWebDataBase> GetDataBase()
45 {
46 return nullptr;
47 }
48
GetWebStorage()49 std::shared_ptr<NWebWebStorage> GetWebStorage()
50 {
51 return nullptr;
52 }
53
GetCookieManager()54 std::shared_ptr<NWebCookieManager> GetCookieManager()
55 {
56 return nullptr;
57 }
58
GetDownloadManager()59 std::shared_ptr<NWebDownloadManager> GetDownloadManager()
60 {
61 return nullptr;
62 }
63
SetWebTag(int32_t nweb_id,const char * web_tag)64 void SetWebTag(int32_t nweb_id, const char* web_tag) {}
65
InitializeWebEngine(std::shared_ptr<NWebEngineInitArgs> init_args)66 void InitializeWebEngine(std::shared_ptr<NWebEngineInitArgs> init_args) {}
67
PrepareForPageLoad(const std::string & url,bool preconnectable,int32_t num_sockets)68 void PrepareForPageLoad(const std::string& url, bool preconnectable, int32_t num_sockets) {}
69
SetWebDebuggingAccess(bool isEnableDebug)70 void SetWebDebuggingAccess(bool isEnableDebug) {}
71
AddIntelligentTrackingPreventionBypassingList(const std::vector<std::string> & hosts)72 void AddIntelligentTrackingPreventionBypassingList(const std::vector<std::string>& hosts) {}
73
RemoveIntelligentTrackingPreventionBypassingList(const std::vector<std::string> & hosts)74 void RemoveIntelligentTrackingPreventionBypassingList(const std::vector<std::string>& hosts) {}
ClearIntelligentTrackingPreventionBypassingList()75 void ClearIntelligentTrackingPreventionBypassingList() {}
76
GetDefaultUserAgent()77 std::string GetDefaultUserAgent()
78 {
79 return "";
80 }
81
PauseAllTimers()82 void PauseAllTimers() {}
83
ResumeAllTimers()84 void ResumeAllTimers() {}
85
PrefetchResource(const std::shared_ptr<NWebEnginePrefetchArgs> & pre_args,const std::map<std::string,std::string> & additional_http_headers,const std::string & cache_key,const uint32_t & cache_valid_time)86 void PrefetchResource(const std::shared_ptr<NWebEnginePrefetchArgs>& pre_args,
87 const std::map<std::string, std::string>& additional_http_headers, const std::string& cache_key,
88 const uint32_t& cache_valid_time)
89 {}
90
SetRenderProcessMode(RenderProcessMode mode)91 void SetRenderProcessMode(RenderProcessMode mode) {}
92
GetRenderProcessMode()93 RenderProcessMode GetRenderProcessMode()
94 {
95 return RenderProcessMode::SINGLE_MODE;
96 }
97
ClearPrefetchedResource(const std::vector<std::string> & cache_key_list)98 void ClearPrefetchedResource(const std::vector<std::string>& cache_key_list) {}
99
WarmupServiceWorker(const std::string & url)100 void WarmupServiceWorker(const std::string& url) {}
101
SetHostIP(const std::string & hostName,const std::string & address,int32_t aliveTime)102 void SetHostIP(const std::string& hostName, const std::string& address, int32_t aliveTime) {}
103
ClearHostIP(const std::string & hostName)104 void ClearHostIP(const std::string& hostName) {}
105
SetAppCustomUserAgent(const std::string & userAgent)106 void SetAppCustomUserAgent(const std::string& userAgent) {}
107
SetUserAgentForHosts(const std::string & userAgent,const std::vector<std::string> & hosts)108 void SetUserAgentForHosts(const std::string& userAgent, const std::vector<std::string>& hosts) {}
109
SetWholeWebDrawing()110 void SetWholeWebDrawing() {}
111
GetAdsBlockManager()112 std::shared_ptr<NWebAdsBlockManager> GetAdsBlockManager()
113 {
114 return nullptr;
115 }
116
EnableBackForwardCache(bool nativeEmbed,bool mediaTakeOver)117 void EnableBackForwardCache(bool nativeEmbed, bool mediaTakeOver) {}
118
RemoveAllCache(bool include_disk_files)119 void RemoveAllCache(bool include_disk_files) {}
120 };
121
122 class OHArkWebInterfaceTest : public testing::Test {
123 public:
124 static void SetUpTestCase(void);
125 static void TearDownTestCase(void);
126 void SetUp();
127 void TearDown();
128 };
129
SetUpTestCase(void)130 void OHArkWebInterfaceTest::SetUpTestCase(void)
131 {}
132
TearDownTestCase(void)133 void OHArkWebInterfaceTest::TearDownTestCase(void)
134 {}
135
SetUp(void)136 void OHArkWebInterfaceTest::SetUp(void)
137 {}
138
TearDown(void)139 void OHArkWebInterfaceTest::TearDown(void)
140 {}
141
142 /**
143 * @tc.name : OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_001
144 * @tc.desc : Test OH_ArkWeb_GetNativeAPI->LoadComponentAPI
145 */
146 HWTEST_F(OHArkWebInterfaceTest, OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_001, TestSize.Level1) {
147 ArkWeb_NativeAPIVariantKind type = ARKWEB_NATIVE_COMPONENT;
148 auto nwebEngineMock = std::make_shared<MockNWebEngine>();
149 NWebHelper::Instance().nwebEngine_ = nwebEngineMock;
150
151 ArkWeb_AnyNativeAPI* result = OH_ArkWeb_GetNativeAPI(type);
152 EXPECT_NE(result, nullptr);
153
154 ArkWeb_AnyNativeAPI* result1 = OH_ArkWeb_GetNativeAPI(type);
155 EXPECT_NE(result1, nullptr);
156
157 OH_ArkWeb_DestroyGlobalPointersForTest();
158 NWebHelper::Instance().nwebEngine_ = nullptr;
159 NWebHelper::Instance().bundlePath_ = "";
160 ArkWeb_AnyNativeAPI* result2 = OH_ArkWeb_GetNativeAPI(type);
161 EXPECT_EQ(result2, nullptr);
162 }
163
164 /**
165 * @tc.name : OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_002
166 * @tc.desc : Test OH_ArkWeb_GetNativeAPI->LoadControllerAPI
167 */
168 HWTEST_F(OHArkWebInterfaceTest, OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_002, TestSize.Level1) {
169 ArkWeb_NativeAPIVariantKind type = ARKWEB_NATIVE_CONTROLLER;
170 auto nwebEngineMock = std::make_shared<MockNWebEngine>();
171 NWebHelper::Instance().nwebEngine_ = nwebEngineMock;
172
173 ArkWeb_AnyNativeAPI* result = OH_ArkWeb_GetNativeAPI(type);
174 EXPECT_NE(result, nullptr);
175
176 ArkWeb_AnyNativeAPI* result1 = OH_ArkWeb_GetNativeAPI(type);
177 EXPECT_NE(result1, nullptr);
178
179 OH_ArkWeb_DestroyGlobalPointersForTest();
180 NWebHelper::Instance().nwebEngine_ = nullptr;
181 NWebHelper::Instance().bundlePath_ = "";
182 ArkWeb_AnyNativeAPI* result2 = OH_ArkWeb_GetNativeAPI(type);
183 EXPECT_EQ(result2, nullptr);
184 }
185
186 /**
187 * @tc.name : OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_003
188 * @tc.desc : Test OH_ArkWeb_GetNativeAPI->LoadWebMessagePortAPI
189 */
190 HWTEST_F(OHArkWebInterfaceTest, OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_003, TestSize.Level1) {
191 ArkWeb_NativeAPIVariantKind type = ARKWEB_NATIVE_WEB_MESSAGE_PORT;
192 auto nwebEngineMock = std::make_shared<MockNWebEngine>();
193 NWebHelper::Instance().nwebEngine_ = nwebEngineMock;
194
195 ArkWeb_AnyNativeAPI* result = OH_ArkWeb_GetNativeAPI(type);
196 EXPECT_NE(result, nullptr);
197
198 ArkWeb_AnyNativeAPI* result1 = OH_ArkWeb_GetNativeAPI(type);
199 EXPECT_NE(result1, nullptr);
200
201 OH_ArkWeb_DestroyGlobalPointersForTest();
202 NWebHelper::Instance().nwebEngine_ = nullptr;
203 NWebHelper::Instance().bundlePath_ = "";
204 ArkWeb_AnyNativeAPI* result2 = OH_ArkWeb_GetNativeAPI(type);
205 EXPECT_EQ(result2, nullptr);
206 }
207
208 /**
209 * @tc.name : OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_004
210 * @tc.desc : Test OH_ArkWeb_GetNativeAPI->LoadWebMessageAPI
211 */
212 HWTEST_F(OHArkWebInterfaceTest, OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_004, TestSize.Level1) {
213 ArkWeb_NativeAPIVariantKind type = ARKWEB_NATIVE_WEB_MESSAGE;
214 auto nwebEngineMock = std::make_shared<MockNWebEngine>();
215 NWebHelper::Instance().nwebEngine_ = nwebEngineMock;
216
217 ArkWeb_AnyNativeAPI* result = OH_ArkWeb_GetNativeAPI(type);
218 EXPECT_NE(result, nullptr);
219
220 ArkWeb_AnyNativeAPI* result1 = OH_ArkWeb_GetNativeAPI(type);
221 EXPECT_NE(result1, nullptr);
222
223 OH_ArkWeb_DestroyGlobalPointersForTest();
224 NWebHelper::Instance().nwebEngine_ = nullptr;
225 NWebHelper::Instance().bundlePath_ = "";
226 ArkWeb_AnyNativeAPI* result2 = OH_ArkWeb_GetNativeAPI(type);
227 EXPECT_EQ(result2, nullptr);
228 }
229
230
231 /**
232 * @tc.name : OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_005
233 * @tc.desc : Test OH_ArkWeb_GetNativeAPI->LoadCookieManagerAPI
234 */
235 HWTEST_F(OHArkWebInterfaceTest, OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_005, TestSize.Level1) {
236 ArkWeb_NativeAPIVariantKind type = ARKWEB_NATIVE_COOKIE_MANAGER;
237 auto nwebEngineMock = std::make_shared<MockNWebEngine>();
238 NWebHelper::Instance().nwebEngine_ = nwebEngineMock;
239 NWebHelper::Instance().initFlag_ = true;
240
241 ArkWeb_AnyNativeAPI* result = OH_ArkWeb_GetNativeAPI(type);
242 EXPECT_NE(result, nullptr);
243
244 ArkWeb_AnyNativeAPI* result1 = OH_ArkWeb_GetNativeAPI(type);
245 EXPECT_NE(result1, nullptr);
246
247 OH_ArkWeb_DestroyGlobalPointersForTest();
248 NWebHelper::Instance().nwebEngine_ = nullptr;
249 NWebHelper::Instance().bundlePath_ = "";
250 ArkWeb_AnyNativeAPI* result2 = OH_ArkWeb_GetNativeAPI(type);
251 EXPECT_EQ(result2, nullptr);
252 }
253
254 /**
255 * @tc.name : OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_006
256 * @tc.desc : Test OH_ArkWeb_GetNativeAPI->LoadJavaScriptValueAPI
257 */
258 HWTEST_F(OHArkWebInterfaceTest, OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_006, TestSize.Level1) {
259 ArkWeb_NativeAPIVariantKind type = ARKWEB_NATIVE_JAVASCRIPT_VALUE;
260 auto nwebEngineMock = std::make_shared<MockNWebEngine>();
261 NWebHelper::Instance().nwebEngine_ = nwebEngineMock;
262
263 ArkWeb_AnyNativeAPI* result = OH_ArkWeb_GetNativeAPI(type);
264 EXPECT_NE(result, nullptr);
265
266 ArkWeb_AnyNativeAPI* result1 = OH_ArkWeb_GetNativeAPI(type);
267 EXPECT_NE(result1, nullptr);
268
269 OH_ArkWeb_DestroyGlobalPointersForTest();
270 NWebHelper::Instance().nwebEngine_ = nullptr;
271 NWebHelper::Instance().bundlePath_ = "";
272 ArkWeb_AnyNativeAPI* result2 = OH_ArkWeb_GetNativeAPI(type);
273 EXPECT_EQ(result2, nullptr);
274 }
275
276 /**
277 * @tc.name : OHArkWebInterfaceTest_OH_ArkWeb_RegisterScrollCallback
278 * @tc.desc : Test OH_ArkWeb_RegisterScrollCallback
279 */
280 HWTEST_F(OHArkWebInterfaceTest, OHArkWebInterfaceTest_OH_ArkWeb_RegisterScrollCallback, TestSize.Level1) {
281 const char* webTag = "testWebTag";
282 void* userData = nullptr;
__anon0ef023a90102(const char* webTag, void* userData, double x, double y) 283 ArkWeb_OnScrollCallback callback = [](const char* webTag, void* userData, double x, double y) {};
284 auto nwebEngineMock = std::make_shared<MockNWebEngine>();
285 NWebHelper::Instance().nwebEngine_ = nwebEngineMock;
286 bool result = OH_ArkWeb_RegisterScrollCallback(webTag, callback, userData);
287 EXPECT_EQ(result, false);
288 result = OH_ArkWeb_RegisterScrollCallback(webTag, callback, userData);
289 EXPECT_EQ(result, false);
290 OH_ArkWeb_DestroyGlobalPointersForTest();
291 NWebHelper::Instance().nwebEngine_ = nullptr;
292 NWebHelper::Instance().bundlePath_ = "";
293 result = OH_ArkWeb_RegisterScrollCallback(webTag, callback, userData);
294 EXPECT_EQ(result, false);
295 }
296
297 }
298 }