forked from EXT/VR180-Web-Player
94 lines
2.2 KiB
JavaScript
94 lines
2.2 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {
|
|
createMediaAdapter,
|
|
VideoMediaAdapter
|
|
} from '../vr180player/media/media-adapter.js';
|
|
|
|
function createVideo({
|
|
ended = false,
|
|
paused = false,
|
|
source = 'https://cdn.example.com/videos/demo-video.mp4',
|
|
title = ''
|
|
} = {}) {
|
|
return {
|
|
classList: {
|
|
values: [],
|
|
add(value) {
|
|
this.values.push(value);
|
|
}
|
|
},
|
|
ended,
|
|
loadCount: 0,
|
|
paused,
|
|
style: { display: '' },
|
|
getAttribute(name) {
|
|
return name === 'title' ? title : '';
|
|
},
|
|
load() {
|
|
this.loadCount += 1;
|
|
},
|
|
querySelector(selector) {
|
|
if (selector !== 'source' || !source) {
|
|
return null;
|
|
}
|
|
|
|
return { src: source };
|
|
}
|
|
};
|
|
}
|
|
|
|
test('VideoMediaAdapter exposes video capabilities and lifecycle helpers', () => {
|
|
const video = createVideo({ title: 'Demo Title' });
|
|
const adapter = new VideoMediaAdapter(video);
|
|
|
|
assert.deepEqual(adapter.capabilities, {
|
|
audio: true,
|
|
dynamicTexture: true,
|
|
playback: true,
|
|
timeline: true
|
|
});
|
|
assert.equal(adapter.element, video);
|
|
assert.equal(adapter.textureSource, video);
|
|
assert.equal(adapter.getTitle(), 'Demo Title');
|
|
|
|
adapter.hideElement();
|
|
assert.equal(video.style.display, 'none');
|
|
|
|
adapter.showElement();
|
|
assert.equal(video.style.display, '');
|
|
|
|
adapter.load();
|
|
assert.equal(video.loadCount, 1);
|
|
});
|
|
|
|
test('VideoMediaAdapter falls back to source filename and tracks texture update state', () => {
|
|
const video = createVideo({ source: 'https://cdn.example.com/media/flat-sbs-demo.mp4' });
|
|
const adapter = new VideoMediaAdapter(video);
|
|
|
|
assert.equal(adapter.getTitle(), 'flat sbs demo');
|
|
assert.equal(adapter.shouldUpdateTexture(), true);
|
|
|
|
video.paused = true;
|
|
assert.equal(adapter.shouldUpdateTexture(), false);
|
|
|
|
video.paused = false;
|
|
video.ended = true;
|
|
assert.equal(adapter.shouldUpdateTexture(), false);
|
|
});
|
|
|
|
test('createMediaAdapter finds and marks the supported video element', () => {
|
|
const video = createVideo();
|
|
const playerContainer = {
|
|
querySelector(selector) {
|
|
return selector === 'video' ? video : null;
|
|
}
|
|
};
|
|
|
|
const adapter = createMediaAdapter(playerContainer);
|
|
|
|
assert.ok(adapter instanceof VideoMediaAdapter);
|
|
assert.equal(adapter.element, video);
|
|
assert.deepEqual(video.classList.values, ['vrwp-video']);
|
|
});
|