1 /*
2  * Copyright (c) 2024 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 <gmock/gmock.h>
17 #include <gtest/gtest.h>
18 
19 #include "ability_info.h"
20 #include "ext_backup_mock.h"
21 #include "napi_mock.h"
22 #include "native_reference_mock.h"
23 
24 #include "ext_backup_js.cpp"
25 
LoadSystemModuleByEngine(napi_env env,const std::string & moduleName,const napi_value * argv,size_t argc)26 std::unique_ptr<NativeReference> OHOS::AbilityRuntime::JsRuntime::LoadSystemModuleByEngine(napi_env env,
27     const std::string& moduleName, const napi_value* argv, size_t argc)
28 {
29     return OHOS::FileManagement::Backup::BExtBackup::extBackup->LoadSystemModuleByEngine(env, moduleName, argv, argc);
30 }
31 
GetNapiEnv() const32 napi_env OHOS::AbilityRuntime::JsRuntime::GetNapiEnv() const
33 {
34     return OHOS::FileManagement::Backup::BExtBackup::extBackup->GetNapiEnv();
35 }
36 
37 namespace OHOS::FileManagement::Backup {
38 using namespace std;
39 using namespace testing;
40 
41 const int ARG_INDEX_FIRST = 1;
42 const int ARG_INDEX_SECOND = 2;
43 const int ARG_INDEX_FOURTH = 4;
44 const int ARG_INDEX_FIFTH = 5;
45 
CreateExtBackupJsContext(napi_env env,std::shared_ptr<ExtBackupContext> context)46 napi_value CreateExtBackupJsContext(napi_env env, std::shared_ptr<ExtBackupContext> context)
47 {
48     return BExtBackup::extBackup->CreateExtBackupJsContext(env, context);
49 }
50 
51 class JsRuntimeMock : public AbilityRuntime::JsRuntime {
52 public:
53     MOCK_METHOD(void, StartDebugMode, (const DebugOption debugOption));
54     MOCK_METHOD(void, DumpHeapSnapshot, (bool isPrivate));
55     MOCK_METHOD(void, DumpCpuProfile, ());
56     MOCK_METHOD(void, DestroyHeapProfiler, ());
57     MOCK_METHOD(void, ForceFullGC, ());
58     MOCK_METHOD(void, ForceFullGC, (uint32_t tid));
59     MOCK_METHOD(void, DumpHeapSnapshot, (uint32_t tid, bool isFullGC));
60     MOCK_METHOD(void, AllowCrossThreadExecution, ());
61     MOCK_METHOD(void, GetHeapPrepare, ());
62     MOCK_METHOD(void, NotifyApplicationState, (bool isBackground));
63     MOCK_METHOD(bool, SuspendVM, (uint32_t tid));
64     MOCK_METHOD(void, ResumeVM, (uint32_t tid));
65     MOCK_METHOD(void, PreloadSystemModule, (const std::string& moduleName));
66     MOCK_METHOD(void, FinishPreload, ());
67     MOCK_METHOD(bool, LoadRepairPatch, (const std::string& patchFile, const std::string& baseFile));
68     MOCK_METHOD(bool, NotifyHotReloadPage, ());
69     MOCK_METHOD(bool, UnLoadRepairPatch, (const std::string& patchFile));
70     MOCK_METHOD(void, RegisterQuickFixQueryFunc, ((const std::map<std::string, std::string>&) moduleAndPath));
71     MOCK_METHOD(void, StartProfiler, (const DebugOption debugOption));
72     MOCK_METHOD(void, DoCleanWorkAfterStageCleaned, ());
73     MOCK_METHOD(void, SetModuleLoadChecker, (const std::shared_ptr<ModuleCheckerDelegate>), (const));
74     MOCK_METHOD(void, SetDeviceDisconnectCallback, (const std::function<bool()> &cb));
75     MOCK_METHOD(void, UpdatePkgContextInfoJson, (std::string moduleName, std::string hapPath, std::string packageName));
76 };
77 
78 class ExtBackupJsTest : public testing::Test {
79 public:
80     static void SetUpTestCase(void);
81     static void TearDownTestCase();
SetUp()82     void SetUp() override {};
TearDown()83     void TearDown() override {};
84 public:
85     static inline unique_ptr<JsRuntimeMock> jsRuntime = nullptr;
86     static inline shared_ptr<ExtBackupJs> extBackupJs = nullptr;
87     static inline shared_ptr<ExtBackupMock> extBackupMock = nullptr;
88     static inline shared_ptr<NapiMock> napiMock = nullptr;
89 };
90 
SetUpTestCase()91 void ExtBackupJsTest::SetUpTestCase()
92 {
93     GTEST_LOG_(INFO) << "SetUpTestCase enter";
94     jsRuntime = make_unique<JsRuntimeMock>();
95     extBackupJs = make_shared<ExtBackupJs>(*jsRuntime);
96     extBackupMock = make_shared<ExtBackupMock>();
97     ExtBackupMock::extBackup = extBackupMock;
98     napiMock = make_shared<NapiMock>();
99     Napi::napi = napiMock;
100 }
101 
TearDownTestCase()102 void ExtBackupJsTest::TearDownTestCase()
103 {
104     GTEST_LOG_(INFO) << "TearDownTestCase enter";
105     extBackupJs = nullptr;
106     jsRuntime = nullptr;
107     ExtBackupMock::extBackup = nullptr;
108     extBackupMock = nullptr;
109     Napi::napi = nullptr;
110     napiMock = nullptr;
111 }
112 
113 /**
114  * @tc.number: SUB_backup_ext_js_GetSrcPath_0100
115  * @tc.name: SUB_backup_ext_js_GetSrcPath_0100
116  * @tc.desc: 测试 GetSrcPath 各个分支成功与失败
117  * @tc.size: MEDIUM
118  * @tc.type: FUNC
119  * @tc.level Level 1
120  * @tc.require: issuesIAFBOS
121  */
122 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_GetSrcPath_0100, testing::ext::TestSize.Level1)
123 {
124     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_GetSrcPath_0100";
125     try {
126         AppExecFwk::AbilityInfo info;
127         info.srcEntrance = "";
128         auto ret = GetSrcPath(info);
129         EXPECT_TRUE(ret.empty());
130 
131         info.srcEntrance = "test";
132         ret = GetSrcPath(info);
133         EXPECT_FALSE(ret.empty());
134     } catch (...) {
135         EXPECT_TRUE(false);
136         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by GetSrcPath.";
137     }
138     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_GetSrcPath_0100";
139 }
140 
141 /**
142  * @tc.number: SUB_backup_ext_js_DealNapiStrValue_0100
143  * @tc.name: SUB_backup_ext_js_DealNapiStrValue_0100
144  * @tc.desc: 测试 DealNapiStrValue 各个分支成功与失败
145  * @tc.size: MEDIUM
146  * @tc.type: FUNC
147  * @tc.level Level 1
148  * @tc.require: issuesIAFBOS
149  */
150 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_DealNapiStrValue_0100, testing::ext::TestSize.Level1)
151 {
152     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_DealNapiStrValue_0100";
153     try {
154         napi_env env = nullptr;
155         napi_value value = 0;
156         string result = "";
157         EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _)).WillOnce(Return(napi_invalid_arg));
158         auto ret = DealNapiStrValue(env, value, result);
159         EXPECT_EQ(ret, napi_invalid_arg);
160 
161         EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _)).WillOnce(Return(napi_ok));
162         ret = DealNapiStrValue(env, value, result);
163         EXPECT_EQ(ret, napi_ok);
164 
165         EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _))
166             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_FOURTH>(1), Return(napi_ok)))
167             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_FOURTH>(1), Return(napi_invalid_arg)));
168         ret = DealNapiStrValue(env, value, result);
169         EXPECT_EQ(ret, napi_invalid_arg);
170 
171         EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _))
172             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_FOURTH>(1), Return(napi_ok)))
173             .WillOnce(Return(napi_ok));
174         ret = DealNapiStrValue(env, value, result);
175         EXPECT_EQ(ret, napi_ok);
176     } catch (...) {
177         EXPECT_TRUE(false);
178         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by DealNapiStrValue.";
179     }
180     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_DealNapiStrValue_0100";
181 }
182 
183 /**
184  * @tc.number: SUB_backup_ext_js_DealNapiException_0100
185  * @tc.name: SUB_backup_ext_js_DealNapiException_0100
186  * @tc.desc: 测试 DealNapiException 各个分支成功与失败
187  * @tc.size: MEDIUM
188  * @tc.type: FUNC
189  * @tc.level Level 1
190  * @tc.require: issuesIAFBOS
191  */
192 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_DealNapiException_0100, testing::ext::TestSize.Level1)
193 {
194     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_DealNapiException_0100";
195     try {
196         napi_env env = nullptr;
197         string exceptionInfo = "";
198         napi_value exception;
199         EXPECT_CALL(*napiMock, napi_get_and_clear_last_exception(_, _)).WillOnce(Return(napi_invalid_arg));
200         auto ret = DealNapiException(env, exception, exceptionInfo);
201         EXPECT_EQ(ret, napi_invalid_arg);
202 
203         EXPECT_CALL(*napiMock, napi_get_and_clear_last_exception(_, _)).WillOnce(Return(napi_ok));
204         EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _)).WillOnce(Return(napi_invalid_arg));
205         ret = DealNapiException(env, exception, exceptionInfo);
206         EXPECT_EQ(ret, napi_invalid_arg);
207 
208         EXPECT_CALL(*napiMock, napi_get_and_clear_last_exception(_, _)).WillOnce(Return(napi_ok));
209         EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _)).WillOnce(Return(napi_ok));
210         ret = DealNapiException(env, exception, exceptionInfo);
211         EXPECT_EQ(ret, napi_ok);
212     } catch (...) {
213         EXPECT_TRUE(false);
214         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by DealNapiException.";
215     }
216     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_DealNapiException_0100";
217 }
218 
219 /**
220  * @tc.number: SUB_backup_ext_js_PromiseCallback_0100
221  * @tc.name: SUB_backup_ext_js_PromiseCallback_0100
222  * @tc.desc: 测试 PromiseCallback 各个分支成功与失败
223  * @tc.size: MEDIUM
224  * @tc.type: FUNC
225  * @tc.level Level 1
226  * @tc.require: issuesIAFBOS
227  */
228 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_PromiseCallback_0100, testing::ext::TestSize.Level1)
229 {
230     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_PromiseCallback_0100";
231     try {
232         napi_env env = nullptr;
233         napi_callback_info info = nullptr;
234         EXPECT_CALL(*napiMock, napi_get_cb_info(_, _, _, _, _, _)).WillOnce(Return(napi_invalid_arg));
235         auto ret = PromiseCallback(env, info);
236         EXPECT_TRUE(ret == nullptr);
237 
238 
239         EXPECT_CALL(*napiMock, napi_get_cb_info(_, _, _, _, _, _)).WillOnce(Return(napi_ok));
240         ret = PromiseCallback(env, info);
241         EXPECT_TRUE(ret == nullptr);
242 
__anonc3409c9d0102(ErrCode, std::string)243         struct CallbackInfo callback([](ErrCode, std::string){});
244         EXPECT_CALL(*napiMock, napi_get_cb_info(_, _, _, _, _, _))
245             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_FIFTH>(&callback), Return(napi_ok)));
246         ret = PromiseCallback(env, info);
247         EXPECT_TRUE(ret == nullptr);
248     } catch (...) {
249         EXPECT_TRUE(false);
250         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by PromiseCallback.";
251     }
252     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_PromiseCallback_0100";
253 }
254 
255 /**
256  * @tc.number: SUB_backup_ext_js_PromiseCatchCallback_0100
257  * @tc.name: SUB_backup_ext_js_PromiseCatchCallback_0100
258  * @tc.desc: 测试 PromiseCatchCallback 各个分支成功与失败
259  * @tc.size: MEDIUM
260  * @tc.type: FUNC
261  * @tc.level Level 1
262  * @tc.require: issuesIAFBOS
263  */
264 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_PromiseCatchCallback_0100, testing::ext::TestSize.Level1)
265 {
266     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_PromiseCatchCallback_0100";
267     try {
268         napi_env env = nullptr;
269         napi_callback_info info = nullptr;
270         EXPECT_CALL(*napiMock, napi_get_cb_info(_, _, _, _, _, _)).WillOnce(Return(napi_ok));
271         EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _)).WillOnce(Return(napi_invalid_arg));
272         auto ret = PromiseCatchCallback(env, info);
273         EXPECT_TRUE(ret == nullptr);
274 
__anonc3409c9d0202(ErrCode, std::string)275         struct CallbackInfo callback([](ErrCode, std::string){});
276         EXPECT_CALL(*napiMock, napi_get_cb_info(_, _, _, _, _, _))
277             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_FIFTH>(&callback), Return(napi_ok)));
278         EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _)).WillOnce(Return(napi_invalid_arg));
279         ret = PromiseCatchCallback(env, info);
280         EXPECT_TRUE(ret == nullptr);
281     } catch (...) {
282         EXPECT_TRUE(false);
283         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by PromiseCatchCallback.";
284     }
285     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_PromiseCatchCallback_0100";
286 }
287 
288 /**
289  * @tc.number: SUB_backup_ext_js_PromiseCallbackEx_0100
290  * @tc.name: SUB_backup_ext_js_PromiseCallbackEx_0100
291  * @tc.desc: 测试 PromiseCallbackEx 各个分支成功与失败
292  * @tc.size: MEDIUM
293  * @tc.type: FUNC
294  * @tc.level Level 1
295  * @tc.require: issuesIAFBOS
296  */
297 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_PromiseCallbackEx_0100, testing::ext::TestSize.Level1)
298 {
299     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_PromiseCallbackEx_0100";
300     try {
301         napi_env env = nullptr;
302         napi_callback_info info = nullptr;
303         EXPECT_CALL(*napiMock, napi_get_cb_info(_, _, _, _, _, _)).WillOnce(Return(napi_ok));
304         auto ret = PromiseCallbackEx(env, info);
305         EXPECT_TRUE(ret == nullptr);
306 
__anonc3409c9d0302(ErrCode, std::string)307         struct CallbackInfoEx callback([](ErrCode, std::string){});
308         EXPECT_CALL(*napiMock, napi_get_cb_info(_, _, _, _, _, _))
309             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_FIFTH>(&callback), Return(napi_ok)));
310         EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _)).WillOnce(Return(napi_invalid_arg));
311         ret = PromiseCallbackEx(env, info);
312         EXPECT_TRUE(ret == nullptr);
313     } catch (...) {
314         EXPECT_TRUE(false);
315         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by PromiseCallbackEx.";
316     }
317     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_PromiseCallbackEx_0100";
318 }
319 
320 /**
321  * @tc.number: SUB_backup_ext_js_PromiseCatchCallbackEx_0100
322  * @tc.name: SUB_backup_ext_js_PromiseCatchCallbackEx_0100
323  * @tc.desc: 测试 PromiseCatchCallbackEx 各个分支成功与失败
324  * @tc.size: MEDIUM
325  * @tc.type: FUNC
326  * @tc.level Level 1
327  * @tc.require: issuesIAFBOS
328  */
329 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_PromiseCatchCallbackEx_0100, testing::ext::TestSize.Level1)
330 {
331     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_PromiseCatchCallbackEx_0100";
332     try {
333         napi_env env = nullptr;
334         napi_callback_info info = nullptr;
335         EXPECT_CALL(*napiMock, napi_get_cb_info(_, _, _, _, _, _)).WillOnce(Return(napi_ok));
336         EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _)).WillOnce(Return(napi_invalid_arg));
337         auto ret = PromiseCatchCallbackEx(env, info);
338         EXPECT_TRUE(ret == nullptr);
339 
__anonc3409c9d0402(ErrCode, std::string)340         struct CallbackInfoEx callback([](ErrCode, std::string){});
341         EXPECT_CALL(*napiMock, napi_get_cb_info(_, _, _, _, _, _))
342             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_FIFTH>(&callback), Return(napi_ok)));
343         EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _)).WillOnce(Return(napi_invalid_arg));
344         ret = PromiseCatchCallbackEx(env, info);
345         EXPECT_TRUE(ret == nullptr);
346     } catch (...) {
347         EXPECT_TRUE(false);
348         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by PromiseCatchCallbackEx.";
349     }
350     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_PromiseCatchCallbackEx_0100";
351 }
352 
353 /**
354  * @tc.number: SUB_backup_ext_js_CheckPromise_0100
355  * @tc.name: SUB_backup_ext_js_CheckPromise_0100
356  * @tc.desc: 测试 CheckPromise 各个分支成功与失败
357  * @tc.size: MEDIUM
358  * @tc.type: FUNC
359  * @tc.level Level 1
360  * @tc.require: issuesIAFBOS
361  */
362 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CheckPromise_0100, testing::ext::TestSize.Level1)
363 {
364     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CheckPromise_0100";
365     try {
366         napi_env env = nullptr;
367         auto ret = CheckPromise(env, nullptr);
368         EXPECT_FALSE(ret);
369 
370         int value = 0;
371         EXPECT_CALL(*napiMock, napi_is_promise(_, _, _)).WillOnce(Return(napi_invalid_arg));
372         ret = CheckPromise(env, reinterpret_cast<napi_value>(&value));
373         EXPECT_FALSE(ret);
374 
375         EXPECT_CALL(*napiMock, napi_is_promise(_, _, _))
376             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_SECOND>(true), Return(napi_ok)));
377         ret = CheckPromise(env, reinterpret_cast<napi_value>(&value));
378         EXPECT_TRUE(ret);
379     } catch (...) {
380         EXPECT_TRUE(false);
381         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CheckPromise.";
382     }
383     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CheckPromise_0100";
384 }
385 
386 /**
387  * @tc.number: SUB_backup_ext_js_CallCatchPromise_0100
388  * @tc.name: SUB_backup_ext_js_CallCatchPromise_0100
389  * @tc.desc: 测试 CallCatchPromise 各个分支成功与失败
390  * @tc.size: MEDIUM
391  * @tc.type: FUNC
392  * @tc.level Level 1
393  * @tc.require: issuesIAFBOS
394  */
395 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CallCatchPromise_0100, testing::ext::TestSize.Level1)
396 {
397     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CallCatchPromise_0100";
398     try {
399         napi_value result = nullptr;
400         struct CallbackInfo *callbackInfo = nullptr;
401         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
402         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
403         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_invalid_arg));
404         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
405         auto ret = CallCatchPromise(*jsRuntime, result, callbackInfo);
406         EXPECT_FALSE(ret);
407 
408         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
409         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
410         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok));
411         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _)).WillOnce(Return(napi_invalid_arg));
412         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
413         ret = CallCatchPromise(*jsRuntime, result, callbackInfo);
414         EXPECT_FALSE(ret);
415 
416         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
417         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
418         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok));
419         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _)).WillOnce(Return(napi_ok));
420         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
421         ret = CallCatchPromise(*jsRuntime, result, callbackInfo);
422         EXPECT_FALSE(ret);
423 
424         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
425         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
426         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok));
427         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _))
428             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_SECOND>(true), Return(napi_ok)));
429         EXPECT_CALL(*napiMock, napi_create_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok));
430         EXPECT_CALL(*napiMock, napi_call_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok));
431         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
432         ret = CallCatchPromise(*jsRuntime, result, callbackInfo);
433         EXPECT_TRUE(ret);
434     } catch (...) {
435         EXPECT_TRUE(false);
436         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CallCatchPromise.";
437     }
438     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CallCatchPromise_0100";
439 }
440 
441 /**
442  * @tc.number: SUB_backup_ext_js_CallPromise_0100
443  * @tc.name: SUB_backup_ext_js_CallPromise_0100
444  * @tc.desc: 测试 CallPromise 各个分支成功与失败
445  * @tc.size: MEDIUM
446  * @tc.type: FUNC
447  * @tc.level Level 1
448  * @tc.require: issuesIAFBOS
449  */
450 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CallPromise_0100, testing::ext::TestSize.Level1)
451 {
452     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CallPromise_0100";
453     try {
454         napi_value result = nullptr;
455         struct CallbackInfo *callbackInfo = nullptr;
456         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
457         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
458         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_invalid_arg));
459         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
460         auto ret = CallPromise(*jsRuntime, result, callbackInfo);
461         EXPECT_FALSE(ret);
462 
463         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
464         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
465         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok));
466         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _)).WillOnce(Return(napi_invalid_arg));
467         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
468         ret = CallPromise(*jsRuntime, result, callbackInfo);
469         EXPECT_FALSE(ret);
470 
471         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
472         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
473         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok));
474         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _)).WillOnce(Return(napi_ok));
475         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
476         ret = CallPromise(*jsRuntime, result, callbackInfo);
477         EXPECT_FALSE(ret);
478 
479         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok));
480         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr)).WillOnce(Return(nullptr));
481         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok))
482             .WillOnce(Return(napi_invalid_arg));
483         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _))
484             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_SECOND>(true), Return(napi_ok)));
485         EXPECT_CALL(*napiMock, napi_create_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok));
486         EXPECT_CALL(*napiMock, napi_call_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok));
487         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok));
488         ret = CallPromise(*jsRuntime, result, callbackInfo);
489         EXPECT_FALSE(ret);
490     } catch (...) {
491         EXPECT_TRUE(false);
492         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CallPromise.";
493     }
494     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CallPromise_0100";
495 }
496 
497 /**
498  * @tc.number: SUB_backup_ext_js_CallPromise_0200
499  * @tc.name: SUB_backup_ext_js_CallPromise_0200
500  * @tc.desc: 测试 CallPromise 各个分支成功与失败
501  * @tc.size: MEDIUM
502  * @tc.type: FUNC
503  * @tc.level Level 1
504  * @tc.require: issuesIAFBOS
505  */
506 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CallPromise_0200, testing::ext::TestSize.Level1)
507 {
508     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CallPromise_0200";
509     try {
510         napi_value result = nullptr;
511         struct CallbackInfo *callbackInfo = nullptr;
512         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok));
513         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr)).WillOnce(Return(nullptr));
514         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok));
515         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _))
516             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_SECOND>(true), Return(napi_ok)))
517             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_SECOND>(true), Return(napi_ok)));
518         EXPECT_CALL(*napiMock, napi_create_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok))
519             .WillOnce(Return(napi_ok));
520         EXPECT_CALL(*napiMock, napi_call_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok))
521             .WillOnce(Return(napi_ok));
522         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok));
523         auto ret = CallPromise(*jsRuntime, result, callbackInfo);
524         EXPECT_TRUE(ret);
525     } catch (...) {
526         EXPECT_TRUE(false);
527         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CallPromise.";
528     }
529     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CallPromise_0200";
530 }
531 
532 /**
533  * @tc.number: SUB_backup_ext_js_CallCatchPromiseEx_0100
534  * @tc.name: SUB_backup_ext_js_CallCatchPromiseEx_0100
535  * @tc.desc: 测试 CallCatchPromiseEx 各个分支成功与失败
536  * @tc.size: MEDIUM
537  * @tc.type: FUNC
538  * @tc.level Level 1
539  * @tc.require: issuesIAFBOS
540  */
541 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CallCatchPromiseEx_0100, testing::ext::TestSize.Level1)
542 {
543     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CallCatchPromiseEx_0100";
544     try {
545         napi_value result = nullptr;
546         struct CallbackInfoEx *callbackInfoEx = nullptr;
547         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
548         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
549         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_invalid_arg));
550         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
551         auto ret = CallCatchPromiseEx(*jsRuntime, result, callbackInfoEx);
552         EXPECT_FALSE(ret);
553 
554         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
555         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
556         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok));
557         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _)).WillOnce(Return(napi_invalid_arg));
558         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
559         ret = CallCatchPromiseEx(*jsRuntime, result, callbackInfoEx);
560         EXPECT_FALSE(ret);
561 
562         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
563         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
564         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok));
565         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _)).WillOnce(Return(napi_ok));
566         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
567         ret = CallCatchPromiseEx(*jsRuntime, result, callbackInfoEx);
568         EXPECT_FALSE(ret);
569 
570         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
571         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
572         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok));
573         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _))
574             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_SECOND>(true), Return(napi_ok)));
575         EXPECT_CALL(*napiMock, napi_create_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok));
576         EXPECT_CALL(*napiMock, napi_call_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok));
577         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
578         ret = CallCatchPromiseEx(*jsRuntime, result, callbackInfoEx);
579         EXPECT_TRUE(ret);
580     } catch (...) {
581         EXPECT_TRUE(false);
582         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CallCatchPromiseEx.";
583     }
584     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CallCatchPromiseEx_0100";
585 }
586 
587 /**
588  * @tc.number: SUB_backup_ext_js_CallPromiseEx_0100
589  * @tc.name: SUB_backup_ext_js_CallPromiseEx_0100
590  * @tc.desc: 测试 CallPromiseEx 各个分支成功与失败
591  * @tc.size: MEDIUM
592  * @tc.type: FUNC
593  * @tc.level Level 1
594  * @tc.require: issuesIAFBOS
595  */
596 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CallPromiseEx_0100, testing::ext::TestSize.Level1)
597 {
598     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CallPromiseEx_0100";
599     try {
600         napi_value result = nullptr;
601         struct CallbackInfoEx *callbackInfoEx = nullptr;
602         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
603         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
604         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_invalid_arg));
605         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
606         auto ret = CallPromiseEx(*jsRuntime, result, callbackInfoEx);
607         EXPECT_FALSE(ret);
608 
609         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
610         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
611         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok));
612         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _)).WillOnce(Return(napi_invalid_arg));
613         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
614         ret = CallPromiseEx(*jsRuntime, result, callbackInfoEx);
615         EXPECT_FALSE(ret);
616 
617         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
618         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
619         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok));
620         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _)).WillOnce(Return(napi_ok));
621         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
622         ret = CallPromiseEx(*jsRuntime, result, callbackInfoEx);
623         EXPECT_FALSE(ret);
624 
625         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok));
626         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr)).WillOnce(Return(nullptr));
627         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok))
628             .WillOnce(Return(napi_invalid_arg));
629         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _))
630             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_SECOND>(true), Return(napi_ok)));
631         EXPECT_CALL(*napiMock, napi_create_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok));
632         EXPECT_CALL(*napiMock, napi_call_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok));
633         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok));
634         ret = CallPromiseEx(*jsRuntime, result, callbackInfoEx);
635         EXPECT_FALSE(ret);
636     } catch (...) {
637         EXPECT_TRUE(false);
638         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CallPromiseEx.";
639     }
640     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CallPromiseEx_0100";
641 }
642 
643 /**
644  * @tc.number: SUB_backup_ext_js_CallPromiseEx_0200
645  * @tc.name: SUB_backup_ext_js_CallPromiseEx_0200
646  * @tc.desc: 测试 CallPromiseEx 各个分支成功与失败
647  * @tc.size: MEDIUM
648  * @tc.type: FUNC
649  * @tc.level Level 1
650  * @tc.require: issuesIAFBOS
651  */
652 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CallPromiseEx_0200, testing::ext::TestSize.Level1)
653 {
654     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CallPromiseEx_0200";
655     try {
656         napi_value result = nullptr;
657         struct CallbackInfoEx *callbackInfoEx = nullptr;
658         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok));
659         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr)).WillOnce(Return(nullptr));
660         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok));
661         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _))
662             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_SECOND>(true), Return(napi_ok)))
663             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_SECOND>(true), Return(napi_ok)));
664         EXPECT_CALL(*napiMock, napi_create_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok))
665             .WillOnce(Return(napi_ok));
666         EXPECT_CALL(*napiMock, napi_call_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok))
667             .WillOnce(Return(napi_ok));
668         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok));
669         auto ret = CallPromiseEx(*jsRuntime, result, callbackInfoEx);
670         EXPECT_TRUE(ret);
671     } catch (...) {
672         EXPECT_TRUE(false);
673         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CallPromiseEx.";
674     }
675     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CallPromiseEx_0200";
676 }
677 
678 /**
679  * @tc.number: SUB_backup_ext_js_CallPromiseEx_0300
680  * @tc.name: SUB_backup_ext_js_CallPromiseEx_0300
681  * @tc.desc: 测试 CallPromiseEx 各个分支成功与失败
682  * @tc.size: MEDIUM
683  * @tc.type: FUNC
684  * @tc.level Level 1
685  * @tc.require: issuesIAFBOS
686  */
687 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CallPromiseEx_0300, testing::ext::TestSize.Level1)
688 {
689     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CallPromiseEx_0300";
690     try {
691         napi_value result = nullptr;
692         struct CallbackInfoBackup *callbackInfoBackup = nullptr;
693         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
694         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
695         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_invalid_arg));
696         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
697         auto ret = CallPromiseEx(*jsRuntime, result, callbackInfoBackup);
698         EXPECT_FALSE(ret);
699 
700         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
701         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
702         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok));
703         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _)).WillOnce(Return(napi_invalid_arg));
704         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
705         ret = CallPromiseEx(*jsRuntime, result, callbackInfoBackup);
706         EXPECT_FALSE(ret);
707 
708         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
709         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
710         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok));
711         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _)).WillOnce(Return(napi_ok));
712         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
713         ret = CallPromiseEx(*jsRuntime, result, callbackInfoBackup);
714         EXPECT_FALSE(ret);
715 
716         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
717         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
718         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok));
719         EXPECT_CALL(*napiMock, napi_is_callable(_, _, _))
720             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_SECOND>(true), Return(napi_ok)));
721         EXPECT_CALL(*napiMock, napi_create_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok));
722         EXPECT_CALL(*napiMock, napi_call_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok));
723         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
724         ret = CallPromiseEx(*jsRuntime, result, callbackInfoBackup);
725         EXPECT_TRUE(ret);
726     } catch (...) {
727         EXPECT_TRUE(false);
728         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CallPromiseEx.";
729     }
730     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CallPromiseEx_0300";
731 }
732 
733 /**
734  * @tc.number: SUB_backup_ext_js_AttachBackupExtensionContext_0100
735  * @tc.name: SUB_backup_ext_js_AttachBackupExtensionContext_0100
736  * @tc.desc: 测试 AttachBackupExtensionContext 各个分支成功与失败
737  * @tc.size: MEDIUM
738  * @tc.type: FUNC
739  * @tc.level Level 1
740  * @tc.require: issuesIAFBOS
741  */
742 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_AttachBackupExtensionContext_0100, testing::ext::TestSize.Level1)
743 {
744     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_AttachBackupExtensionContext_0100";
745     try {
746         auto ret = AttachBackupExtensionContext(nullptr, nullptr, nullptr);
747         EXPECT_TRUE(ret == nullptr);
748 
749         int env = 0;
750         ret = AttachBackupExtensionContext(reinterpret_cast<napi_env>(&env), nullptr, nullptr);
751         EXPECT_TRUE(ret == nullptr);
752 
753         auto value = make_shared<ExtBackupContext>();
754         EXPECT_CALL(*extBackupMock, CreateExtBackupJsContext(_, _)).WillOnce(Return(nullptr));
755         ret = AttachBackupExtensionContext(reinterpret_cast<napi_env>(&env), reinterpret_cast<void *>(&value), nullptr);
756         EXPECT_TRUE(ret == nullptr);
757 
758         EXPECT_CALL(*extBackupMock, CreateExtBackupJsContext(_, _))
759             .WillOnce(Return(reinterpret_cast<napi_value>(&env)));
760         EXPECT_CALL(*extBackupMock, LoadSystemModuleByEngine(_, _, _, _)).WillOnce(Return(nullptr));
761         ret = AttachBackupExtensionContext(reinterpret_cast<napi_env>(&env), reinterpret_cast<void *>(&value), nullptr);
762         EXPECT_TRUE(ret == nullptr);
763     } catch (...) {
764         EXPECT_TRUE(false);
765         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by AttachBackupExtensionContext.";
766     }
767     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_AttachBackupExtensionContext_0100";
768 }
769 
770 /**
771  * @tc.number: SUB_backup_ext_js_ExportJsContext_0100
772  * @tc.name: SUB_backup_ext_js_ExportJsContext_0100
773  * @tc.desc: 测试 ExportJsContext 各个分支成功与失败
774  * @tc.size: MEDIUM
775  * @tc.type: FUNC
776  * @tc.level Level 1
777  * @tc.require: issuesIAFBOS
778  */
779 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_ExportJsContext_0100, testing::ext::TestSize.Level1)
780 {
781     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_ExportJsContext_0100";
782     try {
783         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
784         extBackupJs->ExportJsContext();
785         EXPECT_TRUE(extBackupJs->jsObj_ == nullptr);
786 
787         extBackupJs->jsObj_ = make_unique<NativeReferenceMock>();
788         auto refMock = static_cast<NativeReferenceMock*>(extBackupJs->jsObj_.get());
789         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
790         EXPECT_CALL(*refMock, GetNapiValue()).WillOnce(Return(nullptr));
791         extBackupJs->ExportJsContext();
792         EXPECT_TRUE(extBackupJs->jsObj_ != nullptr);
793 
794         int value = 0;
795         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
796         EXPECT_CALL(*refMock, GetNapiValue()).WillOnce(Return(reinterpret_cast<napi_value>(&value)));
797         extBackupJs->ExportJsContext();
798         EXPECT_TRUE(extBackupJs->jsObj_ != nullptr);
799     } catch (...) {
800         EXPECT_TRUE(false);
801         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by ExportJsContext.";
802     }
803     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_ExportJsContext_0100";
804 }
805 
806 /**
807  * @tc.number: SUB_backup_ext_js_CallJsMethod_0100
808  * @tc.name: SUB_backup_ext_js_CallJsMethod_0100
809  * @tc.desc: 测试 CallJsMethod 各个分支成功与失败
810  * @tc.size: MEDIUM
811  * @tc.type: FUNC
812  * @tc.level Level 1
813  * @tc.require: issuesIAFBOS
814  */
815 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CallJsMethod_0100, testing::ext::TestSize.Level1)
816 {
817     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CallJsMethod_0100";
818     try {
819         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
820         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_invalid_arg));
821         auto ret = extBackupJs->CallJsMethod("", *jsRuntime, nullptr, nullptr, nullptr);
822         EXPECT_EQ(ret, EINVAL);
823 
824         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
825         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
826         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(Return(1));
827         ret = extBackupJs->CallJsMethod("", *jsRuntime, nullptr, nullptr, nullptr);
828         EXPECT_EQ(ret, EINVAL);
829 
830         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr)).WillOnce(Return(nullptr));
831         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
832         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(DoAll(WithArgs<1, 3>(Invoke(
__anonc3409c9d0502(uv_work_t* req, uv_after_work_cb after_work_cb) 833             [](uv_work_t* req, uv_after_work_cb after_work_cb) {
834                 after_work_cb(req, 0);
835         })), Return(0)));
836         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
837         ret = extBackupJs->CallJsMethod("", *jsRuntime, nullptr, nullptr, nullptr);
838         EXPECT_EQ(ret, ERR_OK);
839     } catch (...) {
840         EXPECT_TRUE(false);
841         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CallJsMethod.";
842     }
843     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CallJsMethod_0100";
844 }
845 
846 /**
847  * @tc.number: SUB_backup_ext_js_DoCallJsMethod_0100
848  * @tc.name: SUB_backup_ext_js_DoCallJsMethod_0100
849  * @tc.desc: 测试 DoCallJsMethod 各个分支成功与失败
850  * @tc.size: MEDIUM
851  * @tc.type: FUNC
852  * @tc.level Level 1
853  * @tc.require: issuesIAFBOS
854  */
855 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_DoCallJsMethod_0100, testing::ext::TestSize.Level1)
856 {
857     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_DoCallJsMethod_0100";
858     try {
859         string funcName = "";
860         InputArgsParser argParserIn = {};
861         ResultValueParser retParserIn = {};
862         auto param = make_shared<CallJsParam>(funcName, nullptr, nullptr, argParserIn, retParserIn);
863         auto ret = DoCallJsMethod(param.get());
864         EXPECT_EQ(ret, EINVAL);
865 
866         param->jsRuntime = jsRuntime.get();
867         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
868         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
869         ret = DoCallJsMethod(param.get());
870         EXPECT_EQ(ret, EINVAL);
871 
872         int scope = 0;
__anonc3409c9d0602(napi_env, std::vector<napi_value> &)873         param->argParser = [](napi_env, std::vector<napi_value> &){ return false; };
874         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
875         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(
876             DoAll(SetArgPointee<ARG_INDEX_FIRST>(reinterpret_cast<napi_handle_scope>(&scope)), Return(napi_ok)));
877         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
878         ret = DoCallJsMethod(param.get());
879         EXPECT_EQ(ret, EINVAL);
880 
881         auto ref = make_shared<NativeReferenceMock>();
__anonc3409c9d0702(napi_env, std::vector<napi_value> &)882         param->argParser = [](napi_env, std::vector<napi_value> &){ return true; };
883         param->jsObj = ref.get();
884         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
885         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(
886             DoAll(SetArgPointee<ARG_INDEX_FIRST>(reinterpret_cast<napi_handle_scope>(&scope)), Return(napi_ok)));
887         EXPECT_CALL(*ref, GetNapiValue()).WillOnce(Return(nullptr));
888         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
889         ret = DoCallJsMethod(param.get());
890         EXPECT_EQ(ret, EINVAL);
891     } catch (...) {
892         EXPECT_TRUE(false);
893         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by DoCallJsMethod.";
894     }
895     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_DoCallJsMethod_0100";
896 }
897 
898 /**
899  * @tc.number: SUB_backup_ext_js_DoCallJsMethod_0200
900  * @tc.name: SUB_backup_ext_js_DoCallJsMethod_0200
901  * @tc.desc: 测试 DoCallJsMethod 各个分支成功与失败
902  * @tc.size: MEDIUM
903  * @tc.type: FUNC
904  * @tc.level Level 1
905  * @tc.require: issuesIAFBOS
906  */
907 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_DoCallJsMethod_0200, testing::ext::TestSize.Level1)
908 {
909     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_DoCallJsMethod_0200";
910     try {
911         string funcName = "";
912         InputArgsParser argParserIn = {};
913         ResultValueParser retParserIn = {};
914         auto param = make_shared<CallJsParam>(funcName, nullptr, nullptr, argParserIn, retParserIn);
915         auto ref = make_shared<NativeReferenceMock>();
916         param->argParser = nullptr;
917         param->retParser = nullptr;
918         param->jsObj = ref.get();
919 
920         int scope = 0;
921         napi_value value = nullptr;
922         param->jsRuntime = jsRuntime.get();
923         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
924         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(
925             DoAll(SetArgPointee<ARG_INDEX_FIRST>(reinterpret_cast<napi_handle_scope>(&scope)), Return(napi_ok)));
926         EXPECT_CALL(*ref, GetNapiValue()).WillOnce(Return(reinterpret_cast<napi_value>(&value)));
927         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_invalid_arg));
928         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
929         auto ret = DoCallJsMethod(param.get());
930         EXPECT_EQ(ret, EINVAL);
931 
932         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
933         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(
934             DoAll(SetArgPointee<ARG_INDEX_FIRST>(reinterpret_cast<napi_handle_scope>(&scope)), Return(napi_ok)));
935         EXPECT_CALL(*ref, GetNapiValue()).WillOnce(Return(reinterpret_cast<napi_value>(&value)));
936         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok));
937         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
938         ret = DoCallJsMethod(param.get());
939         EXPECT_EQ(ret, EINVAL);
940 
__anonc3409c9d0802(napi_env, napi_value)941         param->retParser = [](napi_env, napi_value){ return false; };
942         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
943         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(
944             DoAll(SetArgPointee<ARG_INDEX_FIRST>(reinterpret_cast<napi_handle_scope>(&scope)), Return(napi_ok)));
945         EXPECT_CALL(*ref, GetNapiValue()).WillOnce(Return(reinterpret_cast<napi_value>(&value)));
946         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok));
947         EXPECT_CALL(*napiMock, napi_call_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok));
948         EXPECT_CALL(*napiMock, napi_escape_handle(_, _, _, _)).WillOnce(Return(napi_ok));
949         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
950         ret = DoCallJsMethod(param.get());
951         EXPECT_EQ(ret, EINVAL);
952     } catch (...) {
953         EXPECT_TRUE(false);
954         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by DoCallJsMethod.";
955     }
956     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_DoCallJsMethod_0200";
957 }
958 
959 /**
960  * @tc.number: SUB_backup_ext_js_DoCallJsMethod_0300
961  * @tc.name: SUB_backup_ext_js_DoCallJsMethod_0300
962  * @tc.desc: 测试 DoCallJsMethod 各个分支成功与失败
963  * @tc.size: MEDIUM
964  * @tc.type: FUNC
965  * @tc.level Level 1
966  * @tc.require: issuesIAFBOS
967  */
968 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_DoCallJsMethod_0300, testing::ext::TestSize.Level1)
969 {
970     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_DoCallJsMethod_0300";
971     try {
972         string funcName = "";
973         InputArgsParser argParserIn = {};
974         ResultValueParser retParserIn = {};
975         auto param = make_shared<CallJsParam>(funcName, nullptr, nullptr, argParserIn, retParserIn);
976         auto ref = make_shared<NativeReferenceMock>();
977         param->argParser = nullptr;
978         param->retParser = nullptr;
979         param->jsObj = ref.get();
980 
981         int scope = 0;
982         napi_value value = nullptr;
983         param->jsRuntime = jsRuntime.get();
__anonc3409c9d0902(napi_env, napi_value)984         param->retParser = [](napi_env, napi_value){ return true; };
985         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
986         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(
987             DoAll(SetArgPointee<ARG_INDEX_FIRST>(reinterpret_cast<napi_handle_scope>(&scope)), Return(napi_ok)));
988         EXPECT_CALL(*ref, GetNapiValue()).WillOnce(Return(reinterpret_cast<napi_value>(&value)));
989         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok));
990         EXPECT_CALL(*napiMock, napi_call_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok));
991         EXPECT_CALL(*napiMock, napi_escape_handle(_, _, _, _)).WillOnce(Return(napi_ok));
992         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
993         auto ret = DoCallJsMethod(param.get());
994         EXPECT_EQ(ret, ERR_OK);
995     } catch (...) {
996         EXPECT_TRUE(false);
997         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by DoCallJsMethod.";
998     }
999     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_DoCallJsMethod_0300";
1000 }
1001 
1002 /**
1003  * @tc.number: SUB_backup_ext_js_InvokeAppExtMethod_0100
1004  * @tc.name: SUB_backup_ext_js_InvokeAppExtMethod_0100
1005  * @tc.desc: 测试 InvokeAppExtMethod 各个分支成功与失败
1006  * @tc.size: MEDIUM
1007  * @tc.type: FUNC
1008  * @tc.level Level 1
1009  * @tc.require: issuesIAFBOS
1010  */
1011 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_InvokeAppExtMethod_0100, testing::ext::TestSize.Level1)
1012 {
1013     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_InvokeAppExtMethod_0100";
1014     try {
1015         ErrCode errCode = BError(BError::Codes::OK);
1016         string result = "";
1017         auto ret = extBackupJs->InvokeAppExtMethod(errCode, result);
1018         EXPECT_EQ(ret, ERR_OK);
1019 
1020         result = "test";
1021         ret = extBackupJs->InvokeAppExtMethod(errCode, result);
1022         EXPECT_EQ(ret, ERR_OK);
1023     } catch (...) {
1024         EXPECT_TRUE(false);
1025         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by InvokeAppExtMethod.";
1026     }
1027     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_InvokeAppExtMethod_0100";
1028 }
1029 
1030 /**
1031  * @tc.number: SUB_backup_ext_js_CallJsOnBackupEx_0100
1032  * @tc.name: SUB_backup_ext_js_CallJsOnBackupEx_0100
1033  * @tc.desc: 测试 CallJsOnBackupEx 各个分支成功与失败
1034  * @tc.size: MEDIUM
1035  * @tc.type: FUNC
1036  * @tc.level Level 1
1037  * @tc.require: issuesIAFBOS
1038  */
1039 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CallJsOnBackupEx_0100, testing::ext::TestSize.Level1)
1040 {
1041     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CallJsOnBackupEx_0100";
1042     try {
1043         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
1044         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_invalid_arg));
1045         auto ret = extBackupJs->CallJsOnBackupEx();
1046         EXPECT_EQ(ret, EINVAL);
1047 
__anonc3409c9d0a02(ErrCode, std::string)1048         extBackupJs->callbackInfoEx_ = std::make_shared<CallbackInfoEx>([](ErrCode, std::string){});
1049         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
1050         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
1051         EXPECT_CALL(*napiMock, napi_is_exception_pending(_, _)).WillOnce(Return(napi_ok));
1052         EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _)).WillOnce(Return(napi_invalid_arg));
__anonc3409c9d0b02(uv_work_t* work) 1053         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(WithArgs<1>(Invoke([](uv_work_t* work) {
1054             CallJsParam *param = reinterpret_cast<CallJsParam *>(work->data);
1055             param->retParser(nullptr, nullptr);
1056             return -1;
1057         })));
1058         ret = extBackupJs->CallJsOnBackupEx();
1059         EXPECT_EQ(ret, EINVAL);
1060 
1061         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
1062         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
1063         EXPECT_CALL(*napiMock, napi_is_exception_pending(_, _))
1064             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_FIRST>(true), Return(napi_ok)));
1065         EXPECT_CALL(*napiMock, napi_get_and_clear_last_exception(_, _)).WillOnce(Return(napi_invalid_arg));
__anonc3409c9d0c02(uv_work_t* work) 1066         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(WithArgs<1>(Invoke([](uv_work_t* work) {
1067             CallJsParam *param = reinterpret_cast<CallJsParam *>(work->data);
1068             param->retParser(nullptr, nullptr);
1069             return -1;
1070         })));
1071         ret = extBackupJs->CallJsOnBackupEx();
1072         EXPECT_EQ(ret, EINVAL);
1073     } catch (...) {
1074         EXPECT_TRUE(false);
1075         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CallJsOnBackupEx.";
1076     }
1077     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CallJsOnBackupEx_0100";
1078 }
1079 
1080 /**
1081  * @tc.number: SUB_backup_ext_js_CallJsOnBackupEx_0200
1082  * @tc.name: SUB_backup_ext_js_CallJsOnBackupEx_0200
1083  * @tc.desc: 测试 CallJsOnBackupEx 各个分支成功与失败
1084  * @tc.size: MEDIUM
1085  * @tc.type: FUNC
1086  * @tc.level Level 1
1087  * @tc.require: issuesIAFBOS
1088  */
1089 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CallJsOnBackupEx_0200, testing::ext::TestSize.Level1)
1090 {
1091     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CallJsOnBackupEx_0200";
1092     try {
__anonc3409c9d0d02(ErrCode, std::string)1093         extBackupJs->callbackInfoEx_ = std::make_shared<CallbackInfoEx>([](ErrCode, std::string){});
1094         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr)).WillOnce(Return(nullptr));
1095         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
1096         EXPECT_CALL(*napiMock, napi_is_promise(_, _, _))
1097             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_SECOND>(true), Return(napi_ok)));
1098         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
1099         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
1100         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_invalid_arg));
__anonc3409c9d0e02(uv_work_t* work) 1101         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(WithArgs<1>(Invoke([](uv_work_t* work) {
1102             int value = 0;
1103             CallJsParam *param = reinterpret_cast<CallJsParam *>(work->data);
1104             param->retParser(nullptr, reinterpret_cast<napi_value>(&value));
1105             return -1;
1106         })));
1107         auto ret = extBackupJs->CallJsOnBackupEx();
1108         EXPECT_EQ(ret, EINVAL);
1109     } catch (...) {
1110         EXPECT_TRUE(false);
1111         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CallJsOnBackupEx.";
1112     }
1113     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CallJsOnBackupEx_0200";
1114 }
1115 
1116 /**
1117  * @tc.number: SUB_backup_ext_js_CallJsOnBackup_0100
1118  * @tc.name: SUB_backup_ext_js_CallJsOnBackup_0100
1119  * @tc.desc: 测试 CallJsOnBackup 各个分支成功与失败
1120  * @tc.size: MEDIUM
1121  * @tc.type: FUNC
1122  * @tc.level Level 1
1123  * @tc.require: issuesIAFBOS
1124  */
1125 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CallJsOnBackup_0100, testing::ext::TestSize.Level1)
1126 {
1127     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CallJsOnBackup_0100";
1128     try {
1129         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
1130         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_invalid_arg));
1131         auto ret = extBackupJs->CallJsOnBackup();
1132         EXPECT_EQ(ret, EINVAL);
1133 
__anonc3409c9d0f02(ErrCode, std::string)1134         extBackupJs->callbackInfo_ = std::make_shared<CallbackInfo>([](ErrCode, std::string){});
1135         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
1136         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
1137         EXPECT_CALL(*napiMock, napi_is_exception_pending(_, _)).WillOnce(Return(napi_ok));
__anonc3409c9d1002(uv_work_t* work) 1138         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(WithArgs<1>(Invoke([](uv_work_t* work) {
1139             CallJsParam *param = reinterpret_cast<CallJsParam *>(work->data);
1140             param->retParser(nullptr, nullptr);
1141             return -1;
1142         })));
1143         ret = extBackupJs->CallJsOnBackup();
1144         EXPECT_EQ(ret, EINVAL);
1145 
1146         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
1147         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
1148         EXPECT_CALL(*napiMock, napi_is_exception_pending(_, _))
1149             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_FIRST>(true), Return(napi_ok)));
1150         EXPECT_CALL(*napiMock, napi_get_and_clear_last_exception(_, _)).WillOnce(Return(napi_invalid_arg));
__anonc3409c9d1102(uv_work_t* work) 1151         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(WithArgs<1>(Invoke([](uv_work_t* work) {
1152             CallJsParam *param = reinterpret_cast<CallJsParam *>(work->data);
1153             param->retParser(nullptr, nullptr);
1154             return -1;
1155         })));
1156         ret = extBackupJs->CallJsOnBackup();
1157         EXPECT_EQ(ret, EINVAL);
1158     } catch (...) {
1159         EXPECT_TRUE(false);
1160         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CallJsOnBackup.";
1161     }
1162     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CallJsOnBackup_0100";
1163 }
1164 
1165 /**
1166  * @tc.number: SUB_backup_ext_js_CallJsOnBackup_0200
1167  * @tc.name: SUB_backup_ext_js_CallJsOnBackup_0200
1168  * @tc.desc: 测试 CallJsOnBackup 各个分支成功与失败
1169  * @tc.size: MEDIUM
1170  * @tc.type: FUNC
1171  * @tc.level Level 1
1172  * @tc.require: issuesIAFBOS
1173  */
1174 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CallJsOnBackup_0200, testing::ext::TestSize.Level1)
1175 {
1176     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CallJsOnBackup_0200";
1177     try {
__anonc3409c9d1202(ErrCode, std::string)1178         extBackupJs->callbackInfo_ = std::make_shared<CallbackInfo>([](ErrCode, std::string){});
1179         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr)).WillOnce(Return(nullptr));
1180         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
1181         EXPECT_CALL(*napiMock, napi_is_promise(_, _, _))
1182             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_SECOND>(true), Return(napi_ok)));
1183         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
1184         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
1185         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_invalid_arg));
__anonc3409c9d1302(uv_work_t* work) 1186         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(WithArgs<1>(Invoke([](uv_work_t* work) {
1187             int value = 0;
1188             CallJsParam *param = reinterpret_cast<CallJsParam *>(work->data);
1189             param->retParser(nullptr, reinterpret_cast<napi_value>(&value));
1190             return -1;
1191         })));
1192         auto ret = extBackupJs->CallJsOnBackup();
1193         EXPECT_EQ(ret, EINVAL);
1194     } catch (...) {
1195         EXPECT_TRUE(false);
1196         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CallJsOnBackup.";
1197     }
1198     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CallJsOnBackup_0200";
1199 }
1200 
1201 /**
1202  * @tc.number: SUB_backup_ext_js_CallJSRestoreEx_0100
1203  * @tc.name: SUB_backup_ext_js_CallJSRestoreEx_0100
1204  * @tc.desc: 测试 CallJSRestoreEx 各个分支成功与失败
1205  * @tc.size: MEDIUM
1206  * @tc.type: FUNC
1207  * @tc.level Level 1
1208  * @tc.require: issuesIAFBOS
1209  */
1210 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CallJSRestoreEx_0100, testing::ext::TestSize.Level1)
1211 {
1212     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CallJSRestoreEx_0100";
1213     try {
1214         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
1215         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_invalid_arg));
1216         auto ret = extBackupJs->CallJSRestoreEx();
1217         EXPECT_EQ(ret, EINVAL);
1218 
__anonc3409c9d1402(ErrCode, std::string)1219         extBackupJs->callbackInfoEx_ = std::make_shared<CallbackInfoEx>([](ErrCode, std::string){});
1220         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
1221         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
1222         EXPECT_CALL(*napiMock, napi_is_exception_pending(_, _)).WillOnce(Return(napi_ok));
1223         EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _)).WillOnce(Return(napi_invalid_arg));
__anonc3409c9d1502(uv_work_t* work) 1224         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(WithArgs<1>(Invoke([](uv_work_t* work) {
1225             CallJsParam *param = reinterpret_cast<CallJsParam *>(work->data);
1226             param->retParser(nullptr, nullptr);
1227             return -1;
1228         })));
1229         ret = extBackupJs->CallJSRestoreEx();
1230         EXPECT_EQ(ret, EINVAL);
1231 
1232         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
1233         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
1234         EXPECT_CALL(*napiMock, napi_is_exception_pending(_, _))
1235             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_FIRST>(true), Return(napi_ok)));
1236         EXPECT_CALL(*napiMock, napi_get_and_clear_last_exception(_, _)).WillOnce(Return(napi_invalid_arg));
__anonc3409c9d1602(uv_work_t* work) 1237         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(WithArgs<1>(Invoke([](uv_work_t* work) {
1238             CallJsParam *param = reinterpret_cast<CallJsParam *>(work->data);
1239             param->retParser(nullptr, nullptr);
1240             return -1;
1241         })));
1242         ret = extBackupJs->CallJSRestoreEx();
1243         EXPECT_EQ(ret, EINVAL);
1244     } catch (...) {
1245         EXPECT_TRUE(false);
1246         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CallJSRestoreEx.";
1247     }
1248     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CallJSRestoreEx_0100";
1249 }
1250 
1251 /**
1252  * @tc.number: SUB_backup_ext_js_CallJSRestoreEx_0200
1253  * @tc.name: SUB_backup_ext_js_CallJSRestoreEx_0200
1254  * @tc.desc: 测试 CallJSRestoreEx 各个分支成功与失败
1255  * @tc.size: MEDIUM
1256  * @tc.type: FUNC
1257  * @tc.level Level 1
1258  * @tc.require: issuesIAFBOS
1259  */
1260 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CallJSRestoreEx_0200, testing::ext::TestSize.Level1)
1261 {
1262     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CallJSRestoreEx_0200";
1263     try {
__anonc3409c9d1702(ErrCode, std::string)1264         extBackupJs->callbackInfoEx_ = std::make_shared<CallbackInfoEx>([](ErrCode, std::string){});
1265         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr)).WillOnce(Return(nullptr));
1266         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
1267         EXPECT_CALL(*napiMock, napi_is_promise(_, _, _))
1268             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_SECOND>(true), Return(napi_ok)));
1269         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
1270         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
1271         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_invalid_arg));
__anonc3409c9d1802(uv_work_t* work) 1272         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(WithArgs<1>(Invoke([](uv_work_t* work) {
1273             int value = 0;
1274             CallJsParam *param = reinterpret_cast<CallJsParam *>(work->data);
1275             param->retParser(nullptr, reinterpret_cast<napi_value>(&value));
1276             return -1;
1277         })));
1278         auto ret = extBackupJs->CallJSRestoreEx();
1279         EXPECT_EQ(ret, EINVAL);
1280     } catch (...) {
1281         EXPECT_TRUE(false);
1282         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CallJSRestoreEx.";
1283     }
1284     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CallJSRestoreEx_0200";
1285 }
1286 
1287 /**
1288  * @tc.number: SUB_backup_ext_js_CallJSRestore_0100
1289  * @tc.name: SUB_backup_ext_js_CallJSRestore_0100
1290  * @tc.desc: 测试 CallJSRestore 各个分支成功与失败
1291  * @tc.size: MEDIUM
1292  * @tc.type: FUNC
1293  * @tc.level Level 1
1294  * @tc.require: issuesIAFBOS
1295  */
1296 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CallJSRestore_0100, testing::ext::TestSize.Level1)
1297 {
1298     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CallJSRestore_0100";
1299     try {
1300         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
1301         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_invalid_arg));
1302         auto ret = extBackupJs->CallJSRestore();
1303         EXPECT_EQ(ret, EINVAL);
1304 
__anonc3409c9d1902(ErrCode, std::string)1305         extBackupJs->callbackInfo_ = std::make_shared<CallbackInfo>([](ErrCode, std::string){});
1306         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
1307         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
1308         EXPECT_CALL(*napiMock, napi_is_exception_pending(_, _)).WillOnce(Return(napi_ok));
__anonc3409c9d1a02(uv_work_t* work) 1309         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(WithArgs<1>(Invoke([](uv_work_t* work) {
1310             CallJsParam *param = reinterpret_cast<CallJsParam *>(work->data);
1311             param->retParser(nullptr, nullptr);
1312             return -1;
1313         })));
1314         ret = extBackupJs->CallJSRestore();
1315         EXPECT_EQ(ret, EINVAL);
1316 
1317         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
1318         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
1319         EXPECT_CALL(*napiMock, napi_is_exception_pending(_, _))
1320             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_FIRST>(true), Return(napi_ok)));
1321         EXPECT_CALL(*napiMock, napi_get_and_clear_last_exception(_, _)).WillOnce(Return(napi_invalid_arg));
__anonc3409c9d1b02(uv_work_t* work) 1322         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(WithArgs<1>(Invoke([](uv_work_t* work) {
1323             CallJsParam *param = reinterpret_cast<CallJsParam *>(work->data);
1324             param->retParser(nullptr, nullptr);
1325             return -1;
1326         })));
1327         ret = extBackupJs->CallJSRestore();
1328         EXPECT_EQ(ret, EINVAL);
1329     } catch (...) {
1330         EXPECT_TRUE(false);
1331         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CallJSRestore.";
1332     }
1333     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CallJSRestore_0100";
1334 }
1335 
1336 /**
1337  * @tc.number: SUB_backup_ext_js_CallJSRestore_0200
1338  * @tc.name: SUB_backup_ext_js_CallJSRestore_0200
1339  * @tc.desc: 测试 CallJSRestore 各个分支成功与失败
1340  * @tc.size: MEDIUM
1341  * @tc.type: FUNC
1342  * @tc.level Level 1
1343  * @tc.require: issuesIAFBOS
1344  */
1345 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_CallJSRestore_0200, testing::ext::TestSize.Level1)
1346 {
1347     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_CallJSRestore_0200";
1348     try {
__anonc3409c9d1c02(ErrCode, std::string)1349         extBackupJs->callbackInfo_ = std::make_shared<CallbackInfo>([](ErrCode, std::string){});
1350         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr)).WillOnce(Return(nullptr));
1351         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
1352         EXPECT_CALL(*napiMock, napi_is_promise(_, _, _))
1353             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_SECOND>(true), Return(napi_ok)));
1354         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
1355         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
1356         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_invalid_arg));
__anonc3409c9d1d02(uv_work_t* work) 1357         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(WithArgs<1>(Invoke([](uv_work_t* work) {
1358             int value = 0;
1359             CallJsParam *param = reinterpret_cast<CallJsParam *>(work->data);
1360             param->retParser(nullptr, reinterpret_cast<napi_value>(&value));
1361             return -1;
1362         })));
1363         auto ret = extBackupJs->CallJSRestore();
1364         EXPECT_EQ(ret, EINVAL);
1365     } catch (...) {
1366         EXPECT_TRUE(false);
1367         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by CallJSRestore.";
1368     }
1369     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_CallJSRestore_0200";
1370 }
1371 
1372 /**
1373  * @tc.number: SUB_backup_ext_js_GetBackupInfo_0100
1374  * @tc.name: SUB_backup_ext_js_GetBackupInfo_0100
1375  * @tc.desc: 测试 GetBackupInfo 各个分支成功与失败
1376  * @tc.size: MEDIUM
1377  * @tc.type: FUNC
1378  * @tc.level Level 1
1379  * @tc.require: issuesIAFBOS
1380  */
1381 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_GetBackupInfo_0100, testing::ext::TestSize.Level1)
1382 {
1383     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_GetBackupInfo_0100";
1384     try {
1385         extBackupJs->jsObj_ = make_unique<NativeReferenceMock>();
1386         EXPECT_CALL(*napiMock, napi_is_exception_pending(_, _)).WillOnce(Return(napi_ok));
1387         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
1388         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_invalid_arg));
__anonc3409c9d1e02(ErrCode, std::string)1389         auto ret = extBackupJs->GetBackupInfo([](ErrCode, std::string){});
1390         EXPECT_EQ(ret, EINVAL);
1391 
1392         EXPECT_CALL(*napiMock, napi_is_exception_pending(_, _)).WillOnce(Return(napi_ok));
1393         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
1394         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
1395         EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _)).WillOnce(Return(napi_invalid_arg));
__anonc3409c9d1f02(uv_work_t* work) 1396         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(WithArgs<1>(Invoke([](uv_work_t* work) {
1397             CallJsParam *param = reinterpret_cast<CallJsParam *>(work->data);
1398             param->retParser(nullptr, nullptr);
1399             return -1;
1400         })));
__anonc3409c9d2002(ErrCode, std::string)1401         ret = extBackupJs->GetBackupInfo([](ErrCode, std::string){});
1402         EXPECT_EQ(ret, EINVAL);
1403     } catch (...) {
1404         EXPECT_TRUE(false);
1405         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by GetBackupInfo.";
1406     }
1407     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_GetBackupInfo_0100";
1408 }
1409 
1410 /**
1411  * @tc.number: SUB_backup_ext_js_GetBackupInfo_0200
1412  * @tc.name: SUB_backup_ext_js_GetBackupInfo_0200
1413  * @tc.desc: 测试 GetBackupInfo 各个分支成功与失败
1414  * @tc.size: MEDIUM
1415  * @tc.type: FUNC
1416  * @tc.level Level 1
1417  * @tc.require: issuesIAFBOS
1418  */
1419 HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_GetBackupInfo_0200, testing::ext::TestSize.Level1)
1420 {
1421     GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_GetBackupInfo_0200";
1422     try {
1423         extBackupJs->jsObj_ = make_unique<NativeReferenceMock>();
1424         EXPECT_CALL(*napiMock, napi_is_exception_pending(_, _)).WillOnce(Return(napi_ok));
1425         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr));
1426         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
1427         EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _)).WillOnce(Return(napi_ok))
1428             .WillOnce(Return(napi_ok));
__anonc3409c9d2102(uv_work_t* work) 1429         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(WithArgs<1>(Invoke([](uv_work_t* work) {
1430             CallJsParam *param = reinterpret_cast<CallJsParam *>(work->data);
1431             param->retParser(nullptr, nullptr);
1432             return -1;
1433         })));
__anonc3409c9d2202(ErrCode, std::string)1434         auto ret = extBackupJs->GetBackupInfo([](ErrCode, std::string){});
1435         EXPECT_EQ(ret, EINVAL);
1436 
1437         EXPECT_CALL(*napiMock, napi_is_exception_pending(_, _)).WillOnce(Return(napi_ok));
1438         EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr)).WillOnce(Return(nullptr));
1439         EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok));
1440         EXPECT_CALL(*napiMock, napi_is_promise(_, _, _))
1441             .WillOnce(DoAll(SetArgPointee<ARG_INDEX_SECOND>(true), Return(napi_ok)));
1442         EXPECT_CALL(*napiMock, napi_open_handle_scope(_, _)).WillOnce(Return(napi_ok));
1443         EXPECT_CALL(*napiMock, napi_close_handle_scope(_, _)).WillOnce(Return(napi_ok));
1444         EXPECT_CALL(*napiMock, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_invalid_arg));
__anonc3409c9d2302(uv_work_t* work) 1445         EXPECT_CALL(*napiMock, uv_queue_work(_, _, _, _)).WillOnce(WithArgs<1>(Invoke([](uv_work_t* work) {
1446             int value = 0;
1447             CallJsParam *param = reinterpret_cast<CallJsParam *>(work->data);
1448             param->retParser(nullptr, reinterpret_cast<napi_value>(&value));
1449             return -1;
1450         })));
__anonc3409c9d2402(ErrCode, std::string)1451         ret = extBackupJs->GetBackupInfo([](ErrCode, std::string){});
1452         EXPECT_EQ(ret, EINVAL);
1453     } catch (...) {
1454         EXPECT_TRUE(false);
1455         GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by GetBackupInfo.";
1456     }
1457     GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_GetBackupInfo_0200";
1458 }
1459 } // namespace OHOS::FileManagement::Backup