mirror of
https://github.com/DanielnetoDotCom/YouPHPTube
synced 2025-10-04 18:29:39 +02:00
338 lines
7.6 KiB
JavaScript
338 lines
7.6 KiB
JavaScript
/*
|
|
TODO:
|
|
* adplay, contentplay
|
|
* adplaying, contentplaying
|
|
* adloadstart, contentloadstart
|
|
* adended
|
|
* adloadeddata, contentloadeddata
|
|
* adloadedmetadata, contentloadedmetadata
|
|
*/
|
|
|
|
import videojs from 'video.js';
|
|
import '../../examples/basic-ad-plugin/example-plugin.js';
|
|
import QUnit from 'qunit';
|
|
import document from 'global/document';
|
|
|
|
QUnit.module('Events and Prerolls', {
|
|
beforeEach() {
|
|
this.video = document.createElement('video');
|
|
|
|
this.fixture = document.querySelector('#qunit-fixture');
|
|
this.fixture.appendChild(this.video);
|
|
|
|
this.player = videojs(this.video);
|
|
|
|
this.player.exampleAds({
|
|
adServerUrl: '/test/integration/lib/inventory.json'
|
|
});
|
|
|
|
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();
|
|
}
|
|
});
|
|
|
|
QUnit.test('playing event and prerolls: 0 before preroll, 1+ after', function(assert) {
|
|
const done = assert.async();
|
|
|
|
let beforePreroll = true;
|
|
let playingBeforePreroll = 0;
|
|
let playingAfterPreroll = 0;
|
|
|
|
this.player.on('adend', () => {
|
|
beforePreroll = false;
|
|
});
|
|
|
|
this.player.on('playing', () => {
|
|
if (beforePreroll) {
|
|
playingBeforePreroll++;
|
|
} else {
|
|
playingAfterPreroll++;
|
|
}
|
|
});
|
|
|
|
this.player.on(['error', 'aderror'], () => {
|
|
assert.ok(false, 'no errors');
|
|
done();
|
|
});
|
|
|
|
this.player.on('timeupdate', () => {
|
|
if (this.player.currentTime() > 1) {
|
|
assert.equal(playingBeforePreroll, 0, 'no playing before preroll');
|
|
assert.ok(playingAfterPreroll > 0, 'playing after preroll');
|
|
done();
|
|
}
|
|
});
|
|
|
|
this.player.ready(this.player.play);
|
|
|
|
});
|
|
|
|
QUnit.test('ended event and prerolls: not even once', function(assert) {
|
|
const done = assert.async();
|
|
|
|
let ended = 0;
|
|
|
|
this.player.on('ended', () => {
|
|
ended++;
|
|
});
|
|
|
|
this.player.on(['error', 'aderror'], () => {
|
|
assert.ok(false, 'no errors');
|
|
done();
|
|
});
|
|
|
|
this.player.on('timeupdate', () => {
|
|
if (this.player.currentTime() > 1) {
|
|
assert.equal(ended, 0, 'no ended events');
|
|
done();
|
|
}
|
|
});
|
|
|
|
this.player.ready(this.player.play);
|
|
|
|
});
|
|
|
|
QUnit.test('loadstart event and prerolls: 1 before preroll, 0 after', function(assert) {
|
|
const done = assert.async();
|
|
|
|
let beforePreroll = true;
|
|
let loadstartBeforePreroll = 0;
|
|
let loadstartAfterPreroll = 0;
|
|
|
|
this.player.on('adend', () => {
|
|
beforePreroll = false;
|
|
});
|
|
|
|
this.player.on('loadstart', (e) => {
|
|
if (beforePreroll) {
|
|
loadstartBeforePreroll++;
|
|
} else {
|
|
loadstartAfterPreroll++;
|
|
}
|
|
});
|
|
|
|
this.player.on(['error', 'aderror'], () => {
|
|
assert.ok(false, 'no errors');
|
|
done();
|
|
});
|
|
|
|
this.player.on('timeupdate', (e) => {
|
|
if (this.player.currentTime() > 1) {
|
|
assert.equal(loadstartBeforePreroll, 1, 'loadstart before preroll');
|
|
assert.equal(loadstartAfterPreroll, 0, 'loadstart after preroll');
|
|
done();
|
|
}
|
|
});
|
|
|
|
this.player.ready(this.player.play);
|
|
|
|
});
|
|
|
|
QUnit.test('loadedmetadata event and prerolls: 1 before preroll, 0 after', function(assert) {
|
|
const done = assert.async();
|
|
|
|
let beforePreroll = true;
|
|
let loadedmetadataBeforePreroll = 0;
|
|
let loadedmetadataAfterPreroll = 0;
|
|
|
|
this.player.on('adend', () => {
|
|
beforePreroll = false;
|
|
});
|
|
|
|
this.player.on('loadedmetadata', (e) => {
|
|
if (beforePreroll) {
|
|
loadedmetadataBeforePreroll++;
|
|
} else {
|
|
loadedmetadataAfterPreroll++;
|
|
}
|
|
});
|
|
|
|
this.player.on(['error', 'aderror'], () => {
|
|
assert.ok(false, 'no errors');
|
|
done();
|
|
});
|
|
|
|
this.player.on('timeupdate', (e) => {
|
|
if (this.player.currentTime() > 1) {
|
|
assert.equal(loadedmetadataBeforePreroll, 1, 'loadedmetadata before preroll');
|
|
assert.equal(loadedmetadataAfterPreroll, 0, 'loadedmetadata after preroll');
|
|
done();
|
|
}
|
|
});
|
|
|
|
this.player.ready(this.player.play);
|
|
|
|
});
|
|
|
|
QUnit.test('loadeddata event and prerolls: 1 before preroll, 0 after', function(assert) {
|
|
const done = assert.async();
|
|
|
|
let beforePreroll = true;
|
|
let loadeddataBeforePreroll = 0;
|
|
let loadeddataAfterPreroll = 0;
|
|
|
|
this.player.on('adend', () => {
|
|
beforePreroll = false;
|
|
});
|
|
|
|
this.player.on('loadeddata', (e) => {
|
|
if (beforePreroll) {
|
|
loadeddataBeforePreroll++;
|
|
} else {
|
|
loadeddataAfterPreroll++;
|
|
}
|
|
});
|
|
|
|
this.player.on(['error', 'aderror'], () => {
|
|
assert.ok(false, 'no errors');
|
|
done();
|
|
});
|
|
|
|
this.player.on('timeupdate', (e) => {
|
|
if (this.player.currentTime() > 1) {
|
|
assert.equal(loadeddataBeforePreroll, 1, 'loadeddata before preroll');
|
|
assert.equal(loadeddataAfterPreroll, 0, 'loadeddata after preroll');
|
|
done();
|
|
}
|
|
});
|
|
|
|
this.player.ready(this.player.play);
|
|
|
|
});
|
|
|
|
QUnit.test('play event and prerolls: 1 before preroll, 0 after', function(assert) {
|
|
const done = assert.async();
|
|
|
|
let beforePreroll = true;
|
|
let playBeforePreroll = 0;
|
|
let playAfterPreroll = 0;
|
|
|
|
this.player.on('adend', () => {
|
|
beforePreroll = false;
|
|
});
|
|
|
|
this.player.on('play', () => {
|
|
if (beforePreroll) {
|
|
playBeforePreroll++;
|
|
} else {
|
|
playAfterPreroll++;
|
|
}
|
|
});
|
|
|
|
this.player.on(['error', 'aderror'], () => {
|
|
assert.ok(false, 'no errors');
|
|
done();
|
|
});
|
|
|
|
this.player.on('timeupdate', () => {
|
|
if (this.player.currentTime() > 1) {
|
|
// 2
|
|
assert.equal(playBeforePreroll, 1, 'play before preroll');
|
|
assert.equal(playAfterPreroll, 0, 'play after preroll');
|
|
done();
|
|
}
|
|
});
|
|
|
|
this.player.ready(this.player.play);
|
|
|
|
});
|
|
|
|
QUnit.test('Event prefixing and prerolls', function(assert) {
|
|
const done = assert.async();
|
|
|
|
let beforePreroll = true;
|
|
const seenInAdMode = [];
|
|
const seenInContentResuming = [];
|
|
const seenOutsideAdModeBefore = [];
|
|
const seenOutsideAdModeAfter = [];
|
|
|
|
this.player.on('adend', () => {
|
|
beforePreroll = false;
|
|
});
|
|
|
|
let events = [
|
|
'suspend',
|
|
'abort',
|
|
'error',
|
|
'emptied',
|
|
'stalled',
|
|
'canplay',
|
|
'canplaythrough',
|
|
'waiting',
|
|
'seeking',
|
|
'durationchange',
|
|
'timeupdate',
|
|
'progress',
|
|
'pause',
|
|
'ratechange',
|
|
'volumechange',
|
|
'firstplay',
|
|
'suspend'
|
|
];
|
|
|
|
events = events.concat(events.map(function(e) {
|
|
return 'ad' + e;
|
|
}));
|
|
|
|
events = events.concat(events.map(function(e) {
|
|
return 'content' + e;
|
|
}));
|
|
|
|
this.player.on(events, (e) => {
|
|
const str = e.type;
|
|
|
|
if (this.player.ads.isInAdMode()) {
|
|
if (this.player.ads.isContentResuming()) {
|
|
seenInContentResuming.push(str);
|
|
} else {
|
|
seenInAdMode.push(str);
|
|
}
|
|
} else if (beforePreroll) {
|
|
seenOutsideAdModeBefore.push(str);
|
|
} else {
|
|
seenOutsideAdModeAfter.push(str);
|
|
}
|
|
});
|
|
|
|
this.player.on(['error', 'aderror'], () => {
|
|
assert.ok(false, 'no errors');
|
|
done();
|
|
});
|
|
|
|
this.player.on('timeupdate', () => {
|
|
if (this.player.currentTime() > 0) {
|
|
|
|
seenOutsideAdModeBefore.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');
|
|
});
|
|
|
|
seenInAdMode.forEach((event) => {
|
|
assert.ok(/^ad/.test(event), event + ' has ad prefix during preroll');
|
|
});
|
|
|
|
seenInContentResuming.forEach((event) => {
|
|
assert.ok(/^content/.test(event), event + ' has content prefix during preroll');
|
|
});
|
|
|
|
seenOutsideAdModeAfter.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');
|
|
});
|
|
|
|
done();
|
|
}
|
|
});
|
|
|
|
this.player.ready(this.player.play);
|
|
|
|
});
|