98 lines
2.6 KiB
JavaScript
98 lines
2.6 KiB
JavaScript
const fs = require('node:fs');
|
|
const path = require('node:path');
|
|
const vm = require('node:vm');
|
|
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
function loadScript(scriptPath, sandbox) {
|
|
const source = fs.readFileSync(scriptPath, 'utf8');
|
|
vm.runInNewContext(source, sandbox, { filename: scriptPath });
|
|
}
|
|
|
|
test('webpage preloading only targets the next slide', () => {
|
|
const sandbox = {
|
|
window: null,
|
|
Date,
|
|
Array,
|
|
Number,
|
|
String,
|
|
Boolean,
|
|
Object,
|
|
Math,
|
|
console,
|
|
escapeHtml(value) {
|
|
return String(value || '');
|
|
},
|
|
currentPlaylistSignature: 'signature',
|
|
slides: [],
|
|
index: 0,
|
|
activeSlidesCacheKey: '',
|
|
activeSlidesCacheValue: [],
|
|
renderCacheViewportKey: '',
|
|
preloadSignature: '',
|
|
preloadContainer: null
|
|
};
|
|
sandbox.window = sandbox;
|
|
|
|
loadScript(path.join(__dirname, '..', 'src', 'player', 'public', 'js', 'player-page-playlist.js'), sandbox);
|
|
|
|
const current = { id: 1 };
|
|
const next = { id: 2 };
|
|
const later = { id: 3 };
|
|
|
|
assert.equal(sandbox.getWebpagePreloadSlides([current, next, later], 0).map((slide) => slide.id).join(','), '2');
|
|
assert.equal(sandbox.getWebpagePreloadSlides([current, next, later], 1).map((slide) => slide.id).join(','), '3');
|
|
assert.equal(sandbox.getWebpagePreloadSlides([current, next, later], 2).map((slide) => slide.id).join(','), '');
|
|
});
|
|
|
|
test('rtmp warmups only target the next slide', () => {
|
|
const sandbox = {
|
|
window: null,
|
|
Date,
|
|
Array,
|
|
Number,
|
|
String,
|
|
Boolean,
|
|
Object,
|
|
Math,
|
|
console,
|
|
fetch() {
|
|
throw new Error('not expected');
|
|
},
|
|
currentPlaylistSkipUnavailableRtmp: false,
|
|
videoRegionRenderVersion: 0,
|
|
slideMarkupCache: Object.create(null),
|
|
slides: [],
|
|
index: 0,
|
|
setTimeout,
|
|
clearTimeout,
|
|
document: {
|
|
createElement() {
|
|
return {
|
|
className: '',
|
|
setAttribute() {},
|
|
appendChild() {},
|
|
parentNode: null,
|
|
addEventListener() {}
|
|
};
|
|
},
|
|
body: {
|
|
appendChild() {}
|
|
}
|
|
},
|
|
pulsePlayerRegionTypes: {
|
|
register() {}
|
|
}
|
|
};
|
|
sandbox.window = sandbox;
|
|
|
|
loadScript(path.join(__dirname, '..', 'src', 'player', 'regions', 'rtmp.js'), sandbox);
|
|
|
|
const current = { id: 1 };
|
|
const next = { id: 2 };
|
|
const later = { id: 3 };
|
|
|
|
assert.equal(sandbox.getRtmpWarmupSlides([current, next, later], 0).map((slide) => slide.id).join(','), '2');
|
|
assert.equal(sandbox.getRtmpWarmupSlides([current, next, later], 1).map((slide) => slide.id).join(','), '3');
|
|
assert.equal(sandbox.getRtmpWarmupSlides([current, next, later], 2).map((slide) => slide.id).join(','), '');
|
|
}); |