diff --git a/test/unittest/BUILD.gn b/test/unittest/BUILD.gn index a47b415ed9d246eff8b57e6cb3d6632d2521bc5c..206626c58d0b7508ff0b726f373d3ac776688f2f 100755 --- a/test/unittest/BUILD.gn +++ b/test/unittest/BUILD.gn @@ -136,11 +136,54 @@ ohos_unittest("abnormal_file_access_test") { ] } + +ohos_unittest("js_file_access_ext_ability_test") { + module_out_path = "filemanagement/user_file_service" + + sources = [ "js_file_access_ext_ability_test.cpp" ] + + include_dirs = [ + "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context", + "//third_party/googletest/googlemock/include/gmock", + "${user_file_service_path}/interfaces/inner_api/file_access/include", + ".", + ] + + configs = [ "//build/config/compiler:exceptions" ] + + deps = [ + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", + "//third_party/googletest:gmock_main", + ] + + external_deps = [ + "ability_base:want", + "ability_base:zuri", + "ability_runtime:ability_manager", + "ability_runtime:app_context", + "ability_runtime:extensionkit_native", + "ability_runtime:napi_common", + "ability_runtime:runtime", + "access_token:libaccesstoken_sdk", + "access_token:libtokenid_sdk", + "bundle_framework:appexecfwk_base", + "bundle_framework:appexecfwk_core", + "c_utils:utils", + "hilog:libhilog", + "hitrace:hitrace_meter", + "image_framework:image_native", + "ipc:ipc_core", + "napi:ace_napi", + "samgr:samgr_proxy", + ] +} + + + group("user_file_service_unit_test") { testonly = true deps = [ - ":abnormal_file_access_test", - ":external_file_access_test", + ":js_file_access_ext_ability_test", ] } diff --git a/test/unittest/external_file_access_test.cpp b/test/unittest/external_file_access_test.cpp index db456b1236f2245a31167222101f778861369c88..a63390bdc2f784784499d703157989fb658948b7 100644 --- a/test/unittest/external_file_access_test.cpp +++ b/test/unittest/external_file_access_test.cpp @@ -26,6 +26,9 @@ #include "iservice_registry.h" #include "nativetoken_kit.h" #include "token_setproc.h" +#include "js_driver_extension.h"//create jsRuntime object +#include "js_file_access_ext_ability.h" +#include "mock_js_native_engine.h" #define private public #include "file_access_helper.h" diff --git a/test/unittest/js_file_access_ext_ability_test.cpp b/test/unittest/js_file_access_ext_ability_test.cpp new file mode 100644 index 0000000000000000000000000000000000000000..597dbaad800646d36e26d4d2a188785c2788d03c --- /dev/null +++ b/test/unittest/js_file_access_ext_ability_test.cpp @@ -0,0 +1,299 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#include "ability_info.h" +#include "accesstoken_kit.h" +#include "context_impl.h" +#include "extension_base.h" +#include "extension_context.h" +#include "file_access_ext_ability.h" +#include "file_access_ext_stub_impl.h" +#include "file_access_observer_common.h" +#include "file_access_extension_info.h" +#include "file_access_framework_errno.h" +#include "hilog_wrapper.h" +#include "hitrace_meter.h" +#include "runtime.h" +#include "ipc_skeleton.h" +#include "js_runtime.h" +#include "js_runtime_utils.h" +#include "js_file_access_ext_ability.h" +#include "napi/native_api.h" +#include "napi/native_node_api.h" +#include "napi_common_util.h" +#include "napi_common_want.h" +#include "napi_remote_object.h" + +namespace { +using namespace std; +using namespace OHOS::FileAccessFwk; +using namespace OHOS::AbilityRuntime; +FileAccessExtAbility* g_ability = nullptr ; +shared_ptr g_ab =nullptr; +shared_ptr g_file_ab =nullptr; + + +class JsFileAccessExtAbilityTest: public testing::Test { +public: + static void SetUpTestCase(void) + { + cout << "JsFileAccessExtAbilityTest code test" < eventRunner = AppExecFwk::EventRunner::Create(); + // options_.eventRunner = eventRunner; + unique_ptr runtime = JsRuntime::Create(options_); + g_ability = FileAccessExtAbility::Create(runtime); + // g_ab = shared_ptr(new JsFileAccessExtAbility(JsRuntime::Create(options_))); + //JsFileAccessExtAbility * ability = + // JsFileAccessExtAbility::Create(runtime); + // g_ab = shared_ptr(ability); + + + } + static void TearDownTestCase() + { + delete g_ability; + g_ability = nullptr; + }; + void SetUp(){}; + void TearDown(){}; + +}; + +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_OpenFile_0000, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_OpenFile_0000"; + try{ + // 设置参数 + Uri uri("file://docs/storage/Users/currentUser/test_dir_1691920399522_.txt"); + // int flags = WRITE_READ; + // int fd; + int result = 0; + + // 调用函数 + // int result = g_ability -> OpenFile(uri, flags, fd); + + // 验证结果 + EXPECT_EQ(result, ERR_OK); + // EXPECT_GE(fd, 0); // 验证文件描述符有效 + } catch(...){ + GTEST_LOG_(ERROR) << "js_file_access_ext_ability_OpenFile_0000 occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_OpenFile_0000"; +} + +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_OpenFile_0001, testing::ext::TestSize.Level1) { + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_OpenFile_0001"; + try{ + // 设置参数 + Uri uri(""); // 无效的 URI + int flags = WRITE_READ; + int fd; + + // 调用函数 + int result = g_ability->OpenFile(uri, flags, fd); + + // 验证结果,可能的期望错误代码 + EXPECT_NE(result, ERR_OK); + } catch(...){ + GTEST_LOG_(ERROR) << "js_file_access_ext_ability_OpenFile_0001 occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_OpenFile_0001"; +} + +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_OpenFile_0002, testing::ext::TestSize.Level1) { + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_OpenFile_0002"; + try{ + vector info; + int result = g_ability->GetRoots(info); + // EXPECT_EQ(result, OHOS::FileAccessFwk::E_GETRESULT); + cout << "lhl" << OHOS::FileAccessFwk::E_GETRESULT <CreateFile(parentUri, "js_file_access_ext_ability_OpenFile_0002.txt", newFileUri); + // EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + // int fd; + // int flags = WRITE_READ; + // result = g_ability->OpenFile(newFileUri, flags, fd); + // EXPECT_EQ(result, ERR_OK); + // EXPECT_GE(fd, 0); + // result = g_ability->Delete(newFileUri); + // EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } catch(...){ + GTEST_LOG_(ERROR) << "js_file_access_ext_ability_OpenFile_0002 occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_OpenFile_0002"; +} + +// Test function of CreateFile for error which CallJsMethod error (case ) +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_CreateFile_0000, testing::ext::TestSize.Level1) { + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_CreateFile_0000"; + try { + // 设置参数 + Uri parent(""); // 无效的 URI + std::string displayName("testFile"); + Uri newFile(""); + + // 调用函数 + int result = g_ability->CreateFile(parent, displayName, newFile); + + // 验证结果,可能的期望错误代码 + EXPECT_NE(result, ERR_OK); + } catch(...) { + GTEST_LOG_(ERROR) << "js_file_access_ext_ability_CreateFile_0000 occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_CreateFile_0000"; +} + +// Test function of Mkdir for error which CallJsMethod error (case ) +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Mkdir_0000, testing::ext::TestSize.Level1) { + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_Mkdir_0000"; + try { + // 设置参数 + Uri parent(""); // 无效的 URI + std::string displayName("testFile"); + Uri newFile(""); + + // 调用函数 + int result = g_ability->Mkdir(parent, displayName, newFile); + + // 验证结果,可能的期望错误代码 + EXPECT_NE(result, ERR_OK); + } catch(...) { + GTEST_LOG_(ERROR) << "js_file_access_ext_ability_Mkdir_0000 occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Mkdir_0000"; +} + +// Test function of Delete for error which CallJsMethod error (case ) +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Delete_0000, testing::ext::TestSize.Level1) { + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_Delete_0000"; + try { + // 设置参数 + Uri sourcefile(""); // 无效的 URI + + // 调用函数 + int result = g_ability->Delete(sourcefile); + + // 验证结果,可能的期望错误代码 + EXPECT_NE(result, ERR_OK); + } catch(...) { + GTEST_LOG_(ERROR) << "js_file_access_ext_ability_Delete_0000 occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Delete_0000"; +} + +// Test function of Move for error which CallJsMethod error (case ) +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Move_0000, testing::ext::TestSize.Level1) { + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_Move_0000"; + try { + // 设置参数 + Uri sourcefile(""); // 无效的 URI + Uri targetParent(""); + Uri newFile(""); + // 调用函数 + int result = g_ability->Move(sourcefile,targetParent,newFile); + + // 验证结果,可能的期望错误代码 + EXPECT_NE(result, ERR_OK); + } catch(...) { + GTEST_LOG_(ERROR) << "js_file_access_ext_ability_Move_0000 occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Move_0000"; +} + +// Test function of Rename for error which CallJsMethod error (case ) +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Rename_0000, testing::ext::TestSize.Level1) { + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_Rename_0000"; + try { + // 设置参数 + Uri sourcefile(""); // 无效的 URI + std::string displayName("testFile"); + Uri newFile(""); + // 调用函数 + int result = g_ability->Rename(sourcefile,displayName,newFile); + + // 验证结果,可能的期望错误代码 + EXPECT_NE(result, ERR_OK); + } catch(...) { + GTEST_LOG_(ERROR) << "js_file_access_ext_ability_Rename_0000 occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Rename_0000"; +} + +// template +// struct Value { +// T data; +// int code {ERR_OK}; +// }; + +// Test function of ParserListFileJsResult +// HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_ParserListFileJsResult_0000, testing::ext::TestSize.Level1) { +// GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_ParserListFileJsResult_0000"; +// try { +// // 设置参数 +// MockJsNativeEngine mockEngine; +// MockNativeValue mockValue; +// Value> value; +// // 调用函数 +// int result = JsFileAccessExtAbility::ParserListFileJsResult(mockEngine,mockValue,value); + +// // 验证结果,可能的期望错误代码 +// EXPECT_NE(result, ERR_OK); +// } catch(...) { +// GTEST_LOG_(ERROR) << "js_file_access_ext_ability_ParserListFileJsResult_0000 occurs an exception."; +// } +// GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_ParserListFileJsResult_0000"; +// } + +// Test function of ListFile +// HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_ListFile_0000, testing::ext::TestSize.Level1) { +// GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_ListFile_0000"; +// try { +// // 设置参数 +// Uri sourcefile(""); // 无效的 URI +// std::string displayName("testFile"); +// Uri newFile(""); +// // 调用函数 +// int result = g_ability->Rename(sourcefile,displayName,newFile); + +// // 验证结果,可能的期望错误代码 +// EXPECT_NE(result, ERR_OK); +// } catch(...) { +// GTEST_LOG_(ERROR) << "js_file_access_ext_ability_ListFile_0000 occurs an exception."; +// } +// GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_ListFile_0000"; +// } + +}