rx-player
Version:
Canal+ HTML5 Video Player
72 lines (64 loc) • 2.02 kB
text/typescript
import { describe, beforeEach, it, expect, vi, afterEach } from "vitest";
import log from "../../log";
import globalScope from "../../utils/global_scope";
import makeCue from "../make_vtt_cue";
const logWarn = vi.spyOn(log, "warn").mockImplementation(() => {
/* noop */
});
describe("Compat - makeVTTCue", () => {
afterEach(() => {
logWarn.mockClear();
});
class MockVTTCue {
public startTime: number;
public endTime: number;
public text: string;
constructor(start: number, end: number, text: string) {
this.startTime = start;
this.endTime = end;
this.text = text;
}
}
const gs = globalScope as {
VTTCue?: unknown;
TextTrackCue?: unknown;
};
const ogVTTuCue = gs.VTTCue;
const ogTextTrackCue = gs.TextTrackCue;
beforeEach(() => {
vi.resetModules();
gs.VTTCue = ogVTTuCue;
gs.TextTrackCue = ogTextTrackCue;
});
it("should throw if nor VTTCue nor TextTrackCue is available", () => {
gs.VTTCue = undefined;
gs.TextTrackCue = undefined;
let result: unknown;
let error: unknown;
try {
result = makeCue(5, 10, "toto");
} catch (e: unknown) {
error = e;
}
expect(error).toBeInstanceOf(Error);
expect((error as Error).message).toEqual("VTT cues not supported in your target");
expect(result).toBe(undefined);
expect(logWarn).not.toHaveBeenCalled();
});
it("should warn and not create anything if start time is after end time", () => {
gs.VTTCue = MockVTTCue;
const result = makeCue(12, 10, "toto");
expect(result).toBeNull();
expect(logWarn).toHaveBeenCalledTimes(1);
expect(logWarn).toHaveBeenCalledWith("text", "Invalid cue times: start after end.", {
endTime: 10,
startTime: 12,
});
});
it("should create a new VTT Cue in other cases", () => {
gs.VTTCue = MockVTTCue;
const result = makeCue(10, 12, "toto");
expect(result).toEqual(new MockVTTCue(10, 12, "toto"));
expect(logWarn).not.toHaveBeenCalled();
});
});