зеркало из https://github.com/mozilla/gecko-dev.git
157 строки
3.3 KiB
JavaScript
157 строки
3.3 KiB
JavaScript
"use strict";
|
|
|
|
const { WebVTT } = ChromeUtils.import("resource://gre/modules/vtt.jsm");
|
|
|
|
let fakeWindow = {
|
|
/* eslint-disable object-shorthand */
|
|
VTTCue: function() {},
|
|
VTTRegion: function() {},
|
|
/* eslint-enable object-shorthand */
|
|
};
|
|
|
|
// We have a better parser check in WPT. Here I want to check that incomplete
|
|
// lines are correctly parsable.
|
|
let tests = [
|
|
// Signature
|
|
{ input: ["WEBVTT"], cue: 0, region: 0 },
|
|
{ input: ["", "WE", "BVT", "T"], cue: 0, region: 0 },
|
|
{ input: ["WEBVTT - This file has no cues."], cue: 0, region: 0 },
|
|
{ input: ["WEBVTT", " - ", "This file has no cues."], cue: 0, region: 0 },
|
|
|
|
// Body with IDs
|
|
{
|
|
input: [
|
|
"WEB",
|
|
"VTT - This file has cues.\n",
|
|
"\n",
|
|
"14\n",
|
|
"00:01:14",
|
|
".815 --> 00:0",
|
|
"1:18.114\n",
|
|
"- What?\n",
|
|
"- Where are we now?\n",
|
|
"\n",
|
|
"15\n",
|
|
"00:01:18.171 --> 00:01:20.991\n",
|
|
"- T",
|
|
"his is big bat country.\n",
|
|
"\n",
|
|
"16\n",
|
|
"00:01:21.058 --> 00:01:23.868\n",
|
|
"- [ Bat",
|
|
"s Screeching ]\n",
|
|
"- They won't get in your hair. They're after the bug",
|
|
"s.\n",
|
|
],
|
|
cue: 3,
|
|
region: 0,
|
|
},
|
|
|
|
// Body without IDs
|
|
{
|
|
input: [
|
|
"WEBVTT - This file has c",
|
|
"ues.\n",
|
|
"\n",
|
|
"00:01:14.815 --> 00:01:18.114\n",
|
|
"- What?\n",
|
|
"- Where are we now?\n",
|
|
"\n",
|
|
"00:01:18.171 --> 00:01:2",
|
|
"0.991\n",
|
|
"- ",
|
|
"This is big bat country.\n",
|
|
"\n",
|
|
"00:01:21.058 --> 00:01:23.868\n",
|
|
"- [ Bats S",
|
|
"creeching ]\n",
|
|
"- They won't get in your hair. They're after the bugs.\n",
|
|
],
|
|
cue: 3,
|
|
region: 0,
|
|
},
|
|
|
|
// Note
|
|
{
|
|
input: ["WEBVTT - This file has no cues.\n", "\n", "NOTE what"],
|
|
cue: 0,
|
|
region: 0,
|
|
},
|
|
|
|
// Regions - This vtt is taken from a WPT
|
|
{
|
|
input: [
|
|
"WE",
|
|
"BVTT\n",
|
|
"\n",
|
|
"REGION\n",
|
|
"id:0\n",
|
|
"\n",
|
|
"REGION\n",
|
|
"id:1\n",
|
|
"region",
|
|
"an",
|
|
"chor:0%,0%\n",
|
|
"\n",
|
|
"R",
|
|
"EGION\n",
|
|
"id:2\n",
|
|
"regionanchor:18446744073709552000%,18446744",
|
|
"073709552000%\n",
|
|
"\n",
|
|
"REGION\n",
|
|
"id:3\n",
|
|
"regionanchor: 100%,100%\n",
|
|
"regio",
|
|
"nanchor :100%,100%\n",
|
|
"regionanchor:100% ,100%\n",
|
|
"regionanchor:100%, 100%\n",
|
|
"regionanchor:100 %,100%\n",
|
|
"regionanchor:10",
|
|
"0%,100 %\n",
|
|
"\n",
|
|
"00:00:00.000 --> 00:00:01.000",
|
|
" region:0\n",
|
|
"text\n",
|
|
"\n",
|
|
"00:00:00.000 --> 00:00:01.000 region:1\n",
|
|
"text\n",
|
|
"\n",
|
|
"00:00:00.000 --> 00:00:01.000 region:3\n",
|
|
"text\n",
|
|
],
|
|
cue: 3,
|
|
region: 4,
|
|
},
|
|
];
|
|
|
|
function run_test() {
|
|
tests.forEach(test => {
|
|
let parser = new WebVTT.Parser(fakeWindow, null);
|
|
ok(!!parser, "Ok... this is a good starting point");
|
|
|
|
let cue = 0;
|
|
parser.oncue = () => {
|
|
++cue;
|
|
};
|
|
|
|
let region = 0;
|
|
parser.onregion = () => {
|
|
++region;
|
|
};
|
|
|
|
parser.onparsingerror = () => {
|
|
ok(false, "No error accepted");
|
|
};
|
|
|
|
test.input.forEach(input => {
|
|
parser.parse(new TextEncoder().encode(input));
|
|
});
|
|
|
|
parser.flush();
|
|
|
|
equal(cue, test.cue, "Cue value matches");
|
|
equal(region, test.region, "Region value matches");
|
|
});
|
|
}
|