mirror of
https://github.com/DanielnetoDotCom/YouPHPTube
synced 2025-10-05 02:39:46 +02:00
151 lines
3.6 KiB
JavaScript
151 lines
3.6 KiB
JavaScript
/*
|
|
TODO:
|
|
* timeupdate, adtimeupdate, contenttimeupdate
|
|
* loadstart, adloadstart, contentloadstart
|
|
* play, adplay, contentplay
|
|
* loadeddata, adloadeddata, contentloadeddata
|
|
* loadedmetadata, adloadedmetadata, contentloadedmetadata
|
|
*/
|
|
|
|
import videojs from 'video.js';
|
|
import QUnit from 'qunit';
|
|
import document from 'global/document';
|
|
import '../../examples/stitched-ad-plugin/plugin.js';
|
|
|
|
const originalTestTimeout = QUnit.config.testTimeout;
|
|
|
|
QUnit.module('Events and Stitched Ads', {
|
|
|
|
before() {
|
|
QUnit.config.testTimeout = 30000;
|
|
},
|
|
|
|
beforeEach() {
|
|
this.video = document.createElement('video');
|
|
|
|
this.fixture = document.querySelector('#qunit-fixture');
|
|
this.fixture.appendChild(this.video);
|
|
|
|
this.player = videojs(this.video);
|
|
this.player.exampleStitchedAds();
|
|
|
|
this.player.src({
|
|
src: 'http://vjs.zencdn.net/v/oceans.webm',
|
|
type: 'video/webm'
|
|
});
|
|
|
|
// Mute the player to allow playback without user interaction
|
|
this.player.muted(true);
|
|
},
|
|
|
|
afterEach() {
|
|
this.player.dispose();
|
|
},
|
|
|
|
after() {
|
|
QUnit.config.testTimeout = originalTestTimeout;
|
|
}
|
|
});
|
|
|
|
QUnit.test('Stitched Ads', function(assert) {
|
|
const done = assert.async();
|
|
|
|
const seenBeforePreroll = [];
|
|
const seenDuringPreroll = [];
|
|
const seenAfterPreroll = [];
|
|
const seenDuringMidroll = [];
|
|
const seenAfterMidroll = [];
|
|
let currentEventLog = seenBeforePreroll;
|
|
let finish;
|
|
|
|
let events = [
|
|
'suspend',
|
|
'abort',
|
|
'error',
|
|
'emptied',
|
|
'stalled',
|
|
'canplay',
|
|
'canplaythrough',
|
|
'waiting',
|
|
'seeking',
|
|
'durationchange',
|
|
'progress',
|
|
'pause',
|
|
'ratechange',
|
|
'volumechange',
|
|
'firstplay',
|
|
'suspend',
|
|
'playing',
|
|
'ended'
|
|
];
|
|
|
|
events = events
|
|
.concat(events.map(e => 'ad' + e))
|
|
.concat(events.map(e => 'content' + e));
|
|
|
|
const {player} = this;
|
|
|
|
player.on('adstart', () => {
|
|
if (currentEventLog === seenBeforePreroll) {
|
|
currentEventLog = seenDuringPreroll;
|
|
} else {
|
|
currentEventLog = seenDuringMidroll;
|
|
}
|
|
});
|
|
|
|
player.on('adend', () => {
|
|
if (currentEventLog === seenDuringPreroll) {
|
|
currentEventLog = seenAfterPreroll;
|
|
} else {
|
|
currentEventLog = seenAfterMidroll;
|
|
}
|
|
});
|
|
|
|
player.on(events, (e) => currentEventLog.push(e.type));
|
|
|
|
const onError = () => {
|
|
assert.ok(false, 'no errors');
|
|
finish();
|
|
};
|
|
|
|
const onTimeupdate = () => {
|
|
videojs.log(player.currentTime(), player.currentSrc());
|
|
|
|
if (player.currentTime() > 21) {
|
|
seenBeforePreroll.forEach(event => {
|
|
assert.ok(!/^ad/.test(event), event + ' has no ad prefix before preroll');
|
|
assert.ok(!/^content/.test(event), event + ' has no content prefix before preroll');
|
|
});
|
|
|
|
seenDuringPreroll.forEach(event => {
|
|
assert.ok(/^ad/.test(event), event + ' has ad prefix during preroll');
|
|
});
|
|
|
|
seenAfterPreroll.forEach(event => {
|
|
assert.ok(!/^ad/.test(event), event + ' has no ad prefix after preroll');
|
|
assert.ok(!/^content/.test(event), event + ' has no content prefix after preroll');
|
|
});
|
|
|
|
seenDuringMidroll.forEach(event => {
|
|
assert.ok(/^ad/.test(event), event + ' has ad prefix during midroll');
|
|
});
|
|
|
|
seenAfterMidroll.forEach(event => {
|
|
assert.ok(!/^ad/.test(event), event + ' has no ad prefix after midroll');
|
|
assert.ok(!/^content/.test(event), event + ' has no content prefix after midroll');
|
|
});
|
|
|
|
finish();
|
|
}
|
|
};
|
|
|
|
finish = () => {
|
|
player.off('timeupdate', onTimeupdate);
|
|
player.off(['error', 'aderror'], onError);
|
|
done();
|
|
};
|
|
|
|
player.on(['error', 'aderror'], onError);
|
|
player.on('timeupdate', onTimeupdate);
|
|
player.ready(player.play);
|
|
});
|