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']); });