rx-player
Version:
Canal+ HTML5 Video Player
378 lines (325 loc) • 11.9 kB
text/typescript
import { describe, it, expect } from "vitest";
import type { IHTMLCue } from "../utils";
import {
areNearlyEqual,
getCuesAfter,
getCuesBefore,
removeCuesInfosBetween,
areCuesStartNearlyEqual,
} from "../utils";
describe("HTML Text buffer utils - getCuesBefore", () => {
it("should get the right cues when time is the start of a cue", () => {
const element = document.createElement("div");
const cues = [
{ start: 0, end: 1, element },
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
];
expect(getCuesBefore(cues, 1)).toEqual([{ start: 0, end: 1, element }]);
});
it("should get the right cues when time is between start and end of a cue", () => {
const element = document.createElement("div");
const cues = [
{ start: 0, end: 1, element },
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
];
expect(getCuesBefore(cues, 1.5)).toEqual([
{ start: 0, end: 1, element },
{ start: 1, end: 2, element },
]);
});
it("should get the right cues when time is the end of a cue", () => {
const element = document.createElement("div");
const cues = [
{ start: 0, end: 1, element },
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
];
expect(getCuesBefore(cues, 2)).toEqual([
{ start: 0, end: 1, element },
{ start: 1, end: 2, element },
]);
});
it("should get the right cues when time is between two cues", () => {
const element = document.createElement("div");
const cues = [
{ start: 0, end: 1, element },
{ start: 1, end: 2, element },
{ start: 3, end: 4, element },
];
expect(getCuesBefore(cues, 2.5)).toEqual([
{ start: 0, end: 1, element },
{ start: 1, end: 2, element },
]);
});
it("should return empty array when time is before all cues", () => {
const element = document.createElement("div");
const cues = [
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
];
expect(getCuesBefore(cues, 0)).toEqual([]);
});
it("should return empty array when time is the start of all cues", () => {
const element = document.createElement("div");
const cues = [
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
];
expect(getCuesBefore(cues, 1)).toEqual([]);
});
it("should get the right cues when time is after all cues", () => {
const element = document.createElement("div");
const cues = [
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
];
expect(getCuesBefore(cues, 4.5)).toEqual([
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
]);
});
it("should get the right cues when time is the end of all cues", () => {
const element = document.createElement("div");
const cues = [
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
];
expect(getCuesBefore(cues, 4)).toEqual([
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
]);
});
it("should return empty array if no given cues", () => {
const cues: IHTMLCue[] = [];
expect(getCuesBefore(cues, 3945)).toEqual([]);
});
});
describe("HTML Text buffer utils - getCuesAfter", () => {
it("should get the right cues when time is between start and end of a cue", () => {
const element = document.createElement("div");
const cues = [
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
];
expect(getCuesAfter(cues, 2.5)).toEqual([
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
]);
});
it("should get the right cues when time is a cue start", () => {
const element = document.createElement("div");
const cues = [
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
];
expect(getCuesAfter(cues, 2)).toEqual([
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
]);
});
it("should return an empty arraywhen time is a cue end", () => {
const element = document.createElement("div");
const cues = [
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
];
expect(getCuesAfter(cues, 3)).toEqual([{ start: 3, end: 4, element }]);
});
it("should get the right cues when time is before the start of all cues", () => {
const element = document.createElement("div");
const cues = [
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
];
expect(getCuesAfter(cues, 0)).toEqual([
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
]);
});
it("should get the right cues when time is the start of all cues", () => {
const element = document.createElement("div");
const cues = [
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
];
expect(getCuesAfter(cues, 1)).toEqual([
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
]);
});
it("should return an empty array when time is the end of all cues", () => {
const element = document.createElement("div");
const cues = [
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
];
expect(getCuesAfter(cues, 4)).toEqual([]);
});
it("should return an empty array when time is after the end of all cues", () => {
const element = document.createElement("div");
const cues = [
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
];
expect(getCuesAfter(cues, 5)).toEqual([]);
});
it("should get the right cues when time is between two cues", () => {
const element = document.createElement("div");
const cues = [
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 4, end: 5, element },
];
expect(getCuesAfter(cues, 3.5)).toEqual([{ start: 4, end: 5, element }]);
});
it("should return an empty array when no cues are given", () => {
const cues: IHTMLCue[] = [];
expect(getCuesAfter(cues, 1418)).toEqual([]);
});
});
describe("HTML Text buffer utils - areNearlyEqual", () => {
it("should return false if input number are not nearly equals", () => {
expect(areNearlyEqual(5, 6)).toBe(false);
});
it("should return true if input number are nearly equals", () => {
expect(areNearlyEqual(5, 5.1)).toBe(true);
});
it("should return true if input number are equals", () => {
expect(areNearlyEqual(5, 5)).toBe(true);
});
it("should return false if input number are not nearly equals with delta parameter", () => {
expect(areNearlyEqual(5, 5.1, 0.02)).toBe(false);
});
it("should return true if input number are nearly equals with delta parameter", () => {
expect(areNearlyEqual(5, 5.01, 0.02)).toBe(true);
});
it("should return true if input number are equals with delta parameter", () => {
expect(areNearlyEqual(5, 5, 0.02)).toBe(true);
});
});
describe("HTML Text buffer utils - removeCuesInfosBetween", () => {
it("should remove cues infos between end of a cue and start of another cue", () => {
const element = document.createElement("div");
const cues = [
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
{ start: 4, end: 5, element },
{ start: 5, end: 6, element },
];
const cueInfo = { start: 1, end: 6, cues };
expect(removeCuesInfosBetween(cueInfo, 2, 5)).toEqual([
{ cues: [{ start: 1, end: 2, element }], start: 1, end: 2 },
{ cues: [{ start: 5, end: 6, element }], start: 5, end: 6 },
]);
});
it("should remove cues infos between middle of a cue and middle of another cue", () => {
const element = document.createElement("div");
const cues = [
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
{ start: 3, end: 4, element },
{ start: 4, end: 5, element },
{ start: 5, end: 6, element },
];
const cueInfo = { start: 1, end: 6, cues };
expect(removeCuesInfosBetween(cueInfo, 2.5, 4.5)).toEqual([
{
cues: [
{ start: 1, end: 2, element },
{ start: 2, end: 3, element },
],
start: 1,
end: 2.5,
},
{
cues: [
{ start: 4, end: 5, element },
{ start: 5, end: 6, element },
],
start: 4.5,
end: 6,
},
]);
});
it("should remove cues infos between two cue gaps", () => {
const element = document.createElement("div");
const cues = [
{ start: 1, end: 2, element },
{ start: 3, end: 4, element },
{ start: 5, end: 6, element },
];
const cueInfo = { start: 1, end: 6, cues };
expect(removeCuesInfosBetween(cueInfo, 2.5, 4.5)).toEqual([
{ cues: [{ start: 1, end: 2, element }], start: 1, end: 2.5 },
{ cues: [{ start: 5, end: 6, element }], start: 4.5, end: 6 },
]);
});
});
describe("HTML areCuesStartNearlyEqual", () => {
it("Case 1: should be false", () => {
// * [0, 2] and [2, 4] start are NOT equals
const element = document.createElement("div");
const cues = [{ start: 1, end: 2, element }];
const cueInfo1 = { start: 0, end: 2, cues };
const cueInfo2 = { start: 2, end: 4, cues };
expect(areCuesStartNearlyEqual(cueInfo1, cueInfo2)).toBe(false);
});
it("Case 2: should be true", () => {
// * [0, 2] and [0, 4] start are equals
const element = document.createElement("div");
const cues = [{ start: 1, end: 2, element }];
const cueInfo1 = { start: 0, end: 2, cues };
const cueInfo2 = { start: 0, end: 4, cues };
expect(areCuesStartNearlyEqual(cueInfo1, cueInfo2)).toBe(true);
});
it("Case 3: should be false", () => {
// * [0, 0.1] and [0.101, 2] start are NOT equals
const element = document.createElement("div");
const cues = [{ start: 1, end: 2, element }];
const cueInfo1 = { start: 0, end: 0.1, cues };
const cueInfo2 = { start: 0.101, end: 2, cues };
expect(areCuesStartNearlyEqual(cueInfo1, cueInfo2)).toBe(false);
});
it("Case 4: should be true", () => {
// * [0, 2] and [0.01, 4] start are equals
const element = document.createElement("div");
const cues = [{ start: 1, end: 2, element }];
const cueInfo1 = { start: 0, end: 2, cues };
const cueInfo2 = { start: 0.01, end: 4, cues };
expect(areCuesStartNearlyEqual(cueInfo1, cueInfo2)).toBe(true);
});
it("Case 5: should be false", () => {
// * [0, 100] and [1, 200] start are NOT equals
const element = document.createElement("div");
const cues = [{ start: 1, end: 2, element }];
const cueInfo1 = { start: 0, end: 100, cues };
const cueInfo2 = { start: 2, end: 200, cues };
expect(areCuesStartNearlyEqual(cueInfo1, cueInfo2)).toBe(false);
});
it("Case 6: should be true", () => {
// * [0, 4] and [0.01, 3.99] start should be equals
const element = document.createElement("div");
const cues = [{ start: 0, end: 4, element }];
const cueInfo1 = { start: 0, end: 4, cues };
const cueInfo2 = { start: 0.01, end: 3.99, cues };
expect(areCuesStartNearlyEqual(cueInfo1, cueInfo2)).toBe(true);
});
});