@@ -165,6 +165,10 @@ describe('MediaSourceEngine', () => {
165
165
videoSourceBuffer = createMockSourceBuffer ( ) ;
166
166
mockMediaSource = createMockMediaSource ( ) ;
167
167
mockMediaSource . addSourceBuffer . and . callFake ( ( mimeType ) => {
168
+ if ( mockMediaSource . readyState !== 'open' ) {
169
+ // https://w3c.github.io/media-source/#addsourcebuffer-method
170
+ throw new Error ( 'InvalidStateError' ) ;
171
+ }
168
172
const type = mimeType . split ( '/' ) [ 0 ] ;
169
173
const buffer = type == 'audio' ? audioSourceBuffer : videoSourceBuffer ;
170
174
@@ -200,6 +204,7 @@ describe('MediaSourceEngine', () => {
200
204
createMediaSourceSpy = jasmine . createSpy ( 'createMediaSource' ) ;
201
205
createMediaSourceSpy . and . callFake ( ( p ) => {
202
206
p . resolve ( ) ;
207
+ mockMediaSource . readyState = 'open' ;
203
208
return mockMediaSource ;
204
209
} ) ;
205
210
// eslint-disable-next-line no-restricted-syntax
@@ -400,6 +405,32 @@ describe('MediaSourceEngine', () => {
400
405
expect ( shaka . text . TextEngine ) . not . toHaveBeenCalled ( ) ;
401
406
} ) ;
402
407
408
+ it ( 'creates SourceBuffers when MediaSource readyState is closed' ,
409
+ async ( ) => {
410
+ const initObject = new Map ( ) ;
411
+ initObject . set ( ContentType . AUDIO , fakeAudioStream ) ;
412
+ initObject . set ( ContentType . VIDEO , fakeVideoStream ) ;
413
+
414
+ await mediaSourceEngine . open ( ) ;
415
+
416
+ mockMediaSource . readyState = 'closed' ;
417
+ await expectAsync (
418
+ mediaSourceEngine . init ( initObject , false ) ) . not . toBeRejected ( ) ;
419
+ } ) ;
420
+
421
+ it ( 'creates SourceBuffers when MediaSource readyState is ended' ,
422
+ async ( ) => {
423
+ const initObject = new Map ( ) ;
424
+ initObject . set ( ContentType . AUDIO , fakeAudioStream ) ;
425
+ initObject . set ( ContentType . VIDEO , fakeVideoStream ) ;
426
+
427
+ await mediaSourceEngine . open ( ) ;
428
+
429
+ mockMediaSource . readyState = 'ended' ;
430
+ await expectAsync (
431
+ mediaSourceEngine . init ( initObject , false ) ) . not . toBeRejected ( ) ;
432
+ } ) ;
433
+
403
434
it ( 'creates TextEngines for text types' , async ( ) => {
404
435
const initObject = new Map ( ) ;
405
436
initObject . set ( ContentType . TEXT , fakeTextStream ) ;
0 commit comments