mirror of
https://github.com/videojs/video.js.git
synced 2025-07-13 01:30:17 +02:00
Fixed a double loadstart and added readyState catch up events
- Fixed some issue comments - Fixed a double ready event closes #2605 fixes #2588
This commit is contained in:
@ -228,3 +228,52 @@ if (Html5.supportsNativeTextTracks()) {
|
||||
equal(adds[2][0], rems[2][0], 'removetrack event handler removed');
|
||||
});
|
||||
}
|
||||
|
||||
test('should fire makeup events when a video tag is initialized late', function(){
|
||||
let lateInit = Html5.prototype.handleLateInit_;
|
||||
let triggeredEvents = [];
|
||||
let mockHtml5 = {
|
||||
readyListeners: [],
|
||||
ready(listener){
|
||||
this.readyListeners.push(listener);
|
||||
},
|
||||
triggerReady(){
|
||||
this.readyListeners.forEach(function(listener){
|
||||
listener.call(this);
|
||||
}, this);
|
||||
},
|
||||
trigger(type){
|
||||
triggeredEvents.push(type);
|
||||
},
|
||||
on: function(){},
|
||||
off: function(){}
|
||||
};
|
||||
|
||||
function resetMock() {
|
||||
triggeredEvents = {};
|
||||
mockHtml5.readyListeners = [];
|
||||
}
|
||||
|
||||
function testStates(statesObject, expectedEvents) {
|
||||
lateInit.call(mockHtml5, statesObject);
|
||||
mockHtml5.triggerReady();
|
||||
deepEqual(triggeredEvents, expectedEvents, `wrong events triggered for networkState:${statesObject.networkState} and readyState:${statesObject.readyState || 'no readyState'}`);
|
||||
|
||||
// reset mock
|
||||
triggeredEvents = [];
|
||||
mockHtml5.readyListeners = [];
|
||||
}
|
||||
|
||||
// Network States
|
||||
testStates({ networkState: 0, readyState: 0 }, []);
|
||||
testStates({ networkState: 1, readyState: 0 }, ['loadstart']);
|
||||
testStates({ networkState: 2, readyState: 0 }, ['loadstart']);
|
||||
testStates({ networkState: 3, readyState: 0 }, []);
|
||||
|
||||
// Ready States
|
||||
testStates({ networkState: 1, readyState: 0 }, ['loadstart']);
|
||||
testStates({ networkState: 1, readyState: 1 }, ['loadstart', 'loadedmetadata']);
|
||||
testStates({ networkState: 1, readyState: 2 }, ['loadstart', 'loadedmetadata', 'loadeddata']);
|
||||
testStates({ networkState: 1, readyState: 3 }, ['loadstart', 'loadedmetadata', 'loadeddata', 'canplay']);
|
||||
testStates({ networkState: 1, readyState: 4 }, ['loadstart', 'loadedmetadata', 'loadeddata', 'canplay', 'canplaythrough']);
|
||||
});
|
||||
|
Reference in New Issue
Block a user