• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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