1/* 2 * Copyright (C) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import resourceManager from '@ohos.resourceManager'; 17import {expect} from 'deccjsunit/index' 18import router from '@system.router' 19import mediaLibrary from '@ohos.multimedia.mediaLibrary' 20import fileio from '@ohos.fileio' 21import featureAbility from '@ohos.ability.featureAbility' 22import { UiDriver, BY, PointerMatrix } from '@ohos.UiTest' 23const CODECMIMEVALUE = ['video/avc', 'audio/mp4a-latm', 'audio/mpeg'] 24const context = featureAbility.getContext(); 25 26export async function getPermission(permissionNames) { 27 featureAbility.getContext().requestPermissionsFromUser(permissionNames, 0, async (data) => { 28 console.info("case request success" + JSON.stringify(data)); 29 }) 30} 31 32export async function driveFn(num) { 33 console.info(`case come in driveFn 111`) 34 let driver = await UiDriver.create() 35 console.info(`case come in driveFn 222`) 36 console.info(`driver is ${JSON.stringify(driver)}`) 37 await msleepAsync(2000) 38 console.info(`UiDriver start`) 39 for (let i = 0; i < num; i++) { 40 let button = await driver.findComponent(BY.text('允许')) 41 console.info(`button is ${JSON.stringify(button)}`) 42 await msleepAsync(2000) 43 await button.click() 44 } 45 await msleepAsync(2000) 46} 47 48export async function getAvRecorderFd(pathName, fileType) { 49 console.info('case come in getAvRecorderFd') 50 let fdObject = { 51 fileAsset : null, 52 fdNumber : null 53 } 54 let displayName = pathName; 55 console.info('[mediaLibrary] displayName is ' + displayName); 56 console.info('[mediaLibrary] fileType is ' + fileType); 57 const mediaTest = mediaLibrary.getMediaLibrary(); 58 let fileKeyObj = mediaLibrary.FileKey; 59 let mediaType; 60 let publicPath; 61 if (fileType == 'audio') { 62 mediaType = mediaLibrary.MediaType.AUDIO; 63 publicPath = await mediaTest.getPublicDirectory(mediaLibrary.DirectoryType.DIR_AUDIO); 64 } else { 65 mediaType = mediaLibrary.MediaType.VIDEO; 66 publicPath = await mediaTest.getPublicDirectory(mediaLibrary.DirectoryType.DIR_VIDEO); 67 } 68 console.info('[mediaLibrary] publicPath is ' + publicPath); 69 let dataUri = await mediaTest.createAsset(mediaType, displayName, publicPath); 70 if (dataUri != undefined) { 71 let args = dataUri.id.toString(); 72 let fetchOp = { 73 selections : fileKeyObj.ID + "=?", 74 selectionArgs : [args], 75 } 76 let fetchFileResult = await mediaTest.getFileAssets(fetchOp); 77 fdObject.fileAsset = await fetchFileResult.getAllObject(); 78 fdObject.fdNumber = await fdObject.fileAsset[0].open('rw'); 79 console.info('case getFd number is: ' + fdObject.fdNumber); 80 } 81 return fdObject; 82} 83 84// File operation 85export async function getFileDescriptor(fileName) { 86 let fileDescriptor = undefined; 87 await resourceManager.getResourceManager().then(async (mgr) => { 88 await mgr.getRawFileDescriptor(fileName).then(value => { 89 fileDescriptor = {fd: value.fd, offset: value.offset, length: value.length}; 90 console.log('case getRawFileDescriptor success fileName: ' + fileName); 91 }).catch(error => { 92 console.log('case getRawFileDescriptor err: ' + error); 93 }); 94 }); 95 return fileDescriptor; 96} 97export async function getStageFileDescriptor(fileName) { 98 let fileDescriptor = undefined; 99 let mgr = globalThis.abilityContext.resourceManager 100 await mgr.getRawFileDescriptor(fileName).then(value => { 101 fileDescriptor = {fd: value.fd, offset: value.offset, length: value.length}; 102 console.log('case getRawFileDescriptor success fileName: ' + fileName); 103 }).catch(error => { 104 console.log('case getRawFileDescriptor err: ' + error); 105 }); 106 return fileDescriptor; 107} 108export async function closeFileDescriptor(fileName) { 109 await resourceManager.getResourceManager().then(async (mgr) => { 110 await mgr.closeRawFileDescriptor(fileName).then(()=> { 111 console.log('case closeRawFileDescriptor ' + fileName); 112 }).catch(error => { 113 console.log('case closeRawFileDescriptor err: ' + error); 114 }); 115 }); 116} 117 118export function isFileOpen(fileDescriptor, done) { 119 if (fileDescriptor == undefined) { 120 expect().assertFail(); 121 console.info('case error fileDescriptor undefined, open file fail'); 122 done(); 123 } 124} 125 126export async function getFdRead(pathName, done) { 127 let fdReturn; 128 await context.getFilesDir().then((fileDir) => { 129 console.info("case file dir is" + JSON.stringify(fileDir)); 130 pathName = fileDir + '/' + pathName; 131 console.info("case pathName is" + pathName); 132 }); 133 await fileio.open(pathName).then((fdNumber) => { 134 isFileOpen(fdNumber, done) 135 fdReturn = fdNumber; 136 console.info('[fileio]case open fd success, fd is ' + fdReturn); 137 }) 138 return fdReturn; 139} 140 141export async function closeFdNumber(fdNumber) { 142 await fileio.close(fdNumber); 143} 144 145// wait synchronously 146export function msleep(time) { 147 for(let t = Date.now();Date.now() - t <= time;); 148} 149 150// wait asynchronously 151export async function msleepAsync(ms) { 152 return new Promise((resolve) => setTimeout(resolve, ms)); 153} 154 155export function printError(error, done) { 156 expect().assertFail(); 157 console.info(`case error called,errMessage is ${error.message}`); 158 done(); 159} 160 161export function assertErr(opera, err, done) { 162 console.info(`case ${opera} error,errMessage is ${err.message}`); 163 expect().assertFail(); 164 done(); 165} 166 167// callback function for promise call back error 168export function failureCallback(error) { 169 expect().assertFail(); 170 console.info(`case error called,errMessage is ${error.message}`); 171} 172 173// callback function for promise catch error 174export function catchCallback(error) { 175 expect().assertFail(); 176 console.info(`case error called,errMessage is ${error.message}`); 177} 178 179export function checkDescription(actualDescription, descriptionKey, descriptionValue) { 180 for (let i = 0; i < descriptionKey.length; i++) { 181 let property = actualDescription[descriptionKey[i]]; 182 console.info('case key is '+ descriptionKey[i]); 183 console.info('case actual value is '+ property); 184 console.info('case hope value is '+ descriptionValue[i]); 185 if (descriptionKey[i] == 'codec_mime') { 186 console.info('CODECMIMEVALUE[descriptionValue[i]] value is '+ CODECMIMEVALUE[descriptionValue[i]]); 187 if(property == "video/x-h264"){ 188 console.info('property attribute is:'+ property); 189 }else{ 190 expect(property).assertEqual(CODECMIMEVALUE[descriptionValue[i]]); 191 } 192 } else { 193 expect(property).assertEqual(descriptionValue[i]); 194 } 195 196 } 197} 198 199export function checkOldDescription(actualDescription, descriptionKey, descriptionValue) { 200 for (let i = 0; i < descriptionKey.length; i++) { 201 let property = actualDescription[descriptionKey[i]]; 202 console.info('case key is '+ descriptionKey[i]); 203 console.info('case actual value is '+ property); 204 console.info('case hope value is '+ descriptionValue[i]); 205 expect(property).assertEqual(descriptionValue[i]); 206 } 207} 208 209export function printDescription(obj) { 210 let description = ""; 211 for(let i in obj) { 212 let property = obj[i]; 213 console.info('case key is '+ i); 214 console.info('case value is '+ property); 215 description += i + " = " + property + "\n"; 216 } 217} 218 219export async function toNewPage(pagePath1, pagePath2, page) { 220 let path = ''; 221 if (page == 0) { 222 path = pagePath1; 223 } else { 224 path = pagePath2; 225 } 226 let options = { 227 uri: path, 228 } 229 try { 230 await router.push(options); 231 } catch { 232 console.info('case route failed'); 233 } 234} 235 236export async function clearRouter() { 237 await router.clear(); 238} 239 240export async function getFd(pathName) { 241 let fdObject = { 242 fileAsset : null, 243 fdNumber : null 244 } 245 let displayName = pathName; 246 const mediaTest = mediaLibrary.getMediaLibrary(); 247 let fileKeyObj = mediaLibrary.FileKey; 248 let mediaType = mediaLibrary.MediaType.VIDEO; 249 let publicPath = await mediaTest.getPublicDirectory(mediaLibrary.DirectoryType.DIR_VIDEO); 250 let dataUri = await mediaTest.createAsset(mediaType, displayName, publicPath); 251 if (dataUri != undefined) { 252 let args = dataUri.id.toString(); 253 let fetchOp = { 254 selections : fileKeyObj.ID + "=?", 255 selectionArgs : [args], 256 } 257 let fetchFileResult = await mediaTest.getFileAssets(fetchOp); 258 fdObject.fileAsset = await fetchFileResult.getAllObject(); 259 fdObject.fdNumber = await fdObject.fileAsset[0].open('rw'); 260 console.info('case getFd number is: ' + fdObject.fdNumber); 261 } 262 return fdObject; 263} 264 265export async function getAudioFd(pathName) { 266 let fdObject = { 267 fileAsset : null, 268 fdNumber : null 269 } 270 let displayName = pathName; 271 const mediaTest = mediaLibrary.getMediaLibrary(); 272 let fileKeyObj = mediaLibrary.FileKey; 273 let mediaType = mediaLibrary.MediaType.AUDIO; 274 let publicPath = await mediaTest.getPublicDirectory(mediaLibrary.DirectoryType.DIR_AUDIO); 275 let dataUri = await mediaTest.createAsset(mediaType, displayName, publicPath); 276 if (dataUri != undefined) { 277 let args = dataUri.id.toString(); 278 let fetchOp = { 279 selections : fileKeyObj.ID + "=?", 280 selectionArgs : [args], 281 } 282 let fetchFileResult = await mediaTest.getFileAssets(fetchOp); 283 fdObject.fileAsset = await fetchFileResult.getAllObject(); 284 fdObject.fdNumber = await fdObject.fileAsset[0].open('rw'); 285 console.info('case getFd number is: ' + fdObject.fdNumber); 286 } 287 return fdObject; 288} 289 290export async function closeFd(fileAsset, fdNumber) { 291 if (fileAsset != null) { 292 await fileAsset[0].close(fdNumber).then(() => { 293 console.info('[mediaLibrary] case close fd success'); 294 }).catch((err) => { 295 console.info('[mediaLibrary] case close fd failed'); 296 }); 297 } else { 298 console.info('[mediaLibrary] case fileAsset is null'); 299 } 300} 301