@@ -11,12 +11,13 @@ import { Events } from '../../../src/events';
1111import Hls from '../../../src/hls' ;
1212import { Fragment } from '../../../src/loader/fragment' ;
1313import KeyLoader from '../../../src/loader/key-loader' ;
14+ import { LevelDetails } from '../../../src/loader/level-details' ;
1415import { LoadStats } from '../../../src/loader/load-stats' ;
1516import { Level } from '../../../src/types/level' ;
1617import { PlaylistLevelType } from '../../../src/types/loader' ;
1718import { AttrList } from '../../../src/utils/attr-list' ;
1819import { adjustSlidingStart } from '../../../src/utils/discontinuities' ;
19- import type { LevelDetails } from '../../../src/loader/level-details ' ;
20+ import type { MediaFragment } from '../../../src/loader/fragment ' ;
2021import type {
2122 AudioTrackLoadedData ,
2223 AudioTrackSwitchingData ,
@@ -137,6 +138,12 @@ describe('AudioStreamController', function () {
137138 let audioStreamController : AudioStreamControllerTestable ;
138139 let tracks : Level [ ] ;
139140
141+ function cloneLevelDetails ( options : Partial < LevelDetails > & { url : string } ) {
142+ return Object . assign ( new LevelDetails ( options . url ) , {
143+ ...options ,
144+ } ) ;
145+ }
146+
140147 beforeEach ( function ( ) {
141148 sandbox = sinon . createSandbox ( ) ;
142149 hls = new Hls ( ) ;
@@ -187,32 +194,33 @@ describe('AudioStreamController', function () {
187194 live : boolean ,
188195 ) {
189196 const targetduration = 10 ;
190- const fragments : Fragment [ ] = Array . from ( new Array ( endSN - startSN ) ) . map (
191- ( u , i ) => {
192- const frag = new Fragment ( type , '' ) ;
193- frag . sn = i + startSN ;
194- frag . cc = Math . floor ( ( i + startSN ) / 10 ) ;
195- frag . setStart ( i * targetduration ) ;
196- frag . duration = targetduration ;
197- return frag ;
198- } ,
199- ) ;
197+ const fragments : MediaFragment [ ] = Array . from (
198+ new Array ( endSN - startSN ) ,
199+ ) . map ( ( u , i ) => {
200+ const frag = new Fragment ( type , '' ) as MediaFragment ;
201+ frag . sn = i + startSN ;
202+ frag . cc = Math . floor ( ( i + startSN ) / 10 ) ;
203+ frag . setStart ( i * targetduration ) ;
204+ frag . duration = targetduration ;
205+ return frag ;
206+ } ) ;
207+ const details : LevelDetails = new LevelDetails ( '' ) ;
208+ details . live = live ;
209+ details . advanced = true ;
210+ details . updated = true ;
211+ details . fragments = fragments ;
212+ details . targetduration = targetduration ;
213+ details . totalduration = targetduration * fragments . length ;
214+ details . startSN = startSN ;
215+ details . endSN = endSN ;
216+ Object . defineProperty ( details , 'startCC' , {
217+ get : ( ) => fragments [ 0 ] . cc ,
218+ } ) ;
219+ Object . defineProperty ( details , 'endCC' , {
220+ get : ( ) => fragments [ fragments . length - 1 ] . cc ,
221+ } ) ;
200222 return {
201- details : {
202- live,
203- advanced : true ,
204- updated : true ,
205- fragments,
206- get endCC ( ) : number {
207- return fragments [ fragments . length - 1 ] . cc ;
208- } ,
209- get startCC ( ) : number {
210- return fragments [ 0 ] . cc ;
211- } ,
212- targetduration,
213- startSN,
214- endSN,
215- } as unknown as LevelDetails ,
223+ details,
216224 id : 0 ,
217225 networkDetails : new Response ( 'ok' ) ,
218226 stats : new LoadStats ( ) ,
@@ -265,7 +273,9 @@ describe('AudioStreamController', function () {
265273
266274 it ( 'should update the audio track LevelDetails from the track loaded data' , function ( ) {
267275 audioStreamController . levels = tracks ;
268- audioStreamController . mainDetails = mainLoadedData . details ;
276+ audioStreamController . mainDetails = cloneLevelDetails (
277+ mainLoadedData . details ,
278+ ) ;
269279
270280 audioStreamController . onAudioTrackLoaded (
271281 Events . AUDIO_TRACK_LOADED ,
@@ -319,9 +329,9 @@ describe('AudioStreamController', function () {
319329 // Audio track ends on DISCONTINUITY-SEQUENCE 1 (main ends at 0)
320330 trackLoadedData = getTrackLoadedData ( 7 , 12 , true ) ;
321331 mainLoadedData = getLevelLoadedData ( 1 , 6 , true ) ;
322- audioStreamController . mainDetails = {
323- ... mainLoadedData . details ,
324- } as unknown as LevelDetails ;
332+ audioStreamController . mainDetails = cloneLevelDetails (
333+ mainLoadedData . details ,
334+ ) ;
325335
326336 expect ( trackLoadedData . details . endCC ) . to . equal ( 1 ) ;
327337 expect ( audioStreamController . mainDetails . endCC ) . to . equal ( 0 ) ;
@@ -360,10 +370,10 @@ describe('AudioStreamController', function () {
360370 trackLoadedData . details . live = mainLoadedData . details . live = true ;
361371 trackLoadedData . details . updated = mainLoadedData . details . updated = true ;
362372 // Main live details are present but expired (see LevelDetails `get expired()` and `get age()`)
363- audioStreamController . mainDetails = {
373+ audioStreamController . mainDetails = cloneLevelDetails ( {
364374 ...mainLoadedData . details ,
365- expired : true ,
366- } as unknown as LevelDetails ;
375+ advancedDateTime : 1 , // expired date time (must be > 0)
376+ } ) ;
367377
368378 audioStreamController . onAudioTrackLoaded (
369379 Events . AUDIO_TRACK_LOADED ,
@@ -397,9 +407,7 @@ describe('AudioStreamController', function () {
397407 trackLoadedData = getTrackLoadedData ( 7 , 12 , true ) ;
398408 mainLoadedData = getLevelLoadedData ( 1 , 6 , true ) ;
399409
400- audioStreamController . mainDetails = {
401- ...mainLoadedData . details ,
402- } as unknown as LevelDetails ;
410+ audioStreamController . mainDetails = mainLoadedData . details ;
403411
404412 expect ( trackLoadedData . details . endCC ) . to . equal ( 1 ) ;
405413 expect ( audioStreamController . mainDetails . endCC ) . to . equal ( 0 ) ;
0 commit comments