diff --git a/frameworks/js/napi/file_access_module/file_info/file_info_entity.h b/frameworks/js/napi/file_access_module/file_info/file_info_entity.h index 3450af5b38a9c545f52486ffeba6d19552c5df4d..c1b5a874e1ac3e23d7decce9134411d63e6c9d22 100644 --- a/frameworks/js/napi/file_access_module/file_info/file_info_entity.h +++ b/frameworks/js/napi/file_access_module/file_info/file_info_entity.h @@ -22,12 +22,11 @@ namespace OHOS { namespace FileAccessFwk { -using namespace DistributedFS; struct FileInfoEntity { FileAccessHelper *fileAccessHelper { nullptr }; FileInfo fileInfo; - FileFilter filter { {}, {}, {}, 0, 0, false, false }; + FileFilter filter { {}, {}, {}, FileFilter::INVALID_SIZE, FileFilter::INVALID_MODIFY_AFTER, false, false }; }; } // namespace FileAccessFwk } // namespace OHOS diff --git a/frameworks/js/napi/file_access_module/file_info/file_iterator_entity.h b/frameworks/js/napi/file_access_module/file_info/file_iterator_entity.h index b945eb29832109c03affd0c6c7e6c2e973233ccb..a3b2fd72fc65f24fa1f62806d999ad4b59715704 100644 --- a/frameworks/js/napi/file_access_module/file_info/file_iterator_entity.h +++ b/frameworks/js/napi/file_access_module/file_info/file_iterator_entity.h @@ -25,7 +25,6 @@ namespace OHOS { namespace FileAccessFwk { -using namespace DistributedFS; constexpr int64_t MAX_COUNT = 1000; // ListFile get file's max count @@ -36,7 +35,7 @@ struct FileIteratorEntity { std::vector fileInfoVec; int64_t offset { 0 }; uint64_t pos { 0 }; - FileFilter filter { {}, {}, {}, 0, 0, false, false }; + FileFilter filter { {}, {}, {}, FileFilter::INVALID_SIZE, FileFilter::INVALID_MODIFY_AFTER, false, false }; int flag { 0 }; }; } // namespace FileAccessFwk diff --git a/frameworks/js/napi/file_access_module/file_info/napi_file_info_exporter.cpp b/frameworks/js/napi/file_access_module/file_info/napi_file_info_exporter.cpp index 676fd18ed77b06dd32213cf39ce4ee7b7e04555e..cc40f38aa00d039f4d4c77ca922fc149f0a77522 100644 --- a/frameworks/js/napi/file_access_module/file_info/napi_file_info_exporter.cpp +++ b/frameworks/js/napi/file_access_module/file_info/napi_file_info_exporter.cpp @@ -87,7 +87,7 @@ napi_value NapiFileInfoExporter::ListFile(napi_env env, napi_callback_info info) return nullptr; } - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, FileFilter::INVALID_SIZE, FileFilter::INVALID_MODIFY_AFTER, false, false); if (funcArg.GetArgc() == NARG_CNT::ONE) { auto ret = GetFileFilterParam(NVal(env, funcArg.GetArg(NARG_POS::FIRST)), filter); if (ret != ERR_OK) { @@ -152,7 +152,7 @@ napi_value NapiFileInfoExporter::ScanFile(napi_env env, napi_callback_info info) return nullptr; } - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, FileFilter::INVALID_SIZE, FileFilter::INVALID_MODIFY_AFTER, false, false); if (funcArg.GetArgc() == NARG_CNT::ONE) { auto ret = GetFileFilterParam(NVal(env, funcArg.GetArg(NARG_POS::FIRST)), filter); if (ret != ERR_OK) { diff --git a/frameworks/js/napi/file_access_module/napi_utils.cpp b/frameworks/js/napi/file_access_module/napi_utils.cpp index e093c886cd0c9daa47699a35ad8b16b5251f7f37..3257720dbd231b8e686987927488f66b50b2f8b6 100644 --- a/frameworks/js/napi/file_access_module/napi_utils.cpp +++ b/frameworks/js/napi/file_access_module/napi_utils.cpp @@ -78,8 +78,6 @@ int GetFileFilterParam(const NVal &argv, FileFilter &filter) } filter.SetSuffix(suffixs); filter.SetHasFilter(true); - } else { - return EINVAL; } if (argv.HasProp("displayName")) { @@ -113,7 +111,10 @@ int GetFileFilterParam(const NVal &argv, FileFilter &filter) HILOG_ERROR("FileFilter get fileSizeOver param fail."); return EINVAL; } - + if (fileSizeOver < 0) { + HILOG_ERROR("FileFilter fileSizeOver need not less than 0."); + return EINVAL; + } filter.SetFileSizeOver(fileSizeOver); filter.SetHasFilter(true); } @@ -125,7 +126,10 @@ int GetFileFilterParam(const NVal &argv, FileFilter &filter) HILOG_ERROR("FileFilter get lastModifiedAfter param fail."); return EINVAL; } - + if (lastModifiedAfter < 0) { + HILOG_ERROR("FileFilter lastModifiedAfter need not less than 0."); + return EINVAL; + } filter.SetLastModifiedAfter(lastModifiedAfter); filter.SetHasFilter(true); } diff --git a/frameworks/js/napi/file_access_module/napi_utils.h b/frameworks/js/napi/file_access_module/napi_utils.h index 345cfb95e90248d08935745bfd609e1cc0bc76bc..619cb1b4e7afe6b84c8c32d934a9fc30b8aea191 100644 --- a/frameworks/js/napi/file_access_module/napi_utils.h +++ b/frameworks/js/napi/file_access_module/napi_utils.h @@ -23,7 +23,6 @@ namespace OHOS { namespace FileAccessFwk { -using namespace DistributedFS; using namespace FileManagement::LibN; int IsDirectory(const int64_t mode); diff --git a/frameworks/js/napi/file_access_module/root_info/napi_root_info_exporter.cpp b/frameworks/js/napi/file_access_module/root_info/napi_root_info_exporter.cpp index f8ee7085ccd37fd310f9a8726d71a9cae02df98e..7cecb8c2ead6958395364a98bb0e53b22214efbb 100644 --- a/frameworks/js/napi/file_access_module/root_info/napi_root_info_exporter.cpp +++ b/frameworks/js/napi/file_access_module/root_info/napi_root_info_exporter.cpp @@ -89,7 +89,7 @@ napi_value NapiRootInfoExporter::ListFile(napi_env env, napi_callback_info info) return nullptr; } - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, FileFilter::INVALID_SIZE, FileFilter::INVALID_MODIFY_AFTER, false, false); if (funcArg.GetArgc() == NARG_CNT::ONE) { auto ret = GetFileFilterParam(NVal(env, funcArg.GetArg(NARG_POS::FIRST)), filter); if (ret != ERR_OK) { @@ -152,7 +152,7 @@ napi_value NapiRootInfoExporter::ScanFile(napi_env env, napi_callback_info info) return nullptr; } - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, FileFilter::INVALID_SIZE, FileFilter::INVALID_MODIFY_AFTER, false, false); if (funcArg.GetArgc() == NARG_CNT::ONE) { auto ret = GetFileFilterParam(NVal(env, funcArg.GetArg(NARG_POS::FIRST)), filter); if (ret != ERR_OK) { diff --git a/interfaces/inner_api/file_access/BUILD.gn b/interfaces/inner_api/file_access/BUILD.gn index a4fd96c16c574b792c779f6af46556f7bcada836..e3350aa7b2954cc9a1eaffbdc08a22334121bcda 100644 --- a/interfaces/inner_api/file_access/BUILD.gn +++ b/interfaces/inner_api/file_access/BUILD.gn @@ -25,6 +25,7 @@ config("ability_config") { "${ability_runtime_kits_path}/appkit/native/app/include", "${ability_runtime_napi_path}/inner/napi_common", "${access_token_path}/interfaces/innerkits/accesstoken/include", + "${user_file_service_path}/interfaces/kits/js/src/common", ] cflags = [] diff --git a/interfaces/inner_api/file_access/include/file_access_ext_ability.h b/interfaces/inner_api/file_access/include/file_access_ext_ability.h index f807b363d240b665dfc2b8664e927e274cc6740f..81c306dbd3f6664513a55200d79e99fab095eac9 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_ability.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_ability.h @@ -28,7 +28,6 @@ class Runtime; } namespace FileAccessFwk { using namespace Media; -using namespace DistributedFS; using namespace AbilityRuntime; class FileAccessExtAbility; using CreatorFunc = std::function& runtime)>; diff --git a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h index b01a81db7124af76d13e714c3e12a95f42257d8e..4a30083ef35d48011cf2596c031f303163bd5852 100644 --- a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h +++ b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h @@ -29,7 +29,6 @@ namespace OHOS { namespace FileAccessFwk { -using namespace DistributedFS; using namespace Media; class IFileAccessExtBase : public IRemoteBroker { diff --git a/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h b/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h index 2b690e94cb000966e48052c20aef39991927f433..79e0eb1e40bdac2a16c507b1763a1d8db8af20be 100644 --- a/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h +++ b/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h @@ -68,6 +68,8 @@ public: int Rename(const Uri &sourceFile, const std::string &displayName, Uri &newFile) override; int ListFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, const FileFilter &filter, std::vector &fileInfoVec) override; + int ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, const FileFilter &filter, + std::vector &fileInfoVec) override; int GetFileInfoFromUri(const Uri &selectFile, FileInfo &fileInfo) override; int GetRoots(std::vector &rootInfoVec) override; int Access(const Uri &uri, bool &isExist) override; @@ -81,7 +83,6 @@ private: InputArgsParser argParser, ResultValueParser retParser); void GetSrcPath(std::string &srcPath); static NativeValue* FuncCallback(NativeEngine *engine, NativeCallbackInfo *info); - JsRuntime &jsRuntime_; std::shared_ptr jsObj_; }; diff --git a/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp b/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp index e80da2eb40718ed35a6eb4b47885c679c88fd61a..2d47f222d78ce46b2163da1c95423bacb81a3735 100644 --- a/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp +++ b/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp @@ -48,6 +48,12 @@ using namespace OHOS::AppExecFwk; using namespace OHOS::AbilityRuntime; using OHOS::Security::AccessToken::AccessTokenKit; +struct FilterParam { + FileInfo fileInfo; + int64_t offset; + int64_t maxCount; +}; + JsFileAccessExtAbility* JsFileAccessExtAbility::Create(const std::unique_ptr &runtime) { return new JsFileAccessExtAbility(static_cast(*runtime)); @@ -699,7 +705,7 @@ static int MakeStringNativeArray(NativeEngine &engine, std::vector } bool ret = false; - for (uint32_t i = 0; i < nativeArray->GetLength(); i++) { + for (uint32_t i = 0; i < inputArray.size(); i++) { NativeValue* nativeValue = engine.CreateString(inputArray[i].c_str(), inputArray[i].length()); if (nativeValue == nullptr) { HILOG_ERROR("Create NativeValue fail."); @@ -718,12 +724,6 @@ static int MakeStringNativeArray(NativeEngine &engine, std::vector static int MakeJsNativeFileFilter(NativeEngine &engine, const FileFilter &filter, NativeValue *nativeFilter) { - nativeFilter = engine.CreateObject(); - if (nativeFilter == nullptr) { - HILOG_ERROR("Create js NativeValue fail."); - return E_GETRESULT; - } - NativeValue *suffixArray = engine.CreateArray(filter.GetSuffix().size()); if (suffixArray == nullptr) { HILOG_ERROR("Create Suffix native array value fail."); @@ -786,7 +786,6 @@ static int MakeJsNativeFileFilter(NativeEngine &engine, const FileFilter &filter HILOG_ERROR("Convert js object fail."); return E_GETRESULT; } - bool ret = objFilter->SetProperty("suffix", suffixArray); ret = ret && objFilter->SetProperty("displayName", displayNameArray); ret = ret && objFilter->SetProperty("mimeType", mimeTypeArray); @@ -801,6 +800,57 @@ static int MakeJsNativeFileFilter(NativeEngine &engine, const FileFilter &filter return ERR_OK; } +static bool BuildFilterParam(NativeEngine &engine, const FileFilter &filter, const FilterParam ¶m, + NativeValue *argv[], size_t &argc) +{ + string uriStr = param.fileInfo.uri; + NativeValue *uri = engine.CreateString(uriStr.c_str(), uriStr.length()); + if (uri == nullptr) { + HILOG_ERROR("create sourceFile uri native js value fail."); + return false; + } + + NativeValue *nativeOffset = engine.CreateNumber(param.offset); + if (nativeOffset == nullptr) { + HILOG_ERROR("create offset native js value fail."); + return false; + } + + NativeValue *nativeMaxCount = engine.CreateNumber(param.maxCount); + if (nativeMaxCount == nullptr) { + HILOG_ERROR("create maxCount native js value fail."); + return false; + } + + NativeValue *nativeFilter = nullptr; + if (filter.GetHasFilter()) { + nativeFilter = engine.CreateObject(); + if (nativeFilter == nullptr) { + HILOG_ERROR("Create js NativeValue fail."); + return false; + } + int ret = MakeJsNativeFileFilter(engine, filter, nativeFilter); + if (ret != ERR_OK) { + HILOG_ERROR("Create js NativeValue fail."); + return false; + } + } else { + nativeFilter = engine.CreateNull(); + if (nativeFilter == nullptr) { + HILOG_ERROR("Create js NativeValue fail."); + return false; + } + } + + argv[ARGC_ZERO] = uri; + argv[ARGC_ONE] = nativeOffset; + argv[ARGC_TWO] = nativeMaxCount; + argv[ARGC_THREE] = nativeFilter; + argc = ARGC_FOUR; + + return true; +} + int JsFileAccessExtAbility::ListFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, const FileFilter &filter, std::vector &fileInfoVec) { @@ -814,46 +864,64 @@ int JsFileAccessExtAbility::ListFile(const FileInfo &fileInfo, const int64_t off auto argParser = [fileInfo, offset, maxCount, filter](NativeEngine &engine, NativeValue *argv[], size_t &argc) -> bool { - NativeValue *uri = engine.CreateString(fileInfo.uri.c_str(), fileInfo.uri.length()); - if (uri == nullptr) { - HILOG_ERROR("create sourceFile uri native js value fail."); - return false; - } + struct FilterParam param; + param.fileInfo = fileInfo; + param.offset = offset; + param.maxCount = maxCount; - NativeValue *nativeOffset = engine.CreateNumber(offset); - if (nativeOffset == nullptr) { - HILOG_ERROR("create offset native js value fail."); - return false; + return BuildFilterParam(engine, filter, param, argv, argc); + }; + auto retParser = [value](NativeEngine &engine, NativeValue *result) -> bool { + Value> fileInfo; + bool ret = ParserListFileJsResult(engine, result, fileInfo); + if (!ret) { + HILOG_ERROR("Parser js value fail."); + return ret; } - NativeValue *nativeMaxCount = engine.CreateNumber(maxCount); - if (nativeMaxCount == nullptr) { - HILOG_ERROR("create maxCount native js value fail."); - return false; - } + *value = std::move(fileInfo); + return true; + }; - NativeValue* nativeFilter = nullptr; - if (filter.GetHasFilter()) { - int ret = MakeJsNativeFileFilter(engine, filter, nativeFilter); - if (ret != ERR_OK) { - HILOG_ERROR("Create js NativeValue fail."); - return ret; - } - } else { - nativeFilter = engine.CreateNull(); - if (nativeFilter == nullptr) { - HILOG_ERROR("Create js NativeValue fail."); - return E_GETRESULT; - } - } + auto errCode = CallJsMethod("listFile", jsRuntime_, jsObj_.get(), argParser, retParser); + if (errCode != ERR_OK) { + HILOG_ERROR("CallJsMethod error, code:%{public}d.", errCode); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return errCode; + } - argv[ARGC_ZERO] = uri; - argv[ARGC_ONE] = nativeOffset; - argv[ARGC_TWO] = nativeMaxCount; - argv[ARGC_THREE] = nativeFilter; - argc = ARGC_FOUR; - return true; + if (value->code != ERR_OK) { + HILOG_ERROR("fileio fail."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return value->code; + } + + fileInfoVec = std::move(value->data); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ERR_OK; +} + +int JsFileAccessExtAbility::ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, + const FileFilter &filter, std::vector &fileInfoVec) +{ + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "ScanFile"); + auto value = std::make_shared>>(); + if (value == nullptr) { + HILOG_ERROR("ScanFile value is nullptr."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_GETRESULT; + } + + auto argParser = + [fileInfo, offset, maxCount, filter](NativeEngine &engine, NativeValue *argv[], size_t &argc) -> bool { + struct FilterParam param; + param.fileInfo = fileInfo; + param.offset = offset; + param.maxCount = maxCount; + + return BuildFilterParam(engine, filter, param, argv, argc); }; + auto retParser = [value](NativeEngine &engine, NativeValue *result) -> bool { Value> fileInfo; bool ret = ParserListFileJsResult(engine, result, fileInfo); @@ -866,7 +934,7 @@ int JsFileAccessExtAbility::ListFile(const FileInfo &fileInfo, const int64_t off return true; }; - auto errCode = CallJsMethod("listFile", jsRuntime_, jsObj_.get(), argParser, retParser); + auto errCode = CallJsMethod("scanFile", jsRuntime_, jsObj_.get(), argParser, retParser); if (errCode != ERR_OK) { HILOG_ERROR("CallJsMethod error, code:%{public}d.", errCode); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); diff --git a/interfaces/kits/js/src/common/file_filter.h b/interfaces/kits/js/src/common/file_filter.h index 694b6f0d20f78718753955e42f1e80c5b942dfbd..3fedfe3a5ceb1d7c2399bb1687a2cabea2f2d0bd 100644 --- a/interfaces/kits/js/src/common/file_filter.h +++ b/interfaces/kits/js/src/common/file_filter.h @@ -21,7 +21,7 @@ #include "parcel.h" namespace OHOS { -namespace DistributedFS { +namespace FileAccessFwk { class FileFilter : public Parcelable { public: FileFilter() = default; @@ -32,7 +32,7 @@ public: double lastModifiedAfter, bool excludeMedia, bool hasFilter) : suffix_(suffix), displayName_(displayName), mimeType_(mimeType), fileSizeOver_(fileSizeOver), lastModifiedAfter_(lastModifiedAfter), excludeMedia_(excludeMedia), hasFilter_(hasFilter) {} - explicit FileFilter(std::vector suffix): suffix_(suffix) {} + FileFilter(const FileFilter &filter) = default; FileFilter &operator=(const FileFilter& filter) = default; @@ -160,15 +160,18 @@ public: return true; } + static const int32_t INVALID_SIZE = -1; + static const int32_t INVALID_MODIFY_AFTER = -1; + private: std::vector suffix_ = std::vector(); std::vector displayName_ = std::vector(); std::vector mimeType_ = std::vector(); - int64_t fileSizeOver_ = 0; - double lastModifiedAfter_ = 0; + int64_t fileSizeOver_ = -1; + double lastModifiedAfter_ = -1; bool excludeMedia_ = false; bool hasFilter_ = false; }; -} // namespace DistributedFS +} // namespace FileAccessFwk } // namespace OHOS #endif // FILE_FILTER_H \ No newline at end of file diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/Common.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/Common.ts new file mode 100644 index 0000000000000000000000000000000000000000..162bd8818378b11e7aa55ace7af9cd3e563b7abf --- /dev/null +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/Common.ts @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2022 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. + */ +const BUNDLE_NAME = 'com.ohos.UserFile.ExternalFileManager'; +// @ts-nocheck +function getPath(uri): string { + let sep = '://'; + let arr = uri.split(sep); + let minLength = 2; + if (arr.length < minLength) { + return uri; + } + let path = uri.replace(arr[0] + sep, ''); + if (arr[1].indexOf('/') > 0) { + path = path.replace(arr[1].split('/')[0], ''); + } + path = path.replace('/' + BUNDLE_NAME, ''); + if (path.charAt(path.length - 1) === '/') { + path = path.substr(0, path.length - 1); + } + return path; +} + +function genNewFileUri(uri, displayName): string { + let newFileUri = uri; + if (uri.charAt(uri.length - 1) === '/') { + newFileUri += displayName; + } else { + newFileUri += '/' + displayName; + } + return newFileUri; +} +export { getPath, genNewFileUri, BUNDLE_NAME }; \ No newline at end of file diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 24284248546a2118204b52753f554d51a9c5268e..c47fb6f457a8b7c651df1c5441f72f687174ae2c 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -17,10 +17,11 @@ import Extension from '@ohos.application.FileAccessExtensionAbility'; import fs from '@ohos.file.fs'; import fileExtensionInfo from '@ohos.file.fileExtensionInfo'; import hilog from '@ohos.hilog'; +import { getFileInfos } from './ListScanFileInfo' +import { getPath, genNewFileUri, BUNDLE_NAME } from './Common' const deviceFlag = fileExtensionInfo.DeviceFlag; const documentFlag = fileExtensionInfo.DocumentFlag; const deviceType = fileExtensionInfo.DeviceType; -const BUNDLE_NAME = 'com.ohos.UserFile.ExternalFileManager'; const DEFAULT_MODE = 0; const FILE_PREFIX_NAME = 'file://'; const DOMAIN_CODE = 0x0001; @@ -107,34 +108,6 @@ export default class FileExtAbility extends Extension { } } - getPath(uri): string { - let sep = '://'; - let arr = uri.split(sep); - let minLength = 2; - if (arr.length < minLength) { - return uri; - } - let path = uri.replace(arr[0] + sep, ''); - if (arr[1].indexOf('/') > 0) { - path = path.replace(arr[1].split('/')[0], ''); - } - path = path.replace('/' + BUNDLE_NAME, ''); - if (path.charAt(path.length - 1) === '/') { - path = path.substr(0, path.length - 1); - } - return path; - } - - genNewFileUri(uri, displayName) { - let newFileUri = uri; - if (uri.charAt(uri.length - 1) === '/') { - newFileUri += displayName; - } else { - newFileUri += '/' + displayName; - } - return newFileUri; - } - getFileName(uri): string { let arr = uri.split('/'); let name = arr.pop(); @@ -214,7 +187,7 @@ export default class FileExtAbility extends Extension { }; } try { - let path = this.getPath(sourceFileUri); + let path = getPath(sourceFileUri); let file = fs.openSync(path, flags); return { fd: file.fd, @@ -244,14 +217,14 @@ export default class FileExtAbility extends Extension { }; } try { - let newFileUri = this.genNewFileUri(parentUri, displayName); + let newFileUri = genNewFileUri(parentUri, displayName); if (this.access(newFileUri).isExist) { return { uri: '', code: E_EXIST, }; } - let path = this.getPath(newFileUri); + let path = getPath(newFileUri); let file = fs.openSync(path, fs.OpenMode.CREATE); fs.closeSync(file); newFileUri = encodeURI(newFileUri); @@ -283,8 +256,8 @@ export default class FileExtAbility extends Extension { }; } try { - let newFileUri = this.genNewFileUri(parentUri, displayName); - let path = this.getPath(newFileUri); + let newFileUri = genNewFileUri(parentUri, displayName); + let path = getPath(newFileUri); fs.mkdirSync(path); newFileUri = encodeURI(newFileUri); @@ -312,7 +285,7 @@ export default class FileExtAbility extends Extension { if (!this.checkUri(selectFileUri)) { return E_URIS; } - let path = this.getPath(selectFileUri); + let path = getPath(selectFileUri); let code = ERR_OK; try { let stat = fs.statSync(path); @@ -348,7 +321,6 @@ export default class FileExtAbility extends Extension { code: E_URIS, }; } - if (!this.checkUri(sourceFileUri) || !this.checkUri(targetParentUri)) { return { uri: '', @@ -356,9 +328,9 @@ export default class FileExtAbility extends Extension { }; } let displayName = this.getFileName(sourceFileUri); - let newFileUri = this.genNewFileUri(targetParentUri, displayName); - let oldPath = this.getPath(sourceFileUri); - let newPath = this.getPath(newFileUri); + let newFileUri = genNewFileUri(targetParentUri, displayName); + let oldPath = getPath(sourceFileUri); + let newPath = getPath(newFileUri); newFileUri = this.encode(newFileUri); if (newFileUri === '') { return { @@ -366,7 +338,6 @@ export default class FileExtAbility extends Extension { code: E_URIS, }; } - if (oldPath === newPath) { // move to the same directory return { @@ -389,7 +360,7 @@ export default class FileExtAbility extends Extension { code: E_GETRESULT, }; } - let stat = fs.statSync(this.getPath(targetParentUri)); + let stat = fs.statSync(getPath(targetParentUri)); if (!stat || !stat.isDirectory()) { return { uri: '', @@ -442,8 +413,8 @@ export default class FileExtAbility extends Extension { } try { let newFileUri = this.renameUri(sourceFileUri, displayName); - let oldPath = this.getPath(sourceFileUri); - let newPath = this.getPath(newFileUri); + let oldPath = getPath(sourceFileUri); + let newPath = getPath(newFileUri); fs.renameSync(oldPath, newPath); newFileUri = encodeURI(newFileUri); return { @@ -476,7 +447,7 @@ export default class FileExtAbility extends Extension { } let isAccess = false; try { - let path = this.getPath(sourceFileUri); + let path = getPath(sourceFileUri); isAccess = fs.accessSync(path); if (!isAccess) { return { @@ -497,68 +468,45 @@ export default class FileExtAbility extends Extension { }; } - listFile(sourceFileUri, offset, count, filter) { + listFile(sourceFileUri, offset, count, filter) : {Array({string, string, number, number, number, string}), number} { + hilog.info(DOMAIN_CODE, TAG, 'listFile 1'); sourceFileUri = this.decode(sourceFileUri); + hilog.info(DOMAIN_CODE, TAG, 'listFile 2'); if (sourceFileUri === '') { + hilog.info(DOMAIN_CODE, TAG, 'listFile 3'); return { uri: '', code: E_URIS, }; } - + hilog.info(DOMAIN_CODE, TAG, 'listFile 4'); if (!this.checkUri(sourceFileUri)) { + hilog.info(DOMAIN_CODE, TAG, 'listFile 5'); return { infos: [], code: E_URIS, }; } - let infos = []; - let path = this.getPath(sourceFileUri); - let statPath = fs.statSync(path); - if (!statPath.isDirectory()) { + hilog.info(DOMAIN_CODE, TAG, 'listFile 6'); + return getFileInfos(sourceFileUri, offset, count, filter, false); + } + + scanFile(sourceFileUri, offset, count, filter) : {Array({string, string, number, number, number, string}), number} { + sourceFileUri = this.decode(sourceFileUri); + if (sourceFileUri === '') { return { - infos: [], - code: E_GETRESULT, + uri: '', + code: E_URIS, }; } - try { - let fileName = fs.listFileSync(path); - for (let i = 0; i < fileName.length; i++) { - if (offset > i) { - continue; - } - if (i === (offset + count)) { - break; - } - let mode = documentFlag.SUPPORTS_READ | documentFlag.SUPPORTS_WRITE; - let stat = fs.statSync(path + '/' + fileName[i]); - if (stat.isDirectory()) { - mode |= documentFlag.REPRESENTS_DIR; - } else { - mode |= documentFlag.REPRESENTS_FILE; - } - let newFileUri = this.genNewFileUri(sourceFileUri, fileName[i]); - newFileUri = encodeURI(newFileUri); - infos.push({ - uri: newFileUri, - fileName: fileName[i], - mode: mode, - size: stat.size, - mtime: stat.mtime, - mimeType: '', - }); - } - } catch (e) { - hilog.error(DOMAIN_CODE, TAG, 'listFile error ' + e.message); + if (!this.checkUri(sourceFileUri)) { return { infos: [], - code: E_GETRESULT, + code: E_URIS, }; } - return { - infos: infos, - code: ERR_OK, - }; + + return getFileInfos(sourceFileUri, offset, count, filter, true); } getFileInfoFromUri(selectFileUri) { @@ -578,7 +526,7 @@ export default class FileExtAbility extends Extension { } let fileInfo = {}; try { - let path = this.getPath(selectFileUri); + let path = getPath(selectFileUri); let fileName = this.getFileName(path); let stat = fs.statSync(path); let mode = documentFlag.SUPPORTS_READ | documentFlag.SUPPORTS_WRITE; @@ -705,7 +653,7 @@ export default class FileExtAbility extends Extension { let queryResults = []; try { - let dirPath = this.getPath(uri); + let dirPath = getPath(uri); let stat = fs.statSync(dirPath); for (let index in columns) { let column = columns[index]; @@ -738,7 +686,7 @@ export default class FileExtAbility extends Extension { if (!this.checkUri(uri)) { return E_URIS; } - let watchPath = this.getPath(uri); + let watchPath = getPath(uri); try { let watcher = fs.createWatcher(watchPath, CREATE_EVENT_CODE | DELETE_EVENT_CODE | UPDATE_EVENT_CODE, (data) => { try { diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/ListScanFileInfo.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/ListScanFileInfo.ts new file mode 100644 index 0000000000000000000000000000000000000000..c193a097d1fd6c99b35a63f97e3282aa9de458ee --- /dev/null +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/ListScanFileInfo.ts @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2022 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. + */ +// @ts-nocheck +import hilog from '@ohos.hilog'; +import fs from '@ohos.file.fs'; +import fileExtensionInfo from '@ohos.file.fileExtensionInfo'; +import { getPath, genNewFileUri } from './Common' + +const documentFlag = fileExtensionInfo.DocumentFlag; +const DOMAIN_CODE = 0x0001; +const TAG = 'ExternalFileManager'; +const ERR_OK = 0; +const E_GETRESULT = 14300004; + +function hasFilter(filter) : boolean { + if (filter === null) { + return false; + } + let displayNameArray = filter.displayName; + if (displayNameArray !== null && displayNameArray.length > 0) { + return true; + } + let suffixArray = filter.suffix; + if (suffixArray !== null && suffixArray.length > 0) { + return true; + } + let lastModifiedAfter = filter.lastModifiedAfter; + if (lastModifiedAfter !== null && lastModifiedAfter >= 0) { + return true; + } + let fileSizeOver = filter.fileSizeOver; + if (fileSizeOver !== null && fileSizeOver >= 0) { + return true; + } + return false; +} + +function buildDisplayName(displayNameArray) : Array[string] { + let displayNames : string[] = []; + for (let i = 0; i < displayNameArray.length; i++) { + if (displayNameArray[i].lastIndexOf('*') === -1) { + let name = '*' + displayNameArray[i]; + displayNames.push(name); + } else { + displayNames.push(displayNameArray[i]); + } + } + return displayNames; +} + +function buildFilterOptions(filter, listNum, recursion) : {boolean, number, object} { + let optionFilter = {}; + if (filter !== null) { + let suffixArray = filter.suffix; + if (suffixArray !== null && suffixArray.length > 0) { + optionFilter.suffix = suffixArray; + } + let displayNameArray = filter.displayName; + if (displayNameArray !== null && displayNameArray.length > 0) { + optionFilter.displayName = buildDisplayName(displayNameArray); + } + let fileSizeOver = filter.fileSizeOver; + if (fileSizeOver !== null && fileSizeOver >= 0) { + optionFilter.fileSizeOver = fileSizeOver; + } + let lastModifiedAfter = filter.lastModifiedAfter; + if (lastModifiedAfter !== null && lastModifiedAfter >= 0) { + optionFilter.lastModifiedAfter = lastModifiedAfter; + } + let mimeType = filter.mimeType; + if (mimeType !== null && mimeType.length > 0) { + hilog.error(DOMAIN_CODE, TAG, 'mimeType is not supported as a filter condition'); + } + let excludeMedia = filter.excludeMedia; + if (excludeMedia !== null && excludeMedia.length > 0) { + hilog.error(DOMAIN_CODE, TAG, 'excludeMedia is not supported as a filter condition'); + } + } + let options = { + 'recursion': recursion, + 'listNum': listNum, + 'filter': optionFilter, + }; + return options; +} + +function buildNoFilterOptions(listNum, recursion) : {boolean, number} { + let options = { + 'recursion': recursion, + 'listNum': listNum, + }; + return options; +} + +function getFileInfos(sourceFileUri, offset, count, filter, recursion) : + {Array({string, string, number, number, number, string}), number} { + let infos = []; + let path = getPath(sourceFileUri); + let statPath = fs.statSync(path); + if (!statPath.isDirectory()) { + return { + infos: [], + code: E_GETRESULT, + }; + } + try { + let options; + let listNum = offset + count; + if (hasFilter(filter)) { + options = buildFilterOptions(filter, listNum, recursion); + } else { + options = buildNoFilterOptions(listNum, recursion); + } + let fileNameList = fs.listFileSync(path, options); + for (let i = 0; i < fileNameList.length; i++) { + if (offset > i) { + continue; + } + if (i === listNum) { + break; + } + let mode = documentFlag.SUPPORTS_READ | documentFlag.SUPPORTS_WRITE; + let stat = fs.statSync(path + '/' + fileNameList[i]); + if (stat.isDirectory()) { + mode |= documentFlag.REPRESENTS_DIR; + } else { + mode |= documentFlag.REPRESENTS_FILE; + } + let newFileUri = genNewFileUri(sourceFileUri, fileNameList[i]); + newFileUri = encodeURI(newFileUri); + infos.push({ + uri: newFileUri, + fileName: fileNameList[i], + mode: mode, + size: stat.size, + mtime: stat.mtime, + mimeType: '', + }); + } + } catch (e) { + hilog.error(DOMAIN_CODE, TAG, 'getFileInfos error ' + e.message); + return { + infos: [], + code: E_GETRESULT, + }; + } + return { + infos: infos, + code: ERR_OK, + }; +} +export { getFileInfos }; \ No newline at end of file diff --git a/test/unittest/external_file_access_test.cpp b/test/unittest/external_file_access_test.cpp index 43b1ef943d053548ff6f7cfefde96168fc71dbb5..b781c70e0505ecd291946619d5152c13c9f5258b 100644 --- a/test/unittest/external_file_access_test.cpp +++ b/test/unittest/external_file_access_test.cpp @@ -44,6 +44,10 @@ int g_num = 0; const int UID_TRANSFORM_TMP = 20000000; const int UID_DEFAULT = 0; shared_ptr g_context = nullptr; +const int FILE_COUNT_2 = 2; +const int FILE_COUNT_4 = 4; +const int FILE_COUNT_5 = 5; +const int FILE_COUNT_6 = 6; void SetNativeToken() { @@ -2688,6 +2692,858 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0006, testing::e GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0006"; } + +static void WriteData(Uri &uri) +{ + int fd = -1; + std::string buff = "extenal_file_access_test"; + int result = g_fah->OpenFile(uri, WRITE_READ, fd); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + ssize_t fileSize = write(fd, buff.c_str(), buff.size()); + EXPECT_EQ(fileSize, buff.size()); + close(fd); +} + +static double GetTime() +{ + struct timespec t{}; + t.tv_sec = 0; + t.tv_nsec = 0; + clock_gettime(CLOCK_REALTIME, &t); + return static_cast(t.tv_sec); +} + +static void InitListFile7(Uri newDirUriTest) +{ + Uri testUri1(""); + int result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0007.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0007.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0007.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0007.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0007_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +static void ListFileFilter7(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 4; + int64_t maxCount = 1; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 1); +} + +/** + * @tc.number: user_file_service_external_file_access_ListFile_0007 + * @tc.name: external_file_access_ListFile_0007 + * @tc.desc: Test function of ListFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I79CSX + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0007, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0007"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitListFile7(newDirUriTest); + ListFileFilter7(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ListFile_0007 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0007"; +} + +static void InitListFile8(Uri newDirUriTest) +{ + Uri testUri1(""); + int result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0008.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0008.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0008.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0008.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0008_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri folderUri(""); + result = g_fah->Mkdir(newDirUriTest, "test", folderUri); + Uri testUri6(""); + result = g_fah->CreateFile(folderUri, "external_file_access_ListFile_01_0008_02.docx", testUri6); +} + +static void ListFileFilter8(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({}, {}, {}, -1, 0, false, true); + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_6); +} + +/** + * @tc.number: user_file_service_external_file_access_ListFile_0008 + * @tc.name: external_file_access_ListFile_0008 + * @tc.desc: Test function of ListFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I79CSX + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0008, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0008"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitListFile8(newDirUriTest); + ListFileFilter8(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ListFile_0008 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0008"; +} + +static void InitListFile9(Uri newDirUriTest) +{ + Uri testUri1(""); + int result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0009.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0009.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0009.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0009.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0009_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri folderUri(""); + result = g_fah->Mkdir(newDirUriTest, "test", folderUri); + Uri testUri6(""); + result = g_fah->CreateFile(folderUri, "external_file_access_ListFile_01_0009_02.docx", testUri6); +} + +static void ListFileFilter9(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter; + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_6); +} + +/** + * @tc.number: user_file_service_external_file_access_ListFile_0009 + * @tc.name: external_file_access_ListFile_0009 + * @tc.desc: Test function of ListFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I79CSX + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0009, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0008"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitListFile9(newDirUriTest); + ListFileFilter9(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ListFile_0009 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0009"; +} + +static void initListFile10(Uri newDirUriTest) +{ + Uri testUri1(""); + int result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0010.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0010.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0010.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0010.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + WriteData(testUri4); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0010_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +static void ListFileFilter10(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5); + + FileFilter filter1({".txt", ".docx"}, {"0010.txt", "0010.docx"}, {}, -1, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); + + FileFilter filter2({".txt", ".docx"}, {"0010.txt", "0010.docx"}, {}, 0, 0, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 1); + + FileFilter filter3({".txt", ".docx"}, {"0010.txt", "0010.docx"}, {}, -1, 1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); + + double time = GetTime(); + FileFilter filter4({".txt", ".docx"}, {"0010.txt", "0010.docx"}, {}, -1, time, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter4, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); +} + +/** + * @tc.number: user_file_service_external_file_access_ListFile_0010 + * @tc.name: external_file_access_ListFile_0010 + * @tc.desc: Test function of ListFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I79CSX + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0010, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0010"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + initListFile10(newDirUriTest); + ListFileFilter10(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ListFile_0010 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0010"; +} + +static void initListFile11(Uri newDirUriTest) +{ + Uri testUri1(""); + int result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_测试.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_测试.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_测试.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_测试.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + WriteData(testUri4); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_测试_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri folderUri(""); + result = g_fah->Mkdir(newDirUriTest, "测试", folderUri); + Uri testUri6(""); + result = g_fah->CreateFile(folderUri, "external_file_access_ListFile_01_测试_02.docx", testUri6); +} + +static void ListFileFilter11(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_6); + + FileFilter filter1({".txt", ".docx"}, {"测试.txt", "测试.docx"}, {}, -1, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); + + FileFilter filter2({".txt", ".docx"}, {"测试.txt", "测试.docx"}, {}, 0, 0, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 1); + + FileFilter filter3({".txt", ".docx"}, {"测试.txt", "测试.docx"}, {}, -1, 1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); + + double time = GetTime(); + FileFilter filter4({".txt", ".docx"}, {"测试.txt", "测试.docx"}, {}, -1, time, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter4, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); +} + +/** + * @tc.number: user_file_service_external_file_access_ListFile_0011 + * @tc.name: external_file_access_ListFile_0011 + * @tc.desc: Test function of ListFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I79CSX + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0011, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0011"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "测试", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + initListFile11(newDirUriTest); + ListFileFilter11(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ListFile_0011 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0011"; +} + +static void InitScanFile0(Uri newDirUriTest) +{ + Uri forlderUriTest(""); + int result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0000.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0000.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri3(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + WriteData(testUri4); + Uri testUri5(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +static void ScanFileFilter0(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5); + + FileFilter filter1({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, -1, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); + + FileFilter filter2({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, 0, 0, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter2, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 1); + + FileFilter filter3({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, 1, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter3, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); + + double time = GetTime(); + FileFilter filter4({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, time, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter4, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); +} + +/** + * @tc.number: user_file_service_external_file_access_ScanFile_0000 + * @tc.name: external_file_access_ScanFile_0000 + * @tc.desc: Test function of ScanFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I79CSX + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0000, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ScanFile_0000"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitScanFile0(newDirUriTest); + ScanFileFilter0(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ScanFile_0000 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0000"; +} + +static void InitScanFile1(Uri newDirUriTest) +{ + Uri forlderUriTest(""); + int result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0001.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0001.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri3(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0001.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0001.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0001_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +static void ScanFileFilter1(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter; + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5); +} + +/** + * @tc.number: user_file_service_external_file_access_ScanFile_0001 + * @tc.name: external_file_access_ScanFile_0001 + * @tc.desc: Test function of ScanFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I79CSX + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0001, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ScanFile_0001"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitScanFile1(newDirUriTest); + ScanFileFilter1(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ScanFile_0001 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0001"; +} + +static void InitScanFile2(Uri newDirUriTest) +{ + Uri forlderUriTest(""); + int result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0002.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0002.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri3(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0002.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0002.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0002_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +static void ScanFileFilter2(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 3; + int64_t maxCount = 3; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_2); +} + +/** + * @tc.number: user_file_service_external_file_access_ScanFile_0002 + * @tc.name: external_file_access_ScanFile_0002 + * @tc.desc: Test function of ScanFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I79CSX + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0002, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ScanFile_0002"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitScanFile2(newDirUriTest); + ScanFileFilter2(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ScanFile_0002 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0002"; +} + +static void InitScanFile3(Uri newDirUriTest) +{ + Uri testUri1(""); + int result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0003.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0003.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_01_0003.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_01_0003.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_01_0003_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri folderUri(""); + result = g_fah->Mkdir(newDirUriTest, "test", folderUri); + Uri testUri6(""); + result = g_fah->CreateFile(folderUri, "external_file_access_ScanFile_01_0003_02.docx", testUri6); +} + +static void ScanFileFilter3(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({}, {}, {}, -1, 0, false, true); + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_6); +} + +/** + * @tc.number: user_file_service_external_file_access_ScanFile_0003 + * @tc.name: external_file_access_ScanFile_0003 + * @tc.desc: Test function of ScanFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I79CSX + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0003, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ScanFile_0003"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitScanFile3(newDirUriTest); + ScanFileFilter3(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ScanFile_0003 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0003"; +} + +static void InitScanFile4(Uri newDirUriTest) +{ + Uri testUri1(""); + int result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0004.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0004.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_01_0004.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_01_0004.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_01_0004_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri folderUri(""); + result = g_fah->Mkdir(newDirUriTest, "test", folderUri); + Uri testUri6(""); + result = g_fah->CreateFile(folderUri, "external_file_access_ScanFile_01_0004_02.docx", testUri6); +} + +static void ScanFileFilter4(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter; + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_6); +} + +/** + * @tc.number: user_file_service_external_file_access_ScanFile_0004 + * @tc.name: external_file_access_ScanFile_0004 + * @tc.desc: Test function of ScanFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I79CSX + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0004, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin user_file_service_external_file_access_ScanFile_0004"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitScanFile4(newDirUriTest); + ScanFileFilter4(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "user_file_service_external_file_access_ScanFile_0004 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end user_file_service_external_file_access_ScanFile_0004"; +} + +static void InitScanFile5(Uri newDirUriTest) +{ + Uri testUri1(""); + int result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_测试.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_测试.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_01_测试.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_01_测试.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_01_测试_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri folderUri(""); + result = g_fah->Mkdir(newDirUriTest, "测试", folderUri); + Uri testUri6(""); + result = g_fah->CreateFile(folderUri, "external_file_access_ScanFile_01_测试.docx", testUri6); +} + +static void ScanFileFilter5(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {"测试.txt", "测试.docx"}, {}, -1, -1, false, true); + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5); +} + +/** + * @tc.number: user_file_service_external_file_access_ScanFile_0005 + * @tc.name: external_file_access_ScanFile_0005 + * @tc.desc: Test function of ScanFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I79CSX + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0005, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin user_file_service_external_file_access_ScanFile_0005"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitScanFile5(newDirUriTest); + ScanFileFilter5(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "user_file_service_external_file_access_ScanFile_0005 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end user_file_service_external_file_access_ScanFile_0005"; +} + /** * @tc.number: user_file_service_external_file_access_GetRoots_0000 * @tc.name: external_file_access_GetRoots_0000 diff --git a/test/unittest/medialibrary_file_access_test.cpp b/test/unittest/medialibrary_file_access_test.cpp index a6b2a61bb07d923466197abed14b40320ff34154..9d64a54f2e24df82b6a7b04de551eb30a82bc856 100644 --- a/test/unittest/medialibrary_file_access_test.cpp +++ b/test/unittest/medialibrary_file_access_test.cpp @@ -43,7 +43,10 @@ shared_ptr g_fah = nullptr; Uri g_newDirUri(""); const int UID_TRANSFORM_TMP = 20000000; const int UID_DEFAULT = 0; - +const int FILE_COUNT_1 = 1; +const int FILE_COUNT_2 = 2; +const int FILE_COUNT_4 = 4; +const int FILE_COUNT_5 = 5; void SetNativeToken() { uint64_t tokenId; @@ -2086,7 +2089,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0001, testing:: int64_t offset = 0; int64_t maxCount = 1000; vector fileInfoVec; - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, -1, -1, false, false); int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), OHOS::FileAccessFwk::ERR_OK); @@ -2122,7 +2125,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0002, testing:: int64_t offset = 0; int64_t maxCount = 1000; vector fileInfoVec; - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, -1, -1, false, false); result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), OHOS::FileAccessFwk::ERR_OK); @@ -2192,7 +2195,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0004, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".txt"}, {}, {}, 0, 0, false, true); + FileFilter filter({".txt"}, {}, {}, -1, 1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 1); @@ -2247,7 +2250,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0005, testing:: int64_t maxCount = 1000; std::vector fileInfoVec; g_num = 0; - FileFilter filter({".txt"}, {}, {}, 0, 0, false, true); + FileFilter filter({".txt"}, {}, {}, -1, -1, false, true); for (int j = 0; j < INIT_THREADS_NUMBER; j++) { std::thread execthread(ListFileTdd, g_fah, fileInfo, offset, maxCount, filter, fileInfoVec); execthread.join(); @@ -2261,6 +2264,131 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0005, testing:: GTEST_LOG_(INFO) << "FileAccessHelperTest-end medialibrary_file_access_ListFile_0005"; } +static double GetTime() +{ + struct timespec t{}; + t.tv_sec = 0; + t.tv_nsec = 0; + clock_gettime(CLOCK_REALTIME, &t); + return static_cast(t.tv_sec); +} + +static void InitListFile6(Uri newDirUriTest) +{ + Uri testUri1(""); + int result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_0006.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_0006.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_01_0006.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_01_0006.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_01_0006_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +static void ListFileFilter6(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5); + + FileFilter filter1({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); + + FileFilter filter3({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, 1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); + + double time = GetTime(); + FileFilter filter4({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, time, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter4, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); +} + +/** + * @tc.number: user_file_service_medialibrary_file_access_ListFile_0006 + * @tc.name: medialibrary_file_access_ListFile_0006 + * @tc.desc: Test function of ListFile interface for ERROR which add filter. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I79CSX + */ +HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0006, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileAccessHelperTest-begin medialibrary_file_access_ListFile_0006"; + try { + Uri newDirUriTest(""); + int result = g_fah->Mkdir(g_newDirUri, "ListFile0006", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitListFile6(newDirUriTest); + ListFileFilter6(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "medialibrary_file_access_ListFile_0006 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileAccessHelperTest-end medialibrary_file_access_ListFile_0006"; +} + +/** + * @tc.number: user_file_service_medialibrary_file_access_ListFile_0007 + * @tc.name: medialibrary_file_access_ListFile_0007 + * @tc.desc: Test function of ListFile interface for ERROR which add filter. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I79CSX + */ +HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0007, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileAccessHelperTest-begin medialibrary_file_access_ListFile_0007"; + try { + FileAccessFwk::FileInfo fileInfo; + std::string relativePath = "Documents/ListTest"; + int ret = g_fah->GetFileInfoFromRelativePath(relativePath, fileInfo); + EXPECT_EQ(ret, OHOS::FileAccessFwk::ERR_OK); + Uri testUri(fileInfo.uri); + + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt"}, {}, {}, -1, -1, false, true); + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_2); + + FileFilter filter1({".txt"}, {}, {}, 0, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_1); + + result = g_fah->Delete(testUri); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "medialibrary_file_access_ListFile_0007 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileAccessHelperTest-end medialibrary_file_access_ListFile_0007"; +} + /** * @tc.number: user_file_service_medialibrary_file_access_ScanFile_0000 * @tc.name: medialibrary_file_access_ScanFile_0000 @@ -2287,7 +2415,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0000, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".q1w2e3r4"}, {}, {}, 0, 0, false, true); + FileFilter filter({".q1w2e3r4"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_GE(fileInfoVec.size(), 1); @@ -2326,7 +2454,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0001, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, -1, -1, false, false); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_GE(fileInfoVec.size(), 2); @@ -2367,11 +2495,11 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0002, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".q1w2e3r4"}, {}, {}, 0, 0, false, true); + FileFilter filter({".q1w2e3r4"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 1); - FileFilter filter1({".q1w2e3r4", ".txt"}, {}, {}, 0, 0, false, true); + FileFilter filter1({".q1w2e3r4", ".txt"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter1, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 2); @@ -2408,7 +2536,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0003, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".q1w2e3r4"}, {}, {}, 0, 0, false, true); + FileFilter filter({".q1w2e3r4"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 1); @@ -2462,7 +2590,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0004, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".q1w2e3r4"}, {}, {}, 0, 0, false, true); + FileFilter filter({".q1w2e3r4"}, {}, {}, -1, -1, false, true); g_num = 0; for (int j = 0; j < INIT_THREADS_NUMBER; j++) { std::thread execthread(ScanFileTdd, fileInfo, offset, maxCount, filter, fileInfoVec); @@ -2542,7 +2670,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0005, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".q1w2e3r4"}, {}, {}, 0, 0, false, true); + FileFilter filter({".q1w2e3r4"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::E_IPCS); EXPECT_EQ(fileInfoVec.size(), 0); @@ -2555,6 +2683,46 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0005, testing:: GTEST_LOG_(INFO) << "FileAccessHelperTest-end medialibrary_file_access_ScanFile_0005"; } +/** + * @tc.number: user_file_service_medialibrary_file_access_ScanFile_0006 + * @tc.name: medialibrary_file_access_ScanFile_0006 + * @tc.desc: Test function of ListFile interface for ERROR which add filter. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I79CSX + */ +HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0006, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileAccessHelperTest-begin medialibrary_file_access_ScanFile_0006"; + try { + FileAccessFwk::FileInfo fileInfo; + std::string relativePath = "Documents/ScanTest"; + int ret = g_fah->GetFileInfoFromRelativePath(relativePath, fileInfo); + EXPECT_EQ(ret, OHOS::FileAccessFwk::ERR_OK); + Uri testUri(fileInfo.uri); + + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt"}, {}, {}, -1, -1, false, true); + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_2); + + FileFilter filter1({".txt"}, {}, {}, 0, -1, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_1); + + result = g_fah->Delete(testUri); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "medialibrary_file_access_ScanFile_0006 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileAccessHelperTest-end medialibrary_file_access_ScanFile_0006"; +} + /** * @tc.number: user_file_service_medialibrary_file_access_GetRoots_0000 * @tc.name: medialibrary_file_access_GetRoots_0000 diff --git a/test/unittest/resources/listscan_testfile/ListScanFilter_001.txt b/test/unittest/resources/listscan_testfile/ListScanFilter_001.txt new file mode 100644 index 0000000000000000000000000000000000000000..30af0fa0bf994164b7e65390237af0253d0793bf --- /dev/null +++ b/test/unittest/resources/listscan_testfile/ListScanFilter_001.txt @@ -0,0 +1 @@ +ListFile and ScanFile \ No newline at end of file diff --git a/test/unittest/resources/listscan_testfile/ListScanFilter_002.txt b/test/unittest/resources/listscan_testfile/ListScanFilter_002.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/test/unittest/resources/ohos_test.xml b/test/unittest/resources/ohos_test.xml index d94c4f2eefa1ff1436076f935ae031b38212e483..b85ed710e7a4d4ae06556ae1605d6aefbd3fe421 100644 --- a/test/unittest/resources/ohos_test.xml +++ b/test/unittest/resources/ohos_test.xml @@ -25,11 +25,18 @@