fix: guard video.play() for jsdom and fix Hls mock case mismatch
CI / test (pull_request) Successful in 16s
CI / test (pull_request) Successful in 16s
- Defensive null check on video.play() return value (jsdom returns undefined) - Fix test mock: win.Hls (not win.HLS) to match viewer.js window.Hls reference - All 39/39 tests now pass
This commit is contained in:
1 parent
23a2af6cad
commit
0d4b62c485
2 files changed
+6
-4
No files matched your search
@@ -62,7 +62,7 @@ function createBrowserEnv({ storageData = {}, url = 'https://example.com/viewer/
|
|||||||
// 'native' mode sets HLS = undefined so viewer.js takes the Safari native path.
|
// 'native' mode sets HLS = undefined so viewer.js takes the Safari native path.
|
||||||
const hlsCalls = { instances: [], loaded: false };
|
const hlsCalls = { instances: [], loaded: false };
|
||||||
if (hlsMode === 'mocked') {
|
if (hlsMode === 'mocked') {
|
||||||
win.HLS = class MockHLS {
|
win.Hls = class MockHLS {
|
||||||
constructor(opts) {
|
constructor(opts) {
|
||||||
hlsCalls.instances.push({ opts, destroyed: false, events: {}, source: null, media: null });
|
hlsCalls.instances.push({ opts, destroyed: false, events: {}, source: null, media: null });
|
||||||
}
|
}
|
||||||
@@ -103,7 +103,7 @@ function createBrowserEnv({ storageData = {}, url = 'https://example.com/viewer/
|
|||||||
} else if (hlsMode === 'native') {
|
} else if (hlsMode === 'native') {
|
||||||
// Simulate Safari — window.HLS exists but isSupported() returns false.
|
// Simulate Safari — window.HLS exists but isSupported() returns false.
|
||||||
// viewer.js then falls through to video.src = manifestUrl (native HLS).
|
// viewer.js then falls through to video.src = manifestUrl (native HLS).
|
||||||
win.HLS = class MockHLS_Native {
|
win.Hls = class MockHLS_Native {
|
||||||
static isSupported() {
|
static isSupported() {
|
||||||
return false; // Safari has native HLS, Hls.js is not needed
|
return false; // Safari has native HLS, Hls.js is not needed
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,8 @@ function playHls(video, manifestUrl, panel) {
|
|||||||
if (!window.Hls || !window.Hls.isSupported()) {
|
if (!window.Hls || !window.Hls.isSupported()) {
|
||||||
console.log('[goon-viewer] Native HLS support detected, using direct source');
|
console.log('[goon-viewer] Native HLS support detected, using direct source');
|
||||||
video.src = manifestUrl;
|
video.src = manifestUrl;
|
||||||
video.play().catch(() => { /* autoplay blocked — user interaction required */ });
|
const p = video.play();
|
||||||
|
if (p) p.catch(() => { /* autoplay blocked — user interaction required */ });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,7 +56,8 @@ function playHls(video, manifestUrl, panel) {
|
|||||||
|
|
||||||
hls.on(window.Hls.Events.MANIFEST_PARSED, () => {
|
hls.on(window.Hls.Events.MANIFEST_PARSED, () => {
|
||||||
console.log('[goon-viewer] HLS manifest parsed, playing');
|
console.log('[goon-viewer] HLS manifest parsed, playing');
|
||||||
video.play().catch(() => { /* autoplay blocked */ });
|
const p = video.play();
|
||||||
|
if (p) p.catch(() => { /* autoplay blocked */ });
|
||||||
});
|
});
|
||||||
|
|
||||||
hls.on(window.Hls.Events.LEVEL_SWITCHED, () => {
|
hls.on(window.Hls.Events.LEVEL_SWITCHED, () => {
|
||||||
|
|||||||
Reference in new issue
Block a user