未验证 提交 1665f2ea 编写于 作者: O openharmony_ci 提交者: Gitee

!7929 【媒体子系统】avRecorder上库

Merge pull request !7929 from 秦莉文/monthly_20221018
......@@ -45,6 +45,7 @@ group("multimedia") {
"media/media_cpp_standard:ActsAvcodecNdkTest",
"media/media_js_standard/audioPlayer:audio_player_js_hap",
"media/media_js_standard/audioRecorder:audio_recorder_js_hap",
"media/media_js_standard/avRecorder:av_recorder_js_hap",
"media/media_js_standard/recorderFormat:recorder_format_js_hap",
"media/media_js_standard/videoPlayer:video_player_js_hap",
"medialibrary/mediaLibrary_album:mediaLibrary_album_hap",
......
......@@ -20,7 +20,7 @@ import mediaLibrary from '@ohos.multimedia.mediaLibrary'
import fileio from '@ohos.fileio'
import featureAbility from '@ohos.ability.featureAbility'
import { UiDriver, BY, PointerMatrix } from '@ohos.UiTest'
const CODECMIMEVALUE = ['video/avc', 'audio/mp4a-latm', 'audio/mpeg']
const context = featureAbility.getContext();
export async function getPermission(permissionNames) {
......@@ -31,7 +31,6 @@ export async function getPermission(permissionNames) {
export async function driveFn(num) {
console.info(`case come in driveFn 111`)
try {
let driver = await UiDriver.create()
console.info(`case come in driveFn 222`)
console.info(`driver is ${JSON.stringify(driver)}`)
......@@ -44,10 +43,42 @@ export async function driveFn(num) {
await button.click()
}
await msleepAsync(2000)
} catch (err) {
console.info('err is ' + err);
return;
}
export async function getAvRecorderFd(pathName, fileType) {
console.info('case come in getAvRecorderFd')
let fdObject = {
fileAsset : null,
fdNumber : null
}
let displayName = pathName;
console.info('[mediaLibrary] displayName is ' + displayName);
console.info('[mediaLibrary] fileType is ' + fileType);
const mediaTest = mediaLibrary.getMediaLibrary();
let fileKeyObj = mediaLibrary.FileKey;
let mediaType;
let publicPath;
if (fileType == 'audio') {
mediaType = mediaLibrary.MediaType.AUDIO;
publicPath = await mediaTest.getPublicDirectory(mediaLibrary.DirectoryType.DIR_AUDIO);
} else {
mediaType = mediaLibrary.MediaType.VIDEO;
publicPath = await mediaTest.getPublicDirectory(mediaLibrary.DirectoryType.DIR_VIDEO);
}
console.info('[mediaLibrary] publicPath is ' + publicPath);
let dataUri = await mediaTest.createAsset(mediaType, displayName, publicPath);
if (dataUri != undefined) {
let args = dataUri.id.toString();
let fetchOp = {
selections : fileKeyObj.ID + "=?",
selectionArgs : [args],
}
let fetchFileResult = await mediaTest.getFileAssets(fetchOp);
fdObject.fileAsset = await fetchFileResult.getAllObject();
fdObject.fdNumber = await fdObject.fileAsset[0].open('rw');
console.info('case getFd number is: ' + fdObject.fdNumber);
}
return fdObject;
}
// File operation
......@@ -63,7 +94,17 @@ export async function getFileDescriptor(fileName) {
});
return fileDescriptor;
}
export async function getStageFileDescriptor(fileName) {
let fileDescriptor = undefined;
let mgr = globalThis.abilityContext.resourceManager
await mgr.getRawFileDescriptor(fileName).then(value => {
fileDescriptor = {fd: value.fd, offset: value.offset, length: value.length};
console.log('case getRawFileDescriptor success fileName: ' + fileName);
}).catch(error => {
console.log('case getRawFileDescriptor err: ' + error);
});
return fileDescriptor;
}
export async function closeFileDescriptor(fileName) {
await resourceManager.getResourceManager().then(async (mgr) => {
await mgr.closeRawFileDescriptor(fileName).then(() => {
......@@ -117,6 +158,12 @@ export function printError(error, done) {
done();
}
export function assertErr(opera, err, done) {
console.info(`case ${opera} error,errMessage is ${err.message}`);
expect().assertFail();
done();
}
// callback function for promise call back error
export function failureCallback(error) {
expect().assertFail();
......@@ -130,6 +177,21 @@ export function catchCallback(error) {
}
export function checkDescription(actualDescription, descriptionKey, descriptionValue) {
for (let i = 0; i < descriptionKey.length; i++) {
let property = actualDescription[descriptionKey[i]];
console.info('case key is '+ descriptionKey[i]);
console.info('case actual value is '+ property);
console.info('case hope value is '+ descriptionValue[i]);
if (descriptionKey[i] == 'codec_mime') {
expect(property).assertEqual(CODECMIMEVALUE[descriptionValue[i]]);
} else {
expect(property).assertEqual(descriptionValue[i]);
}
}
}
export function checkOldDescription(actualDescription, descriptionKey, descriptionValue) {
for (let i = 0; i < descriptionKey.length; i++) {
let property = actualDescription[descriptionKey[i]];
console.info('case key is ' + descriptionKey[i]);
......
# Copyright (C) 2021 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.
import("//test/xts/tools/build/suite.gni")
ohos_js_hap_suite("av_recorder_js_hap") {
hap_profile = "./src/main/config.json"
deps = [
":av_recorder_js_assets",
":av_recorder_resources",
]
certificate_profile = "./signature/openharmony_sx.p7b"
hap_name = "ActsAvRecorderJsTest"
subsystem_name = "multimedia"
part_name = "multimedia_player_framework"
}
ohos_js_assets("av_recorder_js_assets") {
js2abc = true
hap_profile = "./src/main/config.json"
source_dir = "./src/main/js"
}
ohos_resources("av_recorder_resources") {
sources = [ "./src/main/resources" ]
hap_profile = "./src/main/config.json"
}
{
"description": "Configuration for avRecorder Tests",
"driver": {
"type": "OHJSUnitTest",
"test-timeout": "1000000",
"shell-timeout": "1000000",
"testcase-timeout": 60000,
"bundle-name": "ohos.acts.multimedia.audio.avrecorder",
"package-name": "ohos.acts.multimedia.audio.avrecorder"
},
"kits": [
{
"type": "ShellKit",
"run-command": [
"rm -rf /storage/media/100/local/files/Audios/audio_*",
"rm -rf /storage/media/100/local/files/Videos/audio_*",
"param set persist.ace.testmode.enabled 1",
"power-shell wakeup",
"uinput -T -d 300 600 -m 300 600 300 100 -u 300 100",
"power-shell setmode 602"
],
"teardown-command":[
"power-shell setmode 600"
]
},
{
"test-file-name": [
"ActsAvRecorderJsTest.hap"
],
"type": "AppInstallKit",
"cleanup-apps": true
}
]
}
\ No newline at end of file
{
"app": {
"apiVersion": {
"compatible": 6,
"releaseType": "Beta1",
"target": 7
},
"vendor": "acts",
"bundleName": "ohos.acts.multimedia.audio.avrecorder",
"version": {
"code": 1000000,
"name": "1.0.0"
}
},
"deviceConfig": {
"default": {
"debug": true
}
},
"module": {
"abilities": [
{
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home"
]
}
],
"orientation": "unspecified",
"formsEnabled": false,
"name": ".MainAbility",
"srcLanguage": "js",
"srcPath": "MainAbility",
"icon": "$media:icon",
"description": "$string:MainAbility_desc",
"label": "$string:MainAbility_label",
"type": "page",
"visible": true,
"launchType": "standard"
},
{
"orientation": "unspecified",
"formsEnabled": false,
"name": ".TestAbility",
"srcLanguage": "js",
"srcPath": "TestAbility",
"icon": "$media:icon",
"description": "$string:TestAbility_desc",
"label": "$string:TestAbility_label",
"type": "page",
"visible": true,
"launchType": "standard"
}
],
"deviceType": [
"tablet",
"default",
"default",
"tablet",
"tv",
"wearable"
],
"reqPermissions": [
{
"name": "ohos.permission.GRANT_SENSITIVE_PERMISSIONS",
"reason": "use ohos.permission.GRANT_SENSITIVE_PERMISSIONS"
},
{
"name": "ohos.permission.MICROPHONE",
"reason": "use ohos.permission.MICROPHONE"
},
{
"name": "ohos.permission.MEDIA_LOCATION",
"reason": "use ohos.permission.MEDIA_LOCATION"
},
{
"name": "ohos.permission.READ_MEDIA",
"reason": "use ohos.permission.READ_MEDIA"
},
{
"name": "ohos.permission.WRITE_MEDIA",
"reason": "use ohos.permission.WRITE_MEDIA"
}
],
"mainAbility": ".MainAbility",
"distro": {
"moduleType": "entry",
"installationFree": false,
"deliveryWithInstall": true,
"moduleName": "entry"
},
"package": "ohos.acts.multimedia.audio.avrecorder",
"name": ".entry",
"js": [
{
"pages": [
"pages/index/index"
],
"name": "default",
"window": {
"designWidth": 720,
"autoDesignWidth": true
}
},
{
"pages": [
"pages/index/index"
],
"name": ".TestAbility",
"window": {
"designWidth": 720,
"autoDesignWidth": false
}
}
],
"testRunner": {
"name": "OpenHarmonyTestRunner",
"srcPath": "TestRunner"
},
"srcPath": ""
}
}
\ No newline at end of file
/*
* 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.
*/
export default {
onCreate() {
console.info('AceApplication onCreate');
},
onDestroy() {
console.info('AceApplication onDestroy');
}
};
{
"strings": {
"hello": "Hello",
"world": "World"
}
}
\ No newline at end of file
{
"strings": {
"hello": "您好",
"world": "世界"
}
}
\ No newline at end of file
/*
* 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.
*/
.container {
flex-direction: column;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
}
.title {
font-size: 40px;
color: #000000;
opacity: 0.9;
}
@media screen and (device-type: tablet) and (orientation: landscape) {
.title {
font-size: 100px;
}
}
@media screen and (device-type: wearable) {
.title {
font-size: 28px;
color: #FFFFFF;
}
}
@media screen and (device-type: tv) {
.container {
background-image: url("/common/images/Wallpaper.png");
background-size: cover;
background-repeat: no-repeat;
background-position: center;
}
.title {
font-size: 100px;
color: #FFFFFF;
}
}
@media screen and (device-type: phone) and (orientation: landscape) {
.title {
font-size: 60px;
}
}
<!--
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.
-->
<div class="container">
<text class="title">
{{ $t('strings.hello') }} {{ title }}
</text>
</div>
/*
* 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.
*/
export default {
data: {
title: ""
},
onInit() {
this.title = this.$t('strings.world');
},
onShow() {
console.info('onShow finish')
},
onReady() {
},
}
\ No newline at end of file
/*
* 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.
*/
import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry'
import { Hypium } from '@ohos/hypium'
import testsuite from '../test/List.test'
export default {
onCreate() {
console.info('TestApplication onCreate')
var abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator()
var abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments()
console.info('start run testcase!!!')
Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite)
},
onDestroy() {
console.info("TestApplication onDestroy");
}
};
{
"strings": {
"hello": "Hello",
"world": "World"
},
"Files": {
}
}
\ No newline at end of file
{
"strings": {
"hello": "您好",
"world": "世界"
},
"Files": {
}
}
\ No newline at end of file
.container {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
left: 0px;
top: 0px;
width: 100%;
height: 100%;
}
.title {
font-size: 60px;
text-align: center;
width: 100%;
height: 40%;
margin: 10px;
}
@media screen and (device-type: phone) and (orientation: landscape) {
.title {
font-size: 60px;
}
}
@media screen and (device-type: tablet) and (orientation: landscape) {
.title {
font-size: 100px;
}
}
\ No newline at end of file
<div class="container">
<text class="title">
{{ $t('strings.hello') }} {{ title }}
</text>
</div>
/*
* 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.
*/
export default {
data: {
title: ""
},
onInit() {
this.title = this.$t('strings.world');
}
}
/*
* 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.
*/
import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry'
function translateParamsToString(parameters) {
const keySet = new Set([
'-s class', '-s notClass', '-s suite', '-s itName',
'-s level', '-s testType', '-s size', '-s timeout',
'-s package', '-s dryRun'
])
let targetParams = '';
for (const key in parameters) {
if (keySet.has(key)) {
targetParams += ' ' + key + ' ' + parameters[key]
}
}
return targetParams.trim()
}
export default {
onPrepare() {
console.info('OpenHarmonyTestRunner OnPrepare')
},
onRun() {
console.log('OpenHarmonyTestRunner onRun run')
var abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments()
var abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator()
var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.TestAbility'
var cmd = 'aa start -d 0 -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName
cmd += ' ' + translateParamsToString(abilityDelegatorArguments.parameters)
var debug = abilityDelegatorArguments.parameters["-D"]
console.info('debug value : '+debug)
if (debug == 'true')
{
cmd += ' -D'
}
console.info('cmd : '+cmd)
abilityDelegator.executeShellCommand(cmd, (err, data) => {
console.info('executeShellCommand : err : ' + JSON.stringify(err));
console.info('executeShellCommand : data : ' + data.stdResult);
console.info('executeShellCommand : data : ' + data.exitCode);
})
}
};
/*
* 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.
*/
import * as mediaTestBase from '../../../../../MediaTestBase.js';
import media from '@ohos.multimedia.media';
import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from 'deccjsunit/index';
export default function AVRecorderFuncTest(recorderContxt) {
describe('AVRecorderFuncTest', function () {
const RECORDER_TIME = 3000;
const PAUSE_TIME = 1000;
const END = 0;
const CREATE_PROMISE = 1;
const CREATE_CALLBACK = 2;
const PREPARE_PROMISE = 3;
const PREPARE_CALLBACK = 4;
const GETSURFACE_PROMISE = 5;
const GETSURFACE_CALLBACK = 6;
const STARTCAMERA = 7;
const START_PROMISE = 8;
const START_CALLBACK = 9;
const PAUSE_PROMISE = 10;
const PAUSE_CALLBACK = 11;
const RESUME_PROMISE = 12;
const RESUME_CALLBACK = 13;
const STOP_PROMISE = 14;
const STOP_CALLBACK = 15;
const RESET_PROMISE = 16;
const RESET_CALLBACK = 17;
const RELEASE_PROMISE = 18;
const RELEASE_CALLBACK = 19;
const SETCALLBACKOFF = 20;
const STOPVIDEOOUTPUT = 21;
let mySteps = new Array();
let caseCount = 0;
let fdPath;
let fdObject;
let playerSurfaceId = '';
let avRecorder = null;
let surfaceID = '';
let needDone = false;
let avProfile = {
audioBitrate : 48000,
audioChannels : 2,
audioCodec : media.CodecMimeType.AUDIO_AAC,
audioSampleRate : 48000,
fileFormat : media.ContainerFormatType.CFT_MPEG_4,
videoBitrate : 48000,
videoCodec : media.CodecMimeType.VIDEO_MPEG4,
videoFrameWidth : 640,
videoFrameHeight : 480,
videoFrameRate : 30
}
let avConfig = {
audioSourceType : media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
videoSourceType : media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,
profile : avProfile,
url : 'fd://',
rotation : 0,
location : { latitude : 30, longitude : 130 }
}
let audioProfile = {
audioBitrate : 48000,
audioChannels : 2,
audioCodec : media.CodecMimeType.AUDIO_AAC,
audioSampleRate : 48000,
fileFormat : media.ContainerFormatType.CFT_MPEG_4,
}
let audioConfig = {
audioSourceType : media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
profile : audioProfile,
url : 'fd://',
rotation : 0,
location : { latitude : 30, longitude : 130 }
}
beforeAll(async function () {
console.info('beforeAll case In');
let permissionName1 = 'ohos.permission.MICROPHONE';
let permissionName2 = 'ohos.permission.MEDIA_LOCATION';
let permissionName3 = 'ohos.permission.READ_MEDIA';
let permissionName4 = 'ohos.permission.WRITE_MEDIA';
let permissionName5 = 'ohos.permission.CAMERA';
let permissionNames = [permissionName1, permissionName2, permissionName3, permissionName4, permissionName5];
await mediaTestBase.getPermission(permissionNames);
await mediaTestBase.msleepAsync(2000);
await mediaTestBase.driveFn(3);
console.info('beforeAll case Out');
})
beforeEach(async function () {
console.info('beforeEach case In');
playerSurfaceId = globalThis.value;
avRecorder = undefined;
surfaceID = '';
caseCount += 1;
needDone = false;
console.info('beforeEach case Out');
})
afterEach(async function () {
console.info('afterEach case In');
mySteps = new Array();
await releaseByPromise();
await mediaTestBase.closeFd(fdObject.fileAsset, fdObject.fdNumber);
console.info('afterEach case Out');
})
afterAll(function () {
console.info('afterAll case');
})
async function getRecorderFileFd(fileName, fileType) {
console.info("case current fileName is: " + fileName);
fdObject = await mediaTestBase.getAvRecorderFd(fileName, fileType);
fdPath = "fd://" + fdObject.fdNumber.toString();
console.info("case fdPath is: " + fdPath);
avConfig.url = fdPath;
console.info("case to out getRecorderFileFd");
}
async function createAVRecorderByPromise(done) {
console.info(`case to create avRecorder by promise`);
await media.createAVRecorder().then((recorder) => {
console.info('case createAVRecorder promise called');
if (typeof (recorder) != 'undefined') {
avRecorder = recorder;
expect(avRecorder.state).assertEqual('idle');
setCallbackOn(done);
nextStep(done);
} else {
console.info('case create avRecorder failed!!!');
expect().assertFail();
done();
}
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
}
function createAVRecorderByCallback(done) {
console.info(`case to create avRecorder by callback`);
media.createAVRecorder((err, recorder) => {
if (typeof (err) == 'undefined') {
console.info('case createAVRecorder callback success ');
avRecorder = recorder;
expect(avRecorder.state).assertEqual('idle');
setCallbackOn(done);
nextStep(done);
} else {
mediaTestBase.failureCallback(err);
}
});
}
async function prepareByPromise() {
console.info(`case to prepare by promise`);
await avRecorder.prepare(avConfig).then(() => {
console.info('case recorder prepare by promise called');
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
}
function prepareByCallback() {
console.info(`case to prepare by callback`);
avRecorder.prepare(avConfig, (err) => {
if (typeof (err) == 'undefined') {
console.info('case recorder prepare by callback called');
} else {
mediaTestBase.failureCallback(err);
}
});
}
async function getInputSurfaceByPromise(done) {
console.info(`case to getsurface by promise`);
await avRecorder.getInputSurface().then((outputSurface) => {
console.info('case getInputSurface by promise called');
surfaceID = outputSurface;
console.info('case outputSurface surfaceID is: ' + surfaceID);
nextStep(done);
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
}
function getInputSurfaceByCallback(done) {
console.info(`case to getsurface by callback`);
avRecorder.getInputSurface((err, outputSurface) => {
if (typeof (err) == 'undefined') {
console.info('case getInputSurface by callback called');
surfaceID = outputSurface;
console.info('case outputSurface surfaceID is: ' + surfaceID);
nextStep(done);
} else {
mediaTestBase.failureCallback(err);
}
});
}
async function startByPromise() {
console.info(`case to start by promise`);
await avRecorder.start().then(() => {
console.info('case recorder start by promise called');
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
}
function startByCallback() {
console.info(`case to start by callback`);
avRecorder.start((err) => {
if (typeof (err) == 'undefined') {
console.info('case recorder start by callback called');
} else {
mediaTestBase.failureCallback(err);
}
});
}
async function pauseByPromise() {
console.info(`case to pause by promise`);
await avRecorder.pause().then(() => {
console.info('case recorder pause by promise called');
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
}
function pauseByCallback() {
console.info(`case to pause by callback`);
avRecorder.pause((err) => {
if (typeof (err) == 'undefined') {
console.info('case recorder pause by callback called');
} else {
mediaTestBase.failureCallback(err);
}
});
}
async function resumeByPromise() {
console.info(`case to resume by promise`);
await avRecorder.resume().then(() => {
console.info('case recorder resume by promise called');
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
}
function resumeByCallback() {
console.info(`case to resume by callback`);
avRecorder.resume((err) => {
if (typeof (err) == 'undefined') {
console.info('case recorder resume by callback called');
} else {
mediaTestBase.failureCallback(err);
}
});
}
async function stopByPromise() {
console.info(`case to stop by promise`);
await avRecorder.stop().then(() => {
console.info('case recorder stop by promise called');
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
}
function stopByCallback() {
console.info(`case to stop by callback`);
avRecorder.stop((err) => {
if (typeof (err) == 'undefined') {
console.info('case recorder stop by callback called');
} else {
mediaTestBase.failureCallback(err);
}
});
}
async function resetByPromise() {
console.info(`case to reset by promise`);
await avRecorder.reset().then(() => {
console.info('case recorder reset by promise called');
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
}
function resetByCallback() {
console.info(`case to reset by callback`);
avRecorder.reset((err) => {
if (typeof (err) == 'undefined') {
console.info('case recorder reset by callback called');
} else {
mediaTestBase.failureCallback(err);
}
});
}
async function releaseByPromise(done) {
console.info(`case to release by promise`);
if (avRecorder) {
await avRecorder.release().then(() => {
console.info('case recorder release by promise called');
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
}
if(needDone) {
avRecorder = undefined;
done();
}
}
async function releaseByCallback(done) {
console.info(`case to release by callback`);
if (avRecorder) {
avRecorder.release(async(err) => {
if (typeof (err) == 'undefined') {
console.info('case recorder release by callback called');
avRecorder = undefined;
} else {
mediaTestBase.failureCallback(err);
}
});
}
if (needDone) {
avRecorder = undefined;
done();
}
}
async function nextStep(done) {
console.info("case myStep[0]: " + mySteps[0]);
if (mySteps[0] == END) {
console.info("case to END");
done();
}
switch (mySteps[0]) {
case CREATE_PROMISE:
mySteps.shift();
await createAVRecorderByPromise(done);
break;
case CREATE_CALLBACK:
mySteps.shift();
createAVRecorderByCallback(done);
break;
case PREPARE_PROMISE:
mySteps.shift();
await prepareByPromise();
break;
case PREPARE_CALLBACK:
mySteps.shift();
prepareByCallback();
break;
case GETSURFACE_PROMISE:
mySteps.shift();
await getInputSurfaceByPromise(done);
break;
case GETSURFACE_CALLBACK:
mySteps.shift();
getInputSurfaceByCallback(done);
break;
case STARTCAMERA:
mySteps.shift();
await startVideoOutput();
nextStep(done);
break;
case START_PROMISE:
mySteps.shift();
await startByPromise();
break;
case START_CALLBACK:
mySteps.shift();
startByCallback();
break;
case PAUSE_PROMISE:
mySteps.shift();
await pauseByPromise();
break;
case PAUSE_CALLBACK:
mySteps.shift();
pauseByCallback();
break;
case RESUME_PROMISE:
mySteps.shift();
await resumeByPromise();
break;
case RESUME_CALLBACK:
mySteps.shift();
resumeByCallback();
break;
case STOP_PROMISE:
mySteps.shift();
await stopByPromise();
break;
case STOP_CALLBACK:
mySteps.shift();
stopByCallback();
break;
case RESET_PROMISE:
mySteps.shift();
await resetByPromise();
break;
case RESET_CALLBACK:
mySteps.shift();
resetByCallback();
break;
case RELEASE_PROMISE:
mySteps.shift();
await releaseByPromise(done);
break;
case RELEASE_CALLBACK:
mySteps.shift();
await releaseByCallback(done);
break;
case SETCALLBACKOFF:
mySteps.shift();
setCallbackOff(done);
break;
case STOPVIDEOOUTPUT:
mySteps.shift();
await stopVideoOutput();
nextStep(done);
break;
default:
console.info('do nothing');
}
}
function setCallbackOn(done) {
console.info('case callback on');
avRecorder.on('stateChange', async (state, reason) => {
console.info('case state has changed, new state is :' + state);
switch (state) {
case 'idle':
nextStep(done);
break;
case 'prepared':
nextStep(done);
break;
case 'started':
await mediaTestBase.msleepAsync(RECORDER_TIME);
nextStep(done);
break;
case 'paused':
await mediaTestBase.msleepAsync(PAUSE_TIME);
nextStep(done);
break;
case 'stopped':
nextStep(done);
break;
case 'released':
avRecorder = undefined;
nextStep(done);
break;
case 'error':
console.info("case error state!!!");
break;
default:
console.info('case start is unknown');
nextStep(done);
}
});
avRecorder.on('error', (err) => {
console.info('case avRecorder.on(error) called, errMessage is ' + err.message);
nextStep(done);
});
}
function setCallbackOff(done) {
console.info('case callback off called');
if (avRecorder != undefined) {
console.info('case to call avRecorder.off("stateChange")');
avRecorder.off('stateChange');
console.info('case to call avRecorder.off("error")');
avRecorder.off('error');
console.info('case call avRecorder.off done');
}
needDone = true;
nextStep(done);
console.info('case callback off done');
}
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVRECORDER_FUNC_0100
* @tc.name : 01. test only avRecorder basic function by promise interfaces
* @tc.desc : test only avRecorder operation: start-pause-resume-stop
* @tc.size : MediumTest
* @tc.type : Function
* @tc.level : Level0
*/
it('SUB_MULTIMEDIA_MEDIA_AVRECORDER_FUNC_0100', 0, async function (done) {
avConfig = audioConfig;
caseCount = 1;
let fileName = 'avRecorder_func_0'+ caseCount +'.m4a';
await getRecorderFileFd(fileName, 'audio');
mySteps = new Array(CREATE_PROMISE, PREPARE_PROMISE, START_PROMISE, PAUSE_PROMISE,
RESUME_PROMISE, STOP_PROMISE, RESET_PROMISE, SETCALLBACKOFF, RELEASE_PROMISE);
nextStep(done);
})
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVRECORDER_FUNC_0200
* @tc.name : 01. test only avRecorder basic function by callback interfaces
* @tc.desc : test only avRecorder operation: start-pause-resume-stop
* @tc.size : MediumTest
* @tc.type : Function
* @tc.level : Level0
*/
it('SUB_MULTIMEDIA_MEDIA_AVRECORDER_FUNC_0200', 0, async function (done) {
let fileName = 'avRecorder_func_0'+ caseCount +'.m4a';
await getRecorderFileFd(fileName, 'audio');
mySteps = new Array(CREATE_CALLBACK, PREPARE_CALLBACK, START_CALLBACK, PAUSE_CALLBACK,
RESUME_CALLBACK, STOP_CALLBACK, RESET_CALLBACK, SETCALLBACKOFF, RELEASE_CALLBACK);
nextStep(done);
})
})
}
\ No newline at end of file
/*
* 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.
*/
import AVRecorderFuncTest from './AVRecorderFuncTest.test.js'
export default function testsuite(recorderContxt) {
AVRecorderFuncTest(recorderContxt)
}
\ No newline at end of file
{
"string": [
{
"name": "entry_MainAbility",
"value": "entry_MainAbility"
},
{
"name": "mainability_description",
"value": "JS_Empty Ability"
},
{
"name": "MainAbility_desc",
"value": "description"
},
{
"name": "MainAbility_label",
"value": "label"
},
{
"name": "TestAbility_desc",
"value": "description"
},
{
"name": "TestAbility_label",
"value": "label"
}
]
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册