From a86f5275d489c4ec6aff2282d44850a6390718d1 Mon Sep 17 00:00:00 2001 From: LVB8189 Date: Fri, 3 Nov 2023 14:21:52 +0800 Subject: [PATCH 1/6] modify Signed-off-by: LVB8189 --- .../native/file_uri/include/file_uri.h | 2 ++ .../native/file_uri/src/file_uri.cpp | 29 +++++++++++++++++++ .../kits/js/file_uri/file_uri_n_exporter.cpp | 18 ++++++++++++ .../kits/js/file_uri/file_uri_n_exporter.h | 1 + .../file_uri_native/file_uri_test.cpp | 24 +++++++++++++++ 5 files changed, 74 insertions(+) diff --git a/interfaces/innerkits/native/file_uri/include/file_uri.h b/interfaces/innerkits/native/file_uri/include/file_uri.h index 2f146ade8..c295325e5 100644 --- a/interfaces/innerkits/native/file_uri/include/file_uri.h +++ b/interfaces/innerkits/native/file_uri/include/file_uri.h @@ -28,6 +28,8 @@ public: std::string GetPath(); std::string GetRealPath(); std::string ToString(); + std::string GetDirectoryUri(); + bool IsFileUri(); explicit FileUri(const std::string &uriOrPath); ~FileUri() = default; diff --git a/interfaces/innerkits/native/file_uri/src/file_uri.cpp b/interfaces/innerkits/native/file_uri/src/file_uri.cpp index 4838bf9b1..c5913d16e 100644 --- a/interfaces/innerkits/native/file_uri/src/file_uri.cpp +++ b/interfaces/innerkits/native/file_uri/src/file_uri.cpp @@ -16,6 +16,8 @@ #include "file_uri.h" #include +#include +#include #include "uri.h" @@ -88,6 +90,33 @@ string FileUri::ToString() return uri_.ToString(); } +string FileUri::GetDirectoryUri() +{ + string uri = uri_.ToString(); + if(!IsFileUri()){ + return uri; + } + size_t pos = uri.rfind("/"); + return uri.substr(0, pos); +} + +bool FileUri::IsFileUri() +{ + struct stat fileInfo; + if (stat(uri_.ToString().c_str(), &fileInfo) == 0){ + if (S_ISREG(fileInfo.st_mode)){ + LOGD("uri's st_mode is reg"); + return true; + } else if (S_ISDIR(fileInfo.st_mode)){ + LOGD("uri's st_mode is dir"); + return false; + } + } + LOGE("fileInfo is error"); + return false; +} + + FileUri::FileUri(const string &uriOrPath): uri_( (uriOrPath.find(FILE_SCHEME_PREFIX) == 0) ? uriOrPath : CommonFunc::GetUriFromPath(uriOrPath) ) diff --git a/interfaces/kits/js/file_uri/file_uri_n_exporter.cpp b/interfaces/kits/js/file_uri/file_uri_n_exporter.cpp index d9dec0e39..db670af41 100644 --- a/interfaces/kits/js/file_uri/file_uri_n_exporter.cpp +++ b/interfaces/kits/js/file_uri/file_uri_n_exporter.cpp @@ -88,6 +88,23 @@ napi_value FileUriNExporter::GetFileUriName(napi_env env, napi_callback_info inf return NVal::CreateUTF8String(env, fileuriEntity->fileUri_.GetName()).val_; } +napi_value FileUriNExporter::GetDirectoryUri(napi_env env, napi_callback_info info) +{ + NFuncArg funcArg(env, info); + if (!funcArg.InitArgs(NARG_CNT::ZERO)) { + LOGE("Number of arguments unmatched"); + NError(E_PARAMS).ThrowErr(env); + return nullptr; + } + auto fileuriEntity = NClass::GetEntityOf(env, funcArg.GetThisVar()); + if (!fileuriEntity) { + LOGE("Failed to get file entity"); + NError(EINVAL).ThrowErr(env); + return nullptr; + } + return NVal::CreateUTF8String(env, fileuriEntity->fileUri_.GetDirectoryUri()).val_; +} + napi_value FileUriNExporter::GetFileUriPath(napi_env env, napi_callback_info info) { NFuncArg funcArg(env, info); @@ -111,6 +128,7 @@ bool FileUriNExporter::Export() NVal::DeclareNapiFunction("toString", UriToString), NVal::DeclareNapiGetter("name", GetFileUriName), NVal::DeclareNapiGetter("path", GetFileUriPath), + NVal::DeclareNapiFunction("getDirectoryUri", GetDirectoryUri), }; auto [succ, classValue] = NClass::DefineClass(exports_.env_, className, Constructor, std::move(props)); diff --git a/interfaces/kits/js/file_uri/file_uri_n_exporter.h b/interfaces/kits/js/file_uri/file_uri_n_exporter.h index 4172c08c5..8ab5707b5 100644 --- a/interfaces/kits/js/file_uri/file_uri_n_exporter.h +++ b/interfaces/kits/js/file_uri/file_uri_n_exporter.h @@ -31,6 +31,7 @@ public: static napi_value UriToString(napi_env env, napi_callback_info info); static napi_value GetFileUriName(napi_env env, napi_callback_info info); static napi_value GetFileUriPath(napi_env env, napi_callback_info info); + static napi_value GetDirectoryUri(napi_env env, napi_callback_info info); FileUriNExporter(napi_env env, napi_value exports); ~FileUriNExporter() override; diff --git a/test/unittest/file_uri_native/file_uri_test.cpp b/test/unittest/file_uri_native/file_uri_test.cpp index e51ee15f3..d570f5edb 100644 --- a/test/unittest/file_uri_native/file_uri_test.cpp +++ b/test/unittest/file_uri_native/file_uri_test.cpp @@ -214,4 +214,28 @@ namespace OHOS::AppFileService::ModuleFileUri { EXPECT_EQ(fileUri.GetPath(), fileStr); GTEST_LOG_(INFO) << "FileUriTest-begin File_uri_GetPath_0004"; } + + /** + * @tc.name: file_uri_test_0007 + * @tc.desc: Test function of GetDirectoryUri() interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: + */ + HWTEST_F(FileUriTest, File_uri_GetDirectoryUri_0000, testing::ext::TestSize.Level1) + { + GTEST_LOG_(INFO) << "FileUriTest-begin File_uri_GetDirectoryUri_0000"; + string fileStr = "/data/storage/el2/base/files/test.txt"; + string uri = "file://" + bundleA + fileStr; + FileUri fileUriObject(uri); + string fileDirectoryUri = "file://" + bundleA + "/data/storage/el2/base/files"; + EXPECT_EQ(fileUriObject.GetDirectoryUri(), fileDirectoryUri); + string folderStr = "/data/storage/el2/base/files"; + string folderUri = "file://" + bundleA + folderStr; + FileUri folderUriObject(folderUri); + string folderDirectoryUri = "file://" + bundleA + folderStr; + EXPECT_EQ(folderUriObject.GetDirectoryUri(), folderDirectoryUri); + GTEST_LOG_(INFO) << "FileUriTest-end File_uri_GetPath_0000"; + } } \ No newline at end of file -- Gitee From 8ebb347537cca63920e52f8198ca2024a570ed08 Mon Sep 17 00:00:00 2001 From: LVB8189 Date: Fri, 3 Nov 2023 18:34:23 +0800 Subject: [PATCH 2/6] modify Signed-off-by: LVB8189 --- interfaces/innerkits/native/file_uri/src/file_uri.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/interfaces/innerkits/native/file_uri/src/file_uri.cpp b/interfaces/innerkits/native/file_uri/src/file_uri.cpp index c5913d16e..4976dc86f 100644 --- a/interfaces/innerkits/native/file_uri/src/file_uri.cpp +++ b/interfaces/innerkits/native/file_uri/src/file_uri.cpp @@ -93,7 +93,7 @@ string FileUri::ToString() string FileUri::GetDirectoryUri() { string uri = uri_.ToString(); - if(!IsFileUri()){ + if (!IsFileUri()) { return uri; } size_t pos = uri.rfind("/"); @@ -103,11 +103,11 @@ string FileUri::GetDirectoryUri() bool FileUri::IsFileUri() { struct stat fileInfo; - if (stat(uri_.ToString().c_str(), &fileInfo) == 0){ - if (S_ISREG(fileInfo.st_mode)){ + if (stat(uri_.ToString().c_str(), &fileInfo) == 0) { + if (S_ISREG(fileInfo.st_mode)) { LOGD("uri's st_mode is reg"); return true; - } else if (S_ISDIR(fileInfo.st_mode)){ + } else if (S_ISDIR(fileInfo.st_mode)) { LOGD("uri's st_mode is dir"); return false; } @@ -116,7 +116,6 @@ bool FileUri::IsFileUri() return false; } - FileUri::FileUri(const string &uriOrPath): uri_( (uriOrPath.find(FILE_SCHEME_PREFIX) == 0) ? uriOrPath : CommonFunc::GetUriFromPath(uriOrPath) ) -- Gitee From 87683cc12a0c58536660febc0c971d6d042b7065 Mon Sep 17 00:00:00 2001 From: LVB8189 Date: Sun, 5 Nov 2023 18:56:06 +0800 Subject: [PATCH 3/6] modify Signed-off-by: LVB8189 --- interfaces/innerkits/native/file_uri/src/file_uri.cpp | 5 +++-- test/unittest/file_uri_native/file_uri_test.cpp | 9 ++++----- test/unittest/resource/ohos_test.xml | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/interfaces/innerkits/native/file_uri/src/file_uri.cpp b/interfaces/innerkits/native/file_uri/src/file_uri.cpp index 4976dc86f..0562e4bfa 100644 --- a/interfaces/innerkits/native/file_uri/src/file_uri.cpp +++ b/interfaces/innerkits/native/file_uri/src/file_uri.cpp @@ -103,7 +103,7 @@ string FileUri::GetDirectoryUri() bool FileUri::IsFileUri() { struct stat fileInfo; - if (stat(uri_.ToString().c_str(), &fileInfo) == 0) { + if (stat(GetRealPath().c_str(), &fileInfo) == 0) { if (S_ISREG(fileInfo.st_mode)) { LOGD("uri's st_mode is reg"); return true; @@ -111,8 +111,9 @@ bool FileUri::IsFileUri() LOGD("uri's st_mode is dir"); return false; } + } else { + LOGE("fileInfo is error,%{public}s", strerror(errno)); } - LOGE("fileInfo is error"); return false; } diff --git a/test/unittest/file_uri_native/file_uri_test.cpp b/test/unittest/file_uri_native/file_uri_test.cpp index d570f5edb..389e1fd85 100644 --- a/test/unittest/file_uri_native/file_uri_test.cpp +++ b/test/unittest/file_uri_native/file_uri_test.cpp @@ -226,12 +226,11 @@ namespace OHOS::AppFileService::ModuleFileUri { HWTEST_F(FileUriTest, File_uri_GetDirectoryUri_0000, testing::ext::TestSize.Level1) { GTEST_LOG_(INFO) << "FileUriTest-begin File_uri_GetDirectoryUri_0000"; - string fileStr = "/data/storage/el2/base/files/test.txt"; - string uri = "file://" + bundleA + fileStr; - FileUri fileUriObject(uri); - string fileDirectoryUri = "file://" + bundleA + "/data/storage/el2/base/files"; + string fileStr = "/data/test/remote_file_share_test.txt"; + FileUri fileUriObject(fileStr); + string fileDirectoryUri = "file://" + bundleA + "/data/test"; EXPECT_EQ(fileUriObject.GetDirectoryUri(), fileDirectoryUri); - string folderStr = "/data/storage/el2/base/files"; + string folderStr = "/data/test"; string folderUri = "file://" + bundleA + folderStr; FileUri folderUriObject(folderUri); string folderDirectoryUri = "file://" + bundleA + folderStr; diff --git a/test/unittest/resource/ohos_test.xml b/test/unittest/resource/ohos_test.xml index df7e93bd1..87959e606 100644 --- a/test/unittest/resource/ohos_test.xml +++ b/test/unittest/resource/ohos_test.xml @@ -33,6 +33,7 @@ +