forked from EXT/VR180-Web-Player
This commit is contained in:
73
tests/texture-manager.test.mjs
Normal file
73
tests/texture-manager.test.mjs
Normal file
@@ -0,0 +1,73 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { VideoTextureManager } from '../vr180player/rendering/texture-manager.js';
|
||||
|
||||
function createTexture(name) {
|
||||
return {
|
||||
disposed: false,
|
||||
name,
|
||||
needsUpdate: false,
|
||||
dispose() {
|
||||
this.disposed = true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function createVideo({ paused = false, ended = false } = {}) {
|
||||
return { ended, paused };
|
||||
}
|
||||
|
||||
test('VideoTextureManager replaces the previous texture when creating a new one', () => {
|
||||
const created = [];
|
||||
const manager = new VideoTextureManager(createVideo(), () => {
|
||||
const texture = createTexture(`texture-${created.length}`);
|
||||
created.push(texture);
|
||||
return texture;
|
||||
});
|
||||
|
||||
const first = manager.create();
|
||||
const second = manager.create();
|
||||
|
||||
assert.equal(first.disposed, true);
|
||||
assert.equal(second.disposed, false);
|
||||
assert.equal(manager.current, second);
|
||||
assert.equal(created.length, 2);
|
||||
});
|
||||
|
||||
test('VideoTextureManager assigns and clears material maps', () => {
|
||||
const material = { map: null, needsUpdate: false };
|
||||
const manager = new VideoTextureManager(createVideo(), () => createTexture('assigned'));
|
||||
|
||||
const texture = manager.assignToMaterial(material);
|
||||
|
||||
assert.equal(material.map, texture);
|
||||
assert.equal(material.needsUpdate, true);
|
||||
assert.equal(manager.current, texture);
|
||||
|
||||
material.needsUpdate = false;
|
||||
manager.clearMaterial(material);
|
||||
|
||||
assert.equal(texture.disposed, true);
|
||||
assert.equal(material.map, null);
|
||||
assert.equal(material.needsUpdate, true);
|
||||
assert.equal(manager.current, null);
|
||||
});
|
||||
|
||||
test('VideoTextureManager only marks textures dirty while playback is active', () => {
|
||||
const video = createVideo();
|
||||
const manager = new VideoTextureManager(video, () => createTexture('playing'));
|
||||
const texture = manager.create();
|
||||
|
||||
manager.updateIfPlaying();
|
||||
assert.equal(texture.needsUpdate, true);
|
||||
|
||||
texture.needsUpdate = false;
|
||||
video.paused = true;
|
||||
manager.updateIfPlaying();
|
||||
assert.equal(texture.needsUpdate, false);
|
||||
|
||||
video.paused = false;
|
||||
video.ended = true;
|
||||
manager.updateIfPlaying();
|
||||
assert.equal(texture.needsUpdate, false);
|
||||
});
|
||||
Reference in New Issue
Block a user