• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 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 */
15
16import avSession from '@ohos.multimedia.avsession';
17import featureAbility from '@ohos.ability.featureAbility';
18//import image from '@ohos.multimedia.image';
19//import resourceManager from '@ohos.resourceManager';
20import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect, TestType, Size, Level } from '@ohos/hypium';
21
22
23const TAG = "[AVSessionControllerJSTest]";
24export default function AVSessionControllerJsTest() {
25	describe("AVSessionControllerJsTest", function () {
26		let session = null;
27		let controller = null;
28		let receivedCallback = false;
29		let receivedCallback2 = false;
30		let receivedString = null;
31		let receivedString2 = null;
32		let receivedParam = null;
33		let receivedParam2 = null;
34		let receivedExtras = null;
35		let receivedExtras2 = null;
36		const INVALID_STRING = "invalid string";
37		const UPDATE_LYRICS_EVENT = "dynamic_lyrics";
38		const UPDATE_LYRICS_WANT_PARAMS = {
39			lyrics: "This is my lyrics"
40		};
41		const COMMON_COMMAND_STRING = "common_command";
42		const COMMON_COMMAND_PARAMS = {
43			command: "This is my command"
44		};
45		const CUSTOM_EXTRAS = {
46			extrasKey: "This is custom media packet"
47		};
48		const QUEUE_ITEM_ID = 666;
49		const QUEUE_ITEM_LENGTH = 1;
50		const QUEUE_ITEM_KEY_WORD = "QUEUE_ITEM_RELATE";
51		const EXTRAS = {
52			"items_author": "name"
53		};
54		const AVFileDescriptor = {
55			fd: 0X00000AC6,
56			offset: 0,
57			length: 10
58		};
59		const AVDataSrcDescriptor = {
60			fileSize: -1,
61			callback: 5
62		};
63		const QUEUE_ITEM_DESCRIPTION = {
64			mediaId: QUEUE_ITEM_KEY_WORD,
65			title: QUEUE_ITEM_KEY_WORD,
66			subtitle:'SUB_QUEUE_ITEM_RELATE',
67			mediaType: 'audio',
68			artist: 'lihua',
69			duration: 166,
70			fdSrc: AVFileDescriptor,
71			dataSrc: AVDataSrcDescriptor,
72			extras: EXTRAS,
73			iconUri: "iconUri",
74			mediaSize: 10,
75			albumTitle: "albumTitle",
76			albumCoverUri: "albumCoverUri",
77			lyricContent: "lyricContent",
78			lyricUri: "lyricUri",
79			mediaUri: "mediaUri",
80			startPosition: 0,
81			creditsPosition: 0,
82			appName: "appName",
83			displayTags: avSession.DisplayTag.TAG_AUDIO_VIVID,
84                        drmScheme: "C83EADEOA7FB9E76B"
85		};
86		const QUEUE_ITEM_DESCRIPTION_ERROR = {
87			mediaId: QUEUE_ITEM_KEY_WORD,
88			title: QUEUE_ITEM_KEY_WORD,
89			extras: EXTRAS,
90			icon: undefined,
91			iconUri: "iconUri",
92			mediaSize: 10,
93			albumTitle: "albumTitle",
94			albumCoverUri: "albumCoverUri",
95			lyricContent: "lyricContent",
96			lyricUri: "lyricUri",
97			mediaUri: "mediaUri",
98			startPosition: 0,
99			creditsPosition: 0,
100			appName: "appName",
101                        drmScheme: "C83EADEOA7FB9E76S"
102		};
103		const QUEUE_ITEM = {
104			itemId: QUEUE_ITEM_ID,
105			description: QUEUE_ITEM_DESCRIPTION
106		}
107		const QUEUE_ITEM_ERROR = {
108			itemId: QUEUE_ITEM_ID,
109			description: QUEUE_ITEM_DESCRIPTION_ERROR
110		}
111		const ITEMS_ARRAY = [QUEUE_ITEM];
112		const ITEMS_ARRAY_ERROR = [QUEUE_ITEM_ERROR];
113		const QUEUE_TITLE = "title";
114		const SKIP_ITEM_ID = 200;
115
116
117
118		beforeAll(async function () {
119			await initSession()
120			await getController();
121			console.info(TAG + "Create session and controller finished, beforeAll called");
122		})
123
124		afterAll(function () {
125			controller.destroy();
126			session.destroy();
127			console.info(TAG + 'afterAll called');
128		})
129
130		beforeEach(function () {
131			console.info(TAG + 'beforeEach called');
132		})
133
134		afterEach(function () {
135			console.info(TAG + 'afterEach called');
136		})
137
138		async function initSession() {
139			await avSession.createAVSession(featureAbility.getContext(), "AVSessionDemo", 'audio').then(data => {
140				session = data;
141			}).catch((err) => {
142				console.error(TAG + "Create AVSession error " + JSON.stringify(err));
143				expect().assertFail();
144			});
145			session.activate();
146		}
147
148		async function getController() {
149			await session.getController().then(data => {
150				controller = data
151			}).catch(err => {
152				console.error(TAG + "Get controller error " + JSON.stringify(err));
153				expect().assertFail();
154			});
155		}
156
157		function sleep(time) {
158			return new Promise((resolve) => setTimeout(resolve, time));
159		}
160
161		function dynamicLyricsCallback1(sessionEvent, args) {
162			console.log(TAG + "Callback1 received event: " + JSON.stringify(sessionEvent));
163			console.log(TAG + "Callback1 received args: " + JSON.stringify(args));
164			if (sessionEvent != UPDATE_LYRICS_EVENT) {
165				console.error(TAG + "Callback1 lyrics event unmatch");
166				expect().assertFail();
167			}
168			receivedCallback = true;
169			receivedString = sessionEvent;
170			receivedParam = args;
171		}
172
173		function dynamicLyricsCallback2(sessionEvent, args) {
174			console.log(TAG + "Callback2 received event: " + JSON.stringify(sessionEvent));
175			console.log(TAG + "Callback2 received args: " + JSON.stringify(args));
176			if (sessionEvent != UPDATE_LYRICS_EVENT) {
177				console.error(TAG + "Callback2 lyrics event unmatch");
178				expect().assertFail();
179			}
180			receivedCallback2 = true;
181			receivedString2 = sessionEvent;
182			receivedParam2 = args;
183		}
184
185		function extrasChangeCallback1(extras) {
186			console.log(TAG + "Callback1 received args: " + JSON.stringify(extras));
187			if (extras.extrasKey != CUSTOM_EXTRAS.extrasKey) {
188				console.error(TAG + "Callback1 extras unmatch");
189				expect().assertFail();
190			}
191			receivedCallback = true;
192			receivedExtras = extras;
193		}
194
195		function extrasChangeCallback2(extras) {
196			console.log(TAG + "Callback2 received args: " + JSON.stringify(extras));
197			if (extras.extrasKey != CUSTOM_EXTRAS.extrasKey) {
198				console.error(TAG + "Callback2 extras unmatch");
199				expect().assertFail();
200			}
201			receivedCallback2 = true;
202			receivedExtras2 = extras;
203		}
204
205		function queueTitleCallback1(title) {
206			console.log(TAG + "queueTitleCallback1 received Title " + JSON.stringify(title));
207			if (title != QUEUE_TITLE) {
208				console.error(TAG + "queueTitleCallback1 received Title unmatch");
209				expect().assertFail();
210			}
211			receivedCallback = true;
212		}
213
214		function queueTitleCallback2(title) {
215			console.log(TAG + "queueTitleCallback2 received Title " + JSON.stringify(title));
216			if (title != QUEUE_TITLE) {
217				console.error(TAG + "queueTitleCallback2 received Title unmatch");
218				expect().assertFail();
219			}
220			receivedCallback2 = true;
221		}
222
223		function queueItemsCallback1(items) {
224			console.log(TAG + "queueItemsCallback1 received items length: " + items.length);
225			console.log(TAG + "queueItemsCallback1 received items id: " + items[0].itemId);
226			console.log(TAG + "queueItemsCallback1 received items title: " + items[0].description.title);
227			if (items.length != QUEUE_ITEM_LENGTH) {
228				console.error(TAG + "queueItemsCallback1 received items length unmatch");
229				expect().assertFail();
230				return;
231			}
232			if (items[0].itemId != QUEUE_ITEM_ID) {
233				console.error(TAG + "queueItemsCallback1 received items id unmatch");
234				expect().assertFail();
235				return;
236			}
237			if (items[0].description.title != QUEUE_ITEM_KEY_WORD) {
238				console.error(TAG + "queueItemsCallback1 received items key word unmatch");
239				expect().assertFail();
240				return;
241			}
242			receivedCallback = true;
243		}
244
245		function queueItemsCallback2(items) {
246			console.log(TAG + "queueItemsCallback2 received items length: " + items.length);
247			console.log(TAG + "queueItemsCallback2 received items id: " + items[0].itemId);
248			console.log(TAG + "queueItemsCallback2 received items title: " + items[0].description.title);
249			if (items.length != QUEUE_ITEM_LENGTH) {
250				console.error(TAG + "queueItemsCallback2 received items length unmatch");
251				expect().assertFail();
252				return;
253			}
254			if (items[0].itemId != QUEUE_ITEM_ID) {
255				console.error(TAG + "queueItemsCallback2 received items id unmatch");
256				expect().assertFail();
257				return;
258			}
259			if (items[0].description.title != QUEUE_ITEM_KEY_WORD) {
260				console.error(TAG + "queueItemsCallback2 received items key word unmatch");
261				expect().assertFail();
262				return;
263			}
264			receivedCallback2 = true;
265		}
266
267		function skipToQueueItemCallback1(itemId) {
268			console.log(TAG + "skipToQueueItemCallback1 received itemid " + itemId);
269			if (itemId != SKIP_ITEM_ID) {
270				console.error(TAG + "skipToQueueItemCallback1 received uid unmatch");
271				expect().assertFail();
272			}
273			receivedCallback = true;
274		}
275
276		function skipToQueueItemCallback2(itemId) {
277			console.log(TAG + "skipToQueueItemCallback2 received itemid " + itemId);
278			if (itemId != SKIP_ITEM_ID) {
279				console.error(TAG + "skipToQueueItemCallback2 received uid unmatch");
280				expect().assertFail();
281			}
282			receivedCallback2 = true;
283		}
284
285		async function onCallbackInvalidSession(eventName) {
286			function callback1() {}
287			await session.destroy();
288			try {
289				session.on(eventName, callback1)
290				expect().assertFail();
291			} catch (error) {
292				expect(error.code).assertEqual(6600102);
293			}
294			await initSession()
295			await getController();
296		}
297
298        /* *
299         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_ONSESSIONEVENT_0100
300         * @tc.name      : bind one callback on sessionEvent event
301         * @tc.desc      : Testing on sessionEvent callback
302         * @tc.size      : MediumTest
303         * @tc.type      : Function
304         * @tc.level     : Level2
305         */
306		it("SUB_MULTIMEDIA_AVSESSION_ONSESSIONEVENT_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
307			controller.on('sessionEvent', dynamicLyricsCallback1);
308			await session.dispatchSessionEvent(UPDATE_LYRICS_EVENT, UPDATE_LYRICS_WANT_PARAMS).catch((err) => {
309				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONSESSIONEVENT_0100 error " + JSON.stringify(err));
310				expect().assertFail();
311				done();
312			});
313			sleep(200).then(() => {
314				if (receivedCallback) {
315					console.log(TAG + "SUB_MULTIMEDIA_AVSESSION_ONSESSIONEVENT_0100 Received session event change event");
316					expect(receivedString == UPDATE_LYRICS_EVENT).assertTrue();
317					expect(receivedParam.lyrics == UPDATE_LYRICS_WANT_PARAMS.lyrics).assertTrue();
318				} else {
319					console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONSESSIONEVENT_0100 Session event change event not received");
320					expect().assertFail();
321				}
322				receivedCallback = false;
323				receivedString = null;
324				receivedParam = null;
325				done();
326			})
327		})
328
329        /* *
330         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_ONSESSIONEVENT_0200
331         * @tc.name      : bind two callback on sessionEvent event
332         * @tc.desc      : Testing on sessionEvent callback
333         * @tc.size      : MediumTest
334         * @tc.type      : Function
335         * @tc.level     : Level2
336         */
337		it("SUB_MULTIMEDIA_AVSESSION_ONSESSIONEVENT_0200", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
338			controller.on('sessionEvent', dynamicLyricsCallback1);
339			controller.on('sessionEvent', dynamicLyricsCallback2);
340			await session.dispatchSessionEvent(UPDATE_LYRICS_EVENT, UPDATE_LYRICS_WANT_PARAMS).catch((err) => {
341				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONSESSIONEVENT_0200 Set session event error " + JSON.stringify(err));
342				expect().assertFail();
343				done();
344			});
345			await sleep(200);
346			if (receivedCallback && receivedCallback2) {
347				console.log(TAG + "SUB_MULTIMEDIA_AVSESSION_ONSESSIONEVENT_0200 Received session event change event");
348				expect(receivedString == UPDATE_LYRICS_EVENT).assertTrue();
349				expect(receivedParam.lyrics == UPDATE_LYRICS_WANT_PARAMS.lyrics).assertTrue();
350				expect(receivedString2 == UPDATE_LYRICS_EVENT).assertTrue();
351				expect(receivedParam2.lyrics == UPDATE_LYRICS_WANT_PARAMS.lyrics).assertTrue();
352				expect(true).assertTrue();
353			} else {
354				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONSESSIONEVENT_0200 Session event change event not received");
355				expect().assertFail();
356			}
357			receivedCallback = false;
358			receivedCallback2 = false;
359			receivedString2 = null;
360			receivedParam2 = null;
361			receivedString2 = null;
362			receivedParam2 = null;
363			done();
364		})
365
366        /* *
367         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_OFFSESSIONEVENT_0100
368		 * @tc.name      : bind two callbacks on sessionEvent event, off one of them
369		 * @tc.desc      : Testing offSessionEvent callback
370         * @tc.size      : MediumTest
371         * @tc.type      : Function
372         * @tc.level     : Level0
373		 */
374		it("SUB_MULTIMEDIA_AVSESSION_OFFSESSIONEVENT_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
375			controller.on('sessionEvent', dynamicLyricsCallback1);
376			controller.on('sessionEvent', dynamicLyricsCallback2);
377			controller.off('sessionEvent', dynamicLyricsCallback2);
378			await session.dispatchSessionEvent(UPDATE_LYRICS_EVENT, UPDATE_LYRICS_WANT_PARAMS).catch((err) => {
379				console.error(TAG + "Set session event error " + JSON.stringify(err));
380				expect().assertFail();
381				done();
382			});
383			await sleep(200);
384			if (receivedCallback && !receivedCallback2) {
385				console.log(TAG + "Received session event change event");
386				expect(receivedString == UPDATE_LYRICS_EVENT).assertTrue();
387				expect(receivedParam.lyrics == UPDATE_LYRICS_WANT_PARAMS.lyrics).assertTrue();
388				expect(true).assertTrue();
389			} else {
390				console.error(TAG + "Session event change event not received");
391				expect().assertFail();
392			}
393			receivedCallback = false;
394			receivedString = null;
395			receivedParam = null;
396			done();
397		})
398
399        /* *
400         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_OFFSESSIONEVENT_0200
401		 * @tc.name      : bind two callbacks on sessionEvent event, off two of them
402		 * @tc.desc      : Testing offSessionEvent callback
403         * @tc.size      : MediumTest
404         * @tc.type      : Function
405         * @tc.level     : Level0
406		 */
407		it("SUB_MULTIMEDIA_AVSESSION_OFFSESSIONEVENT_0200", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
408			controller.on('sessionEvent', dynamicLyricsCallback1);
409			controller.on('sessionEvent', dynamicLyricsCallback2);
410			controller.off('sessionEvent', dynamicLyricsCallback1);
411			controller.off('sessionEvent', dynamicLyricsCallback2);
412
413			await session.dispatchSessionEvent(UPDATE_LYRICS_EVENT, UPDATE_LYRICS_WANT_PARAMS).catch((err) => {
414				console.error(TAG + "Set session event error " + JSON.stringify(err));
415				expect().assertFail();
416				done();
417			});
418			await sleep(200);
419			if (!receivedCallback && !receivedCallback2) {
420				console.log(TAG + "Received session event change event");
421				expect(true).assertTrue();
422			} else {
423				console.error(TAG + "Session event change event not received");
424				expect().assertFail();
425			}
426			receivedCallback = false;
427			done();
428		})
429
430        /* *
431         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_OFFSESSIONEVENT_0300
432		 * @tc.name      : bind two callbacks on sessionEvent event, off all of them
433		 * @tc.desc      : Testing offSessionEvent callback
434         * @tc.size      : MediumTest
435         * @tc.type      : Function
436         * @tc.level     : Level0
437		 */
438		it("SUB_MULTIMEDIA_AVSESSION_OFFSESSIONEVENT_0300", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
439			controller.on('sessionEvent', dynamicLyricsCallback1);
440			controller.on('sessionEvent', dynamicLyricsCallback2);
441			controller.off('sessionEvent');
442
443			await session.dispatchSessionEvent(UPDATE_LYRICS_EVENT, UPDATE_LYRICS_WANT_PARAMS).catch((err) => {
444				console.error(TAG + "Set session event error " + JSON.stringify(err));
445				expect().assertFail();
446				done();
447			});
448			await sleep(200);
449			if (!receivedCallback && !receivedCallback2) {
450				console.log(TAG + "Received session event change event");
451				expect(true).assertTrue();
452			} else {
453				console.error(TAG + "Session event change event not received");
454				expect().assertFail();
455			}
456			receivedCallback = false;
457			done();
458		})
459
460        /* *
461         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_SENDCOMMONCOMMAND_0100
462         * @tc.name      : controller send common command - callback
463         * @tc.desc      : Testing call sendCommonCommand(callback)
464         * @tc.size      : MediumTest
465         * @tc.type      : Function
466         * @tc.level     : Level2
467         */
468		it("SUB_MULTIMEDIA_AVSESSION_SENDCOMMONCOMMAND_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
469			controller.sendCommonCommand(COMMON_COMMAND_STRING, COMMON_COMMAND_PARAMS, (err) => {
470				if (err) {
471					console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_SENDCOMMONCOMMAND_0100 error " + JSON.stringify(err));
472					expect().assertFail();
473					done();
474				}
475				console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_SENDCOMMONCOMMAND_0100 finished");
476				expect(true).assertTrue();
477				done();
478			});
479		})
480
481        /* *
482         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_SENDCOMMONCOMMAND_0200
483         * @tc.name      : controller send common command - promise
484         * @tc.desc      : Testing call sendCommonCommand(promise)
485         * @tc.size      : MediumTest
486         * @tc.type      : Function
487         * @tc.level     : Level2
488         */
489		it("SUB_MULTIMEDIA_AVSESSION_SENDCOMMONCOMMAND_0200", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
490			await controller.sendCommonCommand(COMMON_COMMAND_STRING, COMMON_COMMAND_PARAMS).catch((err) => {
491				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_SENDCOMMONCOMMAND_0200 error " + JSON.stringify(err));
492				expect().assertFail();
493				done();
494			});
495			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_SENDCOMMONCOMMAND_0200 finished");
496			done();
497		})
498
499        /* *
500         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_GETEXTRAS_0100
501         * @tc.name      : controller get extras - callback
502         * @tc.desc      : Testing call getExtras(callback)
503         * @tc.size      : MediumTest
504         * @tc.type      : Function
505         * @tc.level     : Level2
506         */
507		it("SUB_MULTIMEDIA_AVSESSION_GETEXTRAS_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
508			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETEXTRAS_0100 start");
509			await session.setExtras(CUSTOM_EXTRAS).catch((err) => {
510				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_GETEXTRAS_0100 error " + JSON.stringify(err));
511				expect().assertFail();
512			});
513
514			controller.getExtras((err, extras) => {
515				if (err) {
516					console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_GETEXTRAS_0100 error " + JSON.stringify(err));
517					expect().assertFail();
518					done();
519				}
520				expect(extras.extrasKey == CUSTOM_EXTRAS.extrasKey).assertTrue();
521				console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETEXTRAS_0100 finished");
522				done();
523			});
524		})
525
526        /* *
527         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_GETEXTRAS_0200
528         * @tc.name      : controller get extras - promise
529         * @tc.desc      : Testing call getExtras(promise)
530         * @tc.size      : MediumTest
531         * @tc.type      : Function
532         * @tc.level     : Level2
533         */
534		it("SUB_MULTIMEDIA_AVSESSION_GETEXTRAS_0200", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
535			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETEXTRAS_0200 start");
536			await session.setExtras(CUSTOM_EXTRAS).catch((err) => {
537				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_GETEXTRAS_0200 error " + JSON.stringify(err));
538				expect().assertFail();
539			});
540
541			let extras = await controller.getExtras().catch((err) => {
542				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_GETEXTRAS_0200 error " + JSON.stringify(err));
543				expect().assertFail();
544				done();
545			})
546			expect(extras.extrasKey == CUSTOM_EXTRAS.extrasKey).assertTrue();
547			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETEXTRAS_0200 finished");
548			done();
549		})
550
551        /* *
552         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_ONEXTRASCHANGE_0100
553         * @tc.name      : bind one callback on extrasChange event
554         * @tc.desc      : Testing on extrasChange callback
555         * @tc.size      : MediumTest
556         * @tc.type      : Function
557         * @tc.level     : Level2
558         */
559		it("SUB_MULTIMEDIA_AVSESSION_ONEXTRASCHANGE_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
560			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_ONEXTRASCHANGE_0100 start");
561			controller.on('extrasChange', extrasChangeCallback1);
562			await session.setExtras(CUSTOM_EXTRAS).catch((err) => {
563				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONEXTRASCHANGE_0100 error " + JSON.stringify(err));
564				expect().assertFail();
565				done();
566			});
567			sleep(200).then(() => {
568				if (receivedCallback) {
569					console.log(TAG + "Received extras change event");
570					expect(receivedExtras.extrasKey == CUSTOM_EXTRAS.extrasKey).assertTrue();
571				} else {
572					console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONEXTRASCHANGE_0100 extras change event not received");
573					expect().assertFail();
574				}
575				receivedCallback = false;
576				receivedExtras = null;
577				console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_ONEXTRASCHANGE_0100 finished");
578				done();
579			})
580		})
581
582        /* *
583         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_ONEXTRASCHANGE_0200
584         * @tc.name      : bind two callback on extrasChange event
585         * @tc.desc      : Testing on extrasChange callback
586         * @tc.size      : MediumTest
587         * @tc.type      : Function
588         * @tc.level     : Level2
589         */
590		it("SUB_MULTIMEDIA_AVSESSION_ONEXTRASCHANGE_0200", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
591			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_ONEXTRASCHANGE_0200 start");
592			controller.on('extrasChange', extrasChangeCallback1);
593			controller.on('extrasChange', extrasChangeCallback2);
594			await session.setExtras(CUSTOM_EXTRAS).catch((err) => {
595				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONEXTRASCHANGE_0200 error " + JSON.stringify(err));
596				expect().assertFail();
597				done();
598			});
599			sleep(200).then(() => {
600				if (receivedCallback && receivedCallback2) {
601					console.log(TAG + "Received extras change event");
602					expect(receivedExtras.extrasKey == CUSTOM_EXTRAS.extrasKey).assertTrue();
603					expect(receivedExtras2.extrasKey == CUSTOM_EXTRAS.extrasKey).assertTrue();
604				} else {
605					console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONEXTRASCHANGE_0200 extras change event not received");
606					expect().assertFail();
607				}
608				receivedCallback = false;
609				receivedCallback2 = false;
610				receivedExtras = null;
611				receivedExtras2 = null;
612				console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_ONEXTRASCHANGE_0200 finished");
613				done();
614			})
615		})
616
617        /* *
618         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0100
619		 * @tc.name      : bind two callbacks on extrasChange event, off one of them
620		 * @tc.desc      : Testing offExtrasChange callback
621         * @tc.size      : MediumTest
622         * @tc.type      : Function
623         * @tc.level     : Level0
624		 */
625		it("SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
626			controller.on('extrasChange', extrasChangeCallback1);
627			controller.on('extrasChange', extrasChangeCallback2);
628			controller.off('extrasChange', extrasChangeCallback2);
629			await session.setExtras(CUSTOM_EXTRAS).catch((err) => {
630				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0100 error " + JSON.stringify(err));
631				expect().assertFail();
632				done();
633			});
634			await sleep(200);
635			if (receivedCallback && !receivedCallback2) {
636				console.log(TAG + "Received extras change event");
637				expect(receivedExtras.extrasKey == CUSTOM_EXTRAS.extrasKey).assertTrue();
638				expect(true).assertTrue();
639			} else {
640				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0100 Extras change event not received");
641				expect().assertFail();
642			}
643			receivedCallback = false;
644			receivedExtras = null;
645			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0100 finished");
646			done();
647		})
648
649        /* *
650         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0200
651		 * @tc.name      : bind two callbacks on extrasChange event, off two of them
652		 * @tc.desc      : Testing offExtrasChange callback
653         * @tc.size      : MediumTest
654         * @tc.type      : Function
655         * @tc.level     : Level0
656		 */
657		it("SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0200", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
658			controller.on('extrasChange', extrasChangeCallback1);
659			controller.on('extrasChange', extrasChangeCallback2);
660			controller.off('extrasChange', extrasChangeCallback1);
661			controller.off('extrasChange', extrasChangeCallback2);
662			await session.setExtras(CUSTOM_EXTRAS).catch((err) => {
663				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0200 error " + JSON.stringify(err));
664				expect().assertFail();
665				done();
666			});
667			await sleep(200);
668			if (!receivedCallback && !receivedCallback2) {
669				console.log(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0200 Success, not received extras change event");
670				expect(true).assertTrue();
671			} else {
672				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0200 failed, extras change event received");
673				expect().assertFail();
674			}
675			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0200 finished");
676			done();
677		})
678
679        /* *
680         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0300
681		 * @tc.name      : bind two callbacks on extrasChange event, off all of them
682		 * @tc.desc      : Testing offExtrasChange callback
683         * @tc.size      : MediumTest
684         * @tc.type      : Function
685         * @tc.level     : Level0
686		 */
687		it("SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0300", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
688			controller.on('extrasChange', extrasChangeCallback1);
689			controller.on('extrasChange', extrasChangeCallback2);
690			controller.off('extrasChange');
691			await session.setExtras(CUSTOM_EXTRAS).catch((err) => {
692				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0300 error " + JSON.stringify(err));
693				expect().assertFail();
694				done();
695			});
696			await sleep(200);
697			if (!receivedCallback && !receivedCallback2) {
698				console.log(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0300Success, not received extras change event");
699				expect(true).assertTrue();
700			} else {
701				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0300 failed, extras change event received");
702				expect().assertFail();
703			}
704			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFEXTRASCHANGE_0300 finished");
705			done();
706		})
707
708        /* *
709         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_ONQUEUEITEMSCHANGE_0100
710         * @tc.name      : bind one callback on queueItemsChange event
711         * @tc.desc      : Testing on queueItemsChange callback
712         * @tc.size      : MediumTest
713         * @tc.type      : Function
714         * @tc.level     : Level2
715         */
716		it("SUB_MULTIMEDIA_AVSESSION_ONQUEUEITEMSCHANGE_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
717			controller.on('queueItemsChange', queueItemsCallback1);
718			await session.setAVQueueItems(ITEMS_ARRAY).catch((err) => {
719				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONQUEUEITEMSCHANGE_0100 setAVQueueItems error " + JSON.stringify(err));
720				expect().assertFail();
721				done();
722			});
723			sleep(200).then(() => {
724				if (receivedCallback) {
725					console.log(TAG + "SUB_MULTIMEDIA_AVSESSION_ONQUEUEITEMSCHANGE_0100 Received queue items change");
726					expect(true).assertTrue();
727				} else {
728					console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONQUEUEITEMSCHANGE_0100 Session queue items change  not received");
729					expect().assertFail();
730				}
731				receivedCallback = false;
732				done();
733			});
734		})
735
736        /* *
737         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_ONQUEUEITEMSCHANGE_0200
738         * @tc.name      : bind two callback on queueItemsChange event
739         * @tc.desc      : Testing on queueItemsChange callback
740         * @tc.size      : MediumTest
741         * @tc.type      : Function
742         * @tc.level     : Level2
743         */
744		it("SUB_MULTIMEDIA_AVSESSION_ONQUEUEITEMSCHANGE_0200", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
745			controller.on('queueItemsChange', queueItemsCallback1);
746			controller.on('queueItemsChange', queueItemsCallback2);
747			await session.setAVQueueItems(ITEMS_ARRAY).catch((err) => {
748				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONQUEUEITEMSCHANGE_0200 error " + JSON.stringify(err));
749				expect().assertFail();
750				done();
751			});
752			await sleep(200);
753			if (receivedCallback && receivedCallback2) {
754				console.log(TAG + "SUB_MULTIMEDIA_AVSESSION_ONQUEUEITEMSCHANGE_0200 Received queue items change");
755				expect(true).assertTrue();
756			} else {
757				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONQUEUEITEMSCHANGE_0200 Session queue items change  not received");
758				expect().assertFail();
759			}
760			receivedCallback = false;
761			receivedCallback2 = false;
762			done();
763		})
764
765        /* *
766         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_ONQUEUETITLECHANGE_0100
767         * @tc.name      : bind one callback on queueTitleChange event
768         * @tc.desc      : Testing on queueTitleChange callback
769         * @tc.size      : MediumTest
770         * @tc.type      : Function
771         * @tc.level     : Level2
772         */
773		it("SUB_MULTIMEDIA_AVSESSION_ONQUEUETITLECHANGE_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
774			controller.on('queueTitleChange', queueTitleCallback1);
775			await session.setAVQueueTitle(QUEUE_TITLE).catch((err) => {
776				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONQUEUETITLECHANGE_0100 setAVQueueTitle error " + JSON.stringify(err));
777				expect().assertFail();
778				done();
779			});
780			sleep(200).then(() => {
781				if (receivedCallback) {
782					console.log(TAG + "SUB_MULTIMEDIA_AVSESSION_ONQUEUETITLECHANGE_0100 Received queue Title change");
783					expect(true).assertTrue();
784				} else {
785					console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONQUEUETITLECHANGE_0100 Session queue Title change  not received");
786					expect().assertFail();
787				}
788				receivedCallback = false;
789				done();
790			});
791		})
792
793        /* *
794         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_ONQUEUETITLECHANGE_0100
795         * @tc.name      : bind two callback on queueTitleChange event
796         * @tc.desc      : Testing on queueTitleChange callback
797         * @tc.size      : MediumTest
798         * @tc.type      : Function
799         * @tc.level     : Level2
800         */
801		it("SUB_MULTIMEDIA_AVSESSION_ONQUEUETITLECHANGE_0200", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
802			controller.on('queueTitleChange', queueTitleCallback1);
803			controller.on('queueTitleChange', queueTitleCallback2);
804			await session.setAVQueueTitle(QUEUE_TITLE).catch((err) => {
805				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONQUEUETITLECHANGE_0200 error " + JSON.stringify(err));
806				expect().assertFail();
807				done();
808			});
809			await sleep(200);
810			if (receivedCallback && receivedCallback2) {
811				console.log(TAG + "SUB_MULTIMEDIA_AVSESSION_ONQUEUETITLECHANGE_0200 Received queue Title change");
812				expect(true).assertTrue();
813			} else {
814				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONQUEUETITLECHANGE_0200 Session queue Title change  not received");
815				expect().assertFail();
816			}
817			receivedCallback = false;
818			receivedCallback2 = false;
819			done();
820		})
821
822        /* *
823         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_OFFQUEUEITEMSCHANGE_0100
824		 * @tc.name      : bind two callbacks on queueItemsChange event, off one of them
825		 * @tc.desc      : Testing offQueueItemsChange callback
826         * @tc.size      : MediumTest
827         * @tc.type      : Function
828         * @tc.level     : Level0
829		 */
830		it("SUB_MULTIMEDIA_AVSESSION_OFFQUEUEITEMSCHANGE_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
831			controller.on('queueItemsChange', queueItemsCallback1);
832			controller.on('queueItemsChange', queueItemsCallback2);
833			controller.off('queueItemsChange', queueItemsCallback2);
834			await session.setAVQueueItems(ITEMS_ARRAY).catch((err) => {
835				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUEITEMSCHANGE_0100 setAVQueueItems error " + JSON.stringify(err));
836				expect().assertFail();
837				done();
838			});
839			await sleep(200);
840			if (receivedCallback && !receivedCallback2) {
841				console.log(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUEITEMSCHANGE_0100 Received queue items change");
842				expect(true).assertTrue();
843			} else {
844				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUEITEMSCHANGE_0100 Session queue items change  not received");
845				expect().assertFail();
846			}
847			receivedCallback = false;
848			done();
849		})
850
851        /* *
852         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_OFFQUEUEITEMSCHANGE_0200
853		 * @tc.name      : bind two callbacks on queueItemsChange event, off two of them
854		 * @tc.desc      : Testing offQueueItemsChange callback
855         * @tc.size      : MediumTest
856         * @tc.type      : Function
857         * @tc.level     : Level0
858		 */
859		it("SUB_MULTIMEDIA_AVSESSION_OFFQUEUEITEMSCHANGE_0200", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
860			controller.on('queueItemsChange', queueItemsCallback1);
861			controller.on('queueItemsChange', queueItemsCallback2);
862			controller.off('queueItemsChange', queueItemsCallback1);
863			controller.off('queueItemsChange', queueItemsCallback2);
864			await session.setAVQueueItems(ITEMS_ARRAY).catch((err) => {
865				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUEITEMSCHANGE_0200 setAVQueueItems error " + JSON.stringify(err));
866				expect().assertFail();
867				done();
868			});
869			await sleep(200);
870			if (!receivedCallback && !receivedCallback2) {
871				console.log(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUEITEMSCHANGE_0200 Received queue items change");
872				expect(true).assertTrue();
873			} else {
874				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUEITEMSCHANGE_0200 Session queue items change  not received");
875				expect().assertFail();
876			}
877			receivedCallback = false;
878			done();
879		})
880
881        /* *
882         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_OFFQUEUEITEMSCHANGE_0300
883		 * @tc.name      : bind two callbacks on queueItemsChange event, off all of them
884		 * @tc.desc      : Testing offQueueItemsChange callback
885         * @tc.size      : MediumTest
886         * @tc.type      : Function
887         * @tc.level     : Level0
888		 */
889		it("SUB_MULTIMEDIA_AVSESSION_OFFQUEUEITEMSCHANGE_0300", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
890			controller.on('queueItemsChange', queueItemsCallback1);
891			controller.on('queueItemsChange', queueItemsCallback2);
892			controller.off('queueItemsChange');
893			await session.setAVQueueItems(ITEMS_ARRAY).catch((err) => {
894				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUEITEMSCHANGE_0300 setAVQueueItems error " + JSON.stringify(err));
895				expect().assertFail();
896				done();
897			});
898			await sleep(200);
899			if (!receivedCallback && !receivedCallback2) {
900				console.log(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUEITEMSCHANGE_0300 Received queue items change");
901				expect(true).assertTrue();
902			} else {
903				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUEITEMSCHANGE_0300 Session queue items change  not received");
904				expect().assertFail();
905			}
906			receivedCallback = false;
907			done();
908		})
909
910        /* *
911         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_OFFQUEUETITLECHANGE_0100
912		 * @tc.name      : bind two callbacks on queueTitleChange event, off one of them
913		 * @tc.desc      : Testing offQueueTitleChange callback
914         * @tc.size      : MediumTest
915         * @tc.type      : Function
916         * @tc.level     : Level0
917		 */
918		it("SUB_MULTIMEDIA_AVSESSION_OFFQUEUETITLECHANGE_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
919			controller.on('queueTitleChange', queueTitleCallback1);
920			controller.on('queueTitleChange', queueTitleCallback2);
921			controller.off('queueTitleChange', queueTitleCallback2);
922			await session.setAVQueueTitle(QUEUE_TITLE).catch((err) => {
923				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUETITLECHANGE_0100 setAVQueueTitle error " + JSON.stringify(err));
924				expect().assertFail();
925				done();
926			});
927			await sleep(200);
928			if (receivedCallback && !receivedCallback2) {
929				console.log(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUETITLECHANGE_0100 Received queue Title change");
930				expect(true).assertTrue();
931			} else {
932				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUETITLECHANGE_0100 Session queue Title change  not received");
933				expect().assertFail();
934			}
935			receivedCallback = false;
936			done();
937		})
938
939        /* *
940         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_OFFQUEUETITLECHANGE_0200
941		 * @tc.name      : bind two callbacks on queueTitleChange event, off two of them
942		 * @tc.desc      : Testing offQueueTitleChange callback
943         * @tc.size      : MediumTest
944         * @tc.type      : Function
945         * @tc.level     : Level0
946		 */
947		it("SUB_MULTIMEDIA_AVSESSION_OFFQUEUETITLECHANGE_0200", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
948			controller.on('queueTitleChange', queueTitleCallback1);
949			controller.on('queueTitleChange', queueTitleCallback2);
950			controller.off('queueTitleChange', queueTitleCallback1);
951			controller.off('queueTitleChange', queueTitleCallback2);
952
953			await session.setAVQueueTitle(QUEUE_TITLE).catch((err) => {
954				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUETITLECHANGE_0200 setAVQueueTitle error " + JSON.stringify(err));
955				expect().assertFail();
956				done();
957			});
958			await sleep(200);
959			if (!receivedCallback && !receivedCallback2) {
960				console.log(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUETITLECHANGE_0200 Received queue Title change");
961				expect(true).assertTrue();
962			} else {
963				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUETITLECHANGE_0200 Session queue Title change  not received");
964				expect().assertFail();
965			}
966			receivedCallback = false;
967			done();
968		})
969
970        /* *
971         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_OFFQUEUETITLECHANGE_0300
972		 * @tc.name      : bind two callbacks on queueTitleChange event, off all of them
973		 * @tc.desc      : Testing offQueueTitleChange callback
974         * @tc.size      : MediumTest
975         * @tc.type      : Function
976         * @tc.level     : Level0
977		 */
978		it("SUB_MULTIMEDIA_AVSESSION_OFFQUEUETITLECHANGE_0300", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
979			controller.on('queueTitleChange', queueTitleCallback1);
980			controller.on('queueTitleChange', queueTitleCallback2);
981			controller.off('queueTitleChange');
982
983			await session.setAVQueueTitle(QUEUE_TITLE).catch((err) => {
984				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUETITLECHANGE_0300 setAVQueueTitle error " + JSON.stringify(err));
985				expect().assertFail();
986				done();
987			});
988			await sleep(200);
989			if (!receivedCallback && !receivedCallback2) {
990				console.log(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUETITLECHANGE_0300 Received queue Title change");
991				expect(true).assertTrue();
992			} else {
993				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_OFFQUEUETITLECHANGE_0300 Session queue Title change  not received");
994				expect().assertFail();
995			}
996			receivedCallback = false;
997			done();
998		})
999
1000        /* *
1001         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_SETAVQUEUEITEMS_0100
1002         * @tc.name      : session set Items of AVQueue - callback
1003         * @tc.desc      : Testing call setAVQueueItems(callback)
1004         * @tc.size      : MediumTest
1005         * @tc.type      : Function
1006         * @tc.level     : Level2
1007         */
1008		it("SUB_MULTIMEDIA_AVSESSION_SETAVQUEUEITEMS_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1009			session.setAVQueueItems(ITEMS_ARRAY, (err) => {
1010				if (err) {
1011					console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_SETAVQUEUEITEMS_0100 error " + JSON.stringify(err));
1012					expect().assertFail();
1013					done();
1014				}
1015				console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_SETAVQUEUEITEMS_0100 finished");
1016				expect(true).assertTrue();
1017				done();
1018			});
1019		})
1020
1021        /* *
1022         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_SETAVQUEUEITEMS_0200
1023         * @tc.name      : session set Items of AVQueue - promise
1024         * @tc.desc      : Testing call setAVQueueItems(promise)
1025         * @tc.size      : MediumTest
1026         * @tc.type      : Function
1027         * @tc.level     : Level2
1028         */
1029		it("SUB_MULTIMEDIA_AVSESSION_SETAVQUEUEITEMS_0200", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1030			await session.setAVQueueItems(ITEMS_ARRAY).catch((err) => {
1031				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_SETAVQUEUEITEMS_0200 error " + JSON.stringify(err));
1032				expect().assertFail();
1033				done();
1034			});
1035			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_SETAVQUEUEITEMS_0200 finished");
1036			done();
1037		})
1038
1039        /* *
1040         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_SETAVQUEUETITLE_0100
1041         * @tc.name      : session set title of AVQueue - callback
1042         * @tc.desc      : Testing call setAVQueueTitle(callback)
1043         * @tc.size      : MediumTest
1044         * @tc.type      : Function
1045         * @tc.level     : Level2
1046         */
1047		it("SUB_MULTIMEDIA_AVSESSION_SETAVQUEUETITLE_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1048			session.setAVQueueTitle(QUEUE_TITLE, (err) => {
1049				if (err) {
1050					console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_SETAVQUEUETITLE_0100 error " + JSON.stringify(err));
1051					expect().assertFail();
1052					done();
1053				}
1054				console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_SETAVQUEUETITLE_0100 finished");
1055				expect(true).assertTrue();
1056				done();
1057			});
1058		})
1059
1060        /* *
1061         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_SETAVQUEUETITLE_0200
1062         * @tc.name      : session set title of AVQueue - promise
1063         * @tc.desc      : Testing call setAVQueueTitle(promise)
1064         * @tc.size      : MediumTest
1065         * @tc.type      : Function
1066         * @tc.level     : Level2
1067         */
1068		it("SUB_MULTIMEDIA_AVSESSION_SETAVQUEUETITLE_0200", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1069			await session.setAVQueueTitle(QUEUE_TITLE).catch((err) => {
1070				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_SETAVQUEUETITLE_0200 error " + JSON.stringify(err));
1071				expect().assertFail();
1072				done();
1073			});
1074			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_SETAVQUEUETITLE_0200 finished");
1075			done();
1076		})
1077
1078        /* *
1079         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_SKIPTOQUEUEITEM_0100
1080         * @tc.name      : controller skip to QueueItem by queue item id - callback
1081         * @tc.desc      : Testing call skipToQueueItem(callback)
1082         * @tc.size      : MediumTest
1083         * @tc.type      : Function
1084         * @tc.level     : Level2
1085         */
1086		it("SUB_MULTIMEDIA_AVSESSION_SKIPTOQUEUEITEM_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1087			controller.skipToQueueItem(QUEUE_ITEM_ID, (err) => {
1088				if (err) {
1089					console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_SKIPTOQUEUEITEM_0100 error " + JSON.stringify(err));
1090					expect().assertFail();
1091					done();
1092				}
1093				console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_SKIPTOQUEUEITEM_0100 finished");
1094				expect(true).assertTrue();
1095				done();
1096			});
1097		})
1098
1099        /* *
1100         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_SKIPTOQUEUEITEM_0200
1101         * @tc.name      : controller skip to QueueItem by queue item id - promise
1102         * @tc.desc      : Testing call skipToQueueItem(promise)
1103         * @tc.size      : MediumTest
1104         * @tc.type      : Function
1105         * @tc.level     : Level2
1106         */
1107		it("SUB_MULTIMEDIA_AVSESSION_SKIPTOQUEUEITEM_0200", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1108			await controller.skipToQueueItem(QUEUE_ITEM_ID).catch((err) => {
1109				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_SKIPTOQUEUEITEM_0200 error " + JSON.stringify(err));
1110				expect().assertFail();
1111				done();
1112			});
1113			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_SKIPTOQUEUEITEM_0200 finished");
1114			done();
1115		})
1116
1117        /* *
1118         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_ONSKIPTOQUEUEITEM_0100
1119         * @tc.name      : bind one callback on skipToQueueItem event
1120         * @tc.desc      : Testing on skipToQueueItem callback
1121         * @tc.size      : MediumTest
1122         * @tc.type      : Function
1123         * @tc.level     : Level2
1124         */
1125		it("SUB_MULTIMEDIA_AVSESSION_ONSKIPTOQUEUEITEM_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1126			session.on('skipToQueueItem', skipToQueueItemCallback1);
1127			await controller.skipToQueueItem(SKIP_ITEM_ID).catch((err) => {
1128				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONSKIPTOQUEUEITEM_0100 error " + JSON.stringify(err));
1129				expect().assertFail();
1130				done();
1131			});
1132			sleep(200).then(() => {
1133				if (receivedCallback) {
1134					console.log(TAG + "SUB_MULTIMEDIA_AVSESSION_ONSKIPTOQUEUEITEM_0100 Received skipToQueueItem ");
1135					expect(true).assertTrue();
1136				} else {
1137					console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONSKIPTOQUEUEITEM_0100 skipToQueueItem not received");
1138					expect().assertFail();
1139				}
1140				receivedCallback = false;
1141				done();
1142			})
1143		})
1144
1145        /* *
1146         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_ONSKIPTOQUEUEITEM_0200
1147         * @tc.name      : bind two callback on skipToQueueItem event
1148         * @tc.desc      : Testing on skipToQueueItem callback
1149         * @tc.size      : MediumTest
1150         * @tc.type      : Function
1151         * @tc.level     : Level2
1152         */
1153		it("SUB_MULTIMEDIA_AVSESSION_ONSKIPTOQUEUEITEM_0200", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1154			session.on('skipToQueueItem', skipToQueueItemCallback1);
1155			session.on('skipToQueueItem', skipToQueueItemCallback2);
1156			await controller.skipToQueueItem(SKIP_ITEM_ID).catch((err) => {
1157				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONSKIPTOQUEUEITEM_0200 error " + JSON.stringify(err));
1158				expect().assertFail();
1159				done();
1160			});
1161			await sleep(200);
1162			if (receivedCallback && receivedCallback2) {
1163				console.log(TAG + "SUB_MULTIMEDIA_AVSESSION_ONSKIPTOQUEUEITEM_0200 Received skipToQueueItem ");
1164				expect(true).assertTrue();
1165			} else {
1166				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_ONSKIPTOQUEUEITEM_0200skipToQueueItem not received");
1167				expect().assertFail();
1168			}
1169			receivedCallback = false;
1170			receivedCallback2 = false;
1171			done();
1172		})
1173
1174        /* *
1175         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_GETAVQUEUEITEMS_0100
1176         * @tc.name      : controller get items of AVQueue - callback
1177         * @tc.desc      : Testing call getAVQueueItems(callback)
1178         * @tc.size      : MediumTest
1179         * @tc.type      : Function
1180         * @tc.level     : Level2
1181         */
1182		it("SUB_MULTIMEDIA_AVSESSION_GETAVQUEUEITEMS_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1183			session.setAVQueueItems(ITEMS_ARRAY, (err) => {
1184				if (err) {
1185					console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVQUEUEITEMS_0100 error " + JSON.stringify(err));
1186					expect().assertFail();
1187					done();
1188				} else {
1189					controller.getAVQueueItems((err) => {
1190						if (err) {
1191							console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVQUEUEITEMS_0100 error " + JSON.stringify(err));
1192							expect().assertFail();
1193						} else {
1194							console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVQUEUEITEMS_0100 finished");
1195							expect(true).assertTrue();
1196						}
1197						done();
1198					});
1199				}
1200			});
1201		})
1202
1203        /* *
1204         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_GETAVQUEUEITEMS_0200
1205         * @tc.name      : controller get items of AVQueue - promise
1206         * @tc.desc      : Testing call getAVQueueItems(promise)
1207         * @tc.size      : MediumTest
1208         * @tc.type      : Function
1209         * @tc.level     : Level2
1210         */
1211		it("SUB_MULTIMEDIA_AVSESSION_GETAVQUEUEITEMS_0200", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1212			await session.setAVQueueItems(ITEMS_ARRAY).then(async () => {
1213				await controller.getAVQueueItems().catch((err) => {
1214					console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVQUEUEITEMS_0200 error " + JSON.stringify(err));
1215					expect().assertFail();
1216				});
1217				done();
1218			}).catch((err) => {
1219				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_SETAVQUEUEITEMS_0200 error " + JSON.stringify(err));
1220				expect().assertFail();
1221				done();
1222			});
1223		})
1224
1225        /* *
1226         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_GETAVQUEUETITLE_0100
1227         * @tc.name      : controller get title of AVQueue - callback
1228         * @tc.desc      : Testing call getAVQueueTitle(callback)
1229         * @tc.size      : MediumTest
1230         * @tc.type      : Function
1231         * @tc.level     : Level2
1232         */
1233		it("SUB_MULTIMEDIA_AVSESSION_GETAVQUEUETITLE_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1234			session.setAVQueueTitle(QUEUE_TITLE, (err) => {
1235				if (err) {
1236					console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVQUEUETITLE_0100 error " + JSON.stringify(err));
1237					expect().assertFail();
1238					done();
1239				} else {
1240					controller.getAVQueueTitle((err) => {
1241						if (err) {
1242							console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVQUEUETITLE_0100 error " + JSON.stringify(err));
1243							expect().assertFail();
1244						} else {
1245							console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVQUEUETITLE_0100 finished");
1246							expect(true).assertTrue();
1247						}
1248						done();
1249					});
1250				}
1251			});
1252		})
1253
1254        /* *
1255         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_GETAVQUEUETITLE_0200
1256         * @tc.name      : controller get title of AVQueue - promise
1257         * @tc.desc      : Testing call getAVQueueTitle(promise)
1258         * @tc.size      : MediumTest
1259         * @tc.type      : Function
1260         * @tc.level     : Level2
1261         */
1262		it("SUB_MULTIMEDIA_AVSESSION_GETAVQUEUETITLE_0200", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1263			await session.setAVQueueTitle(QUEUE_TITLE).then(async () => {
1264				await controller.getAVQueueTitle().catch((err) => {
1265					console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVQUEUETITLE_0200 error " + JSON.stringify(err));
1266					expect().assertFail();
1267				});
1268				done();
1269			}).catch((err) => {
1270				console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVQUEUETITLE_0200 error " + JSON.stringify(err));
1271				expect().assertFail();
1272				done();
1273			});
1274		})
1275
1276        /* *
1277         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_GETAVPLAYBACKSTATESYNC_0100
1278         * @tc.name      : controller get Playback State - async
1279         * @tc.desc      : Testing call getAVPlaybackStateSync
1280         * @tc.size      : MediumTest
1281         * @tc.type      : Function
1282         * @tc.level     : Level2
1283         */
1284		it("SUB_MULTIMEDIA_AVSESSION_GETAVPLAYBACKSTATESYNC_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1285			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVPLAYBACKSTATESYNC_0100 start");
1286			try {
1287				let playbackState = {
1288					state: 0
1289				}
1290				await session.setAVPlaybackState(playbackState);
1291				sleep(200);
1292				let currentPlaybackState = controller.getAVPlaybackStateSync();
1293				console.log(`Get playback state: ${playbackState}`);
1294				expect(currentPlaybackState.state).assertEqual(0);
1295			} catch (err) {
1296				expect().assertFail();
1297			}
1298			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVPLAYBACKSTATESYNC_0100 finished");
1299			done();
1300		})
1301
1302        /* *
1303         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_GETAVMETADATASYNC_0100
1304         * @tc.name      : controller get metadata - async
1305         * @tc.desc      : Testing call getAVMetadataSync
1306         * @tc.size      : MediumTest
1307         * @tc.type      : Function
1308         * @tc.level     : Level2
1309         */
1310		it("SUB_MULTIMEDIA_AVSESSION_GETAVMETADATASYNC_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1311			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVMETADATASYNC_0100 start");
1312			try {
1313				let metaData = {
1314					assetId: "0"
1315				}
1316				await session.setAVMetadata(metaData);
1317				sleep(200);
1318				let currentMetaData = controller.getAVMetadataSync();
1319				console.log(`Get metadata: ${currentMetaData}`);
1320				expect(currentMetaData.assetId).assertEqual("0");
1321			} catch (err) {
1322				expect().assertFail();
1323			}
1324			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVMETADATASYNC_0100 finished");
1325			done();
1326		})
1327
1328        /* *
1329         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_GETAVQUEUETITLESYNC_0100
1330         * @tc.name      : controller get title of avqueue - async
1331         * @tc.desc      : Testing call getAVQueueTitleSync
1332         * @tc.size      : MediumTest
1333         * @tc.type      : Function
1334         * @tc.level     : Level2
1335         */
1336		it("SUB_MULTIMEDIA_AVSESSION_GETAVQUEUETITLESYNC_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1337			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVQUEUETITLESYNC_0100 start");
1338			try {
1339				await session.setAVQueueTitle(QUEUE_TITLE);
1340				sleep(200);
1341				let currentQueueTitle = controller.getAVQueueTitleSync();
1342				console.log(`Get queue title: ${currentQueueTitle}`);
1343				expect(currentQueueTitle).assertEqual(QUEUE_TITLE);
1344			} catch (err) {
1345				expect().assertFail();
1346			}
1347			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVQUEUETITLESYNC_0100 finished");
1348			done();
1349		})
1350
1351        /* *
1352         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_GETAVQUEUEITEMSYNC_0100
1353         * @tc.name      : controller get items of avqueue - async
1354         * @tc.desc      : Testing call getAVQueueItemsSync
1355         * @tc.size      : MediumTest
1356         * @tc.type      : Function
1357         * @tc.level     : Level2
1358         */
1359		it("SUB_MULTIMEDIA_AVSESSION_GETAVQUEUEITEMSYNC_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1360			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVQUEUEITEMSYNC_0100 start");
1361			try {
1362				await session.setAVQueueItems(ITEMS_ARRAY);
1363				sleep(200);
1364				let currentQueueItem = controller.getAVQueueItemsSync();
1365				console.log(`Get queue item: ${currentQueueItem}`);
1366				expect(currentQueueItem[0].itemId).assertEqual(ITEMS_ARRAY[0].itemId);
1367			} catch (err) {
1368				expect().assertFail();
1369			}
1370			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVQUEUEITEMSYNC_0100 finished");
1371			done();
1372		})
1373
1374        /* *
1375         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_CONTROLLER_GETOUTPUTDEVICESYNC_0100
1376         * @tc.name      : controller get output devices info - async
1377         * @tc.desc      : Testing call getOutputDeviceSync
1378         * @tc.size      : MediumTest
1379         * @tc.type      : Function
1380         * @tc.level     : Level2
1381         */
1382		it("SUB_MULTIMEDIA_AVSESSION_CONTROLLER_GETOUTPUTDEVICESYNC_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1383			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_CONTROLLER_GETOUTPUTDEVICESYNC_0100 start");
1384			try {
1385				let outputDeviceInfo = controller.getOutputDeviceSync();
1386				console.log(`Get output device info: ${outputDeviceInfo}`);
1387				expect(outputDeviceInfo.devices[0].deviceId).assertEqual("0");
1388			} catch (err) {
1389				expect().assertFail();
1390			}
1391			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_CONTROLLER_GETOUTPUTDEVICESYNC_0100 finished");
1392			done();
1393		})
1394
1395        /* *
1396         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_ISACTIVESYNC_0100
1397         * @tc.name      : controller get session isActive - async
1398         * @tc.desc      : Testing call isActiveSync
1399         * @tc.size      : MediumTest
1400         * @tc.type      : Function
1401         * @tc.level     : Level2
1402         */
1403		it("SUB_MULTIMEDIA_AVSESSION_ISACTIVESYNC_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1404			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_ISACTIVESYNC_0100 start");
1405			try {
1406				await session.activate();
1407				sleep(200);
1408				let isActive = controller.isActiveSync();
1409				console.log(`Get session active state: ${isActive}`);
1410				expect(isActive).assertEqual(true);
1411			} catch (err) {
1412				expect().assertFail();
1413			}
1414			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_ISACTIVESYNC_0100 finished");
1415			done();
1416		})
1417
1418        /* *
1419         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_GETVALIDCOMMANDSSYNC_0100
1420         * @tc.name      : controller get session support command - async
1421         * @tc.desc      : Testing call getValidCommandsSync
1422         * @tc.size      : MediumTest
1423         * @tc.type      : Function
1424         * @tc.level     : Level2
1425         */
1426		it("SUB_MULTIMEDIA_AVSESSION_GETVALIDCOMMANDSSYNC_0100", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1427			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETVALIDCOMMANDSSYNC_0100 start");
1428			try {
1429				session.on('play', () => { });
1430				sleep(200);
1431				let validCommands = controller.getValidCommandsSync();
1432				console.log(`Get valid commands: ${validCommands}`);
1433				expect(validCommands[0]).assertEqual('play');
1434			} catch (err) {
1435				expect().assertFail();
1436			}
1437			console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETVALIDCOMMANDSSYNC_0100 finished");
1438			done();
1439		})
1440
1441        /* *
1442         * @tc.number    : SUB_MULTIMEDIA_AVSESSION_GETAVQUEUEITEMS_0300
1443         * @tc.name      : controller get items of AVQueue - promise
1444         * @tc.desc      : Testing call getAVQueueItems(drmScheme)
1445         * @tc.size      : MediumTest
1446         * @tc.type      : Function
1447         * @tc.level     : Level2
1448         */
1449        it("SUB_MULTIMEDIA_AVSESSION_GETAVQUEUEITEMS_0300", TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) {
1450            await session.setAVQueueItems(ITEMS_ARRAY).then(async () => {
1451                await controller.getAVQueueItems().then((items) => {
1452                    console.info(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVQUEUEITEMS_0300 data " + JSON.stringify(items));
1453                    if (items[0].description.drmScheme === ITEMS_ARRAY[0].description.drmScheme){
1454                        expect(true).assertTrue();
1455                    }else{
1456                        expect().assertFail();
1457                        done();
1458                    }
1459                    done();
1460                });
1461            }).catch((err) => {
1462                console.error(TAG + "SUB_MULTIMEDIA_AVSESSION_GETAVQUEUEITEMS_0300 error " + JSON.stringify(err));
1463                expect().assertFail();
1464                done();
1465            });
1466        })
1467    })
1468}
1469