1/* 2 * Copyright (C) 2022-2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15import mediaLibrary from "@ohos.multimedia.mediaLibrary"; 16import abilityAccessCtrl from "@ohos.abilityAccessCtrl"; 17import uitest from "@ohos.UiTest"; 18const presetsCount = { 19 ActsMediaLibraryAlbumTest: { albumsCount: 15, assetsCount: 27 }, 20 ActsMediaLibraryBaseTest: { albumsCount: 11, assetsCount: 14 }, 21 ActsMediaLibraryFavoriteTest: { albumsCount: 6, assetsCount: 32 }, 22 ActsMediaLibraryFileTest: { albumsCount: 6, assetsCount: 28 }, 23 ActsMediaLibraryFileAssetTest: { albumsCount: 27, assetsCount: 116 }, 24 ActsMediaLibraryFileKeyTest: { albumsCount: 2, assetsCount: 2 }, 25 ActsMediaLibraryFileResultTest: { albumsCount: 3, assetsCount: 112 }, 26 ActsMediaLibraryGetThumbnailTest: { albumsCount: 3, assetsCount: 3 }, 27 ActsMediaLibraryMediafetchoptionsTest: { albumsCount: 3, assetsCount: 8 }, 28 ActsMediaLibraryTrashJsTest: { albumsCount: 6, assetsCount: 24 }, 29}; 30 31const IMAGE_TYPE = mediaLibrary.MediaType.IMAGE; 32const VIDEO_TYPE = mediaLibrary.MediaType.VIDEO; 33const AUDIO_TYPE = mediaLibrary.MediaType.AUDIO; 34const FILE_TYPE = mediaLibrary.MediaType.FILE; 35 36const FILEKEY = mediaLibrary.FileKey; 37const { RELATIVE_PATH, ALBUM_NAME, MEDIA_TYPE } = FILEKEY; 38 39const sleep = async function sleep(times) { 40 if (!times) { 41 times = 10; 42 } 43 await new Promise((res) => setTimeout(res, times)); 44}; 45 46const allFetchOp = function (others) { 47 if (!others) { 48 others = {}; 49 } 50 return { 51 selections: "", 52 selectionArgs: [], 53 ...others, 54 }; 55}; 56 57const fetchOps = function (testNum, path, type, others) { 58 if (!others) { 59 others = {}; 60 } 61 let ops = { 62 selections: FILEKEY.RELATIVE_PATH + "= ? AND " + FILEKEY.MEDIA_TYPE + "=?", 63 selectionArgs: [path, type.toString()], 64 ...others, 65 }; 66 console.info(`${testNum}: fetchOps${JSON.stringify(ops)}`); 67 return ops; 68}; 69const nameFetchOps = function (testNum, path, display_name, type) { 70 let ops = { 71 selections: FILEKEY.RELATIVE_PATH + "= ? AND " + FILEKEY.DISPLAY_NAME + "= ? AND " + FILEKEY.MEDIA_TYPE + "=?", 72 selectionArgs: [path, display_name, type.toString()], 73 }; 74 console.info(`${testNum}: fetchOps${JSON.stringify(ops)}`); 75 return ops; 76}; 77 78const idFetchOps = function (testNum, albumId) { 79 let ops = { 80 selections: FILEKEY.ALBUM_ID + "= ?", 81 selectionArgs: [albumId + ""], 82 }; 83 console.info(`${testNum}: fetchOps${JSON.stringify(ops)}`); 84 return ops; 85}; 86 87const fileIdFetchOps = function (testNum, id) { 88 let ops = { 89 selections: FILEKEY.ID + "= ?", 90 selectionArgs: [id + ""], 91 }; 92 console.info(`${testNum}: fetchOps${JSON.stringify(ops)}`); 93 return ops; 94}; 95 96const albumFetchOps = function (testNum, albumName, others) { 97 let ops = { 98 selections: ALBUM_NAME + "= ?", 99 selectionArgs: [albumName], 100 ...others, 101 }; 102 console.info(`${testNum}: fetchOps${JSON.stringify(ops)}`); 103 return ops; 104}; 105 106// albums of two resource types 107const albumTwoTypesFetchOps = function (testNum, paths, albumName, types, others) { 108 if (!others) { 109 others = { order: FILEKEY.DATE_ADDED + " DESC" }; 110 } 111 try { 112 let ops = { 113 selections: 114 "(" + 115 RELATIVE_PATH + 116 "= ? or " + 117 RELATIVE_PATH + 118 "= ? ) AND " + 119 ALBUM_NAME + 120 "= ? AND (" + 121 MEDIA_TYPE + 122 "= ? or " + 123 MEDIA_TYPE + 124 "= ?)", 125 selectionArgs: [paths[0], paths[1], albumName, types[0].toString(), types[1].toString()], 126 ...others, 127 }; 128 console.info(`${testNum}: fetchOps${JSON.stringify(ops)}`); 129 return ops; 130 } catch (error) { 131 console.info(`albumTwoTypesFetchOps :: error: ${error}`); 132 } 133}; 134 135// albums of three resource types 136const albumThreeTypesFetchOps = function (testNum, paths, albumName, types, others) { 137 if (!others) { 138 others = { order: FILEKEY.DATE_ADDED + " DESC" }; 139 } 140 try { 141 let ops = { 142 selections: 143 "(" + 144 RELATIVE_PATH + 145 "= ? or " + 146 RELATIVE_PATH + 147 "= ? or " + 148 RELATIVE_PATH + 149 "= ? ) AND " + 150 ALBUM_NAME + 151 "= ? AND (" + 152 MEDIA_TYPE + 153 "= ? or " + 154 MEDIA_TYPE + 155 "= ? or " + 156 MEDIA_TYPE + 157 "= ?)", 158 selectionArgs: [ 159 paths[0], 160 paths[1], 161 paths[2], 162 albumName, 163 types[0].toString(), 164 types[1].toString(), 165 types[2].toString(), 166 ], 167 ...others, 168 }; 169 console.info(`${testNum}: fetchOps ${JSON.stringify(ops)}`); 170 return ops; 171 } catch (error) { 172 console.info(`albumThreeTypesFetchOps :: error: ${error}`); 173 } 174}; 175 176const fileFetchOption = function (testNum, selections, selectionArgs) { 177 let ops = { 178 selections: selections, 179 selectionArgs: selectionArgs, 180 }; 181 console.info(`${testNum} fetchOps: ${JSON.stringify(ops)}`); 182 return ops; 183} 184 185const checkPresetsAssets = async function (media, hapName) { 186 console.info("checkPresetsAssets start"); 187 let albumList = await media.getAlbums(allFetchOp()); 188 let albumsCount = albumList.length; 189 let fetchFileResult = await media.getFileAssets(allFetchOp()); 190 let assetsCount = await fetchFileResult.getCount(); 191 let presetsassetsCount = presetsCount[hapName].assetsCount; 192 let presetsalbumsCount = presetsCount[hapName].albumsCount; 193 if (assetsCount != presetsCount[hapName].assetsCount || albumsCount != presetsCount[hapName].albumsCount) { 194 console.info(`${hapName} checkPresetsAssets failed; 195 assetsCount : presetsassetsCount = ${assetsCount} : ${presetsassetsCount} 196 albumsCount : presetsalbumsCount = ${albumsCount} : ${presetsalbumsCount}`); 197 fetchFileResult.close(); 198 } else { 199 console.info(`${hapName} checkPresetsAssets passed`); 200 fetchFileResult.close(); 201 } 202}; 203 204const checkAssetsCount = async function (done, testNum, fetchFileResult, expectCount) { 205 if (!fetchFileResult) { 206 console.info(`${testNum}:: fetchFileResult error:`); 207 expect(false).assertTrue(); 208 done(); 209 return false; 210 } 211 let count = await fetchFileResult.getCount(); 212 if (count != expectCount) { 213 console.info(`${testNum}:: count:expectCount - ${count} : ${expectCount}`); 214 expect(count).assertEqual(expectCount); 215 done(); 216 } 217 return count == expectCount; 218}; 219 220const checkAlbumsCount = function (done, testNum, albumList, expectCount) { 221 if (!Array.isArray(albumList)) { 222 console.info(`${testNum}:: albumList error:`); 223 expect(false).assertTrue(); 224 done(); 225 return false; 226 } 227 let albumsCount = albumList.length; 228 if (albumsCount != expectCount) { 229 console.info(`${testNum}:: albumsCount: expectCount - ${albumsCount} : ${expectCount}`); 230 expect(albumsCount).assertEqual(expectCount); 231 done(); 232 } 233 return albumsCount == expectCount; 234}; 235 236const getPermission = async function (name, context) { 237 if (!name) { 238 name = "ohos.acts.multimedia.mediaLibrary"; 239 } 240 241 try { 242 console.info('getPermission start: ' + name); 243 let isGetPermission = false; 244 let permissions = ["ohos.permission.MEDIA_LOCATION", "ohos.permission.READ_MEDIA", "ohos.permission.WRITE_MEDIA"]; 245 let atManager = abilityAccessCtrl.createAtManager(); 246 atManager.requestPermissionsFromUser(context, permissions, (err, result) => { 247 if (err) { 248 console.info('getPermission failed: ' + JSON.stringify(err)); 249 } else { 250 console.info('getPermission suc: ' + JSON.stringify(result)); 251 isGetPermission = true; 252 } 253 }); 254 255 let driver = uitest.Driver.create(); 256 await sleep(500); 257 for (let i = 0; i < 10; i++) { 258 if (isGetPermission) { 259 break; 260 } 261 await sleep(500); 262 let button = await driver.findComponent(uitest.ON.text('允许')); 263 if (button != undefined) { 264 await button.click(); 265 } 266 } 267 console.info("getPermission end"); 268 } catch (error) { 269 console.info('getPermission error: ' + error); 270 } 271}; 272 273const MODIFY_ERROR_CODE_01 = "-1000"; 274 275const isNum = function (value) { 276 return typeof value === "number" && !isNaN(value); 277}; 278export { 279 getPermission, 280 IMAGE_TYPE, 281 VIDEO_TYPE, 282 AUDIO_TYPE, 283 FILE_TYPE, 284 FILEKEY, 285 sleep, 286 allFetchOp, 287 fetchOps, 288 nameFetchOps, 289 idFetchOps, 290 albumFetchOps, 291 fileFetchOption, 292 albumTwoTypesFetchOps, 293 albumThreeTypesFetchOps, 294 checkPresetsAssets, 295 checkAssetsCount, 296 checkAlbumsCount, 297 MODIFY_ERROR_CODE_01, 298 isNum, 299 fileIdFetchOps, 300}; 301