"use strict"; const { WebVTT } = ChromeUtils.importESModule( "resource://gre/modules/vtt.sys.mjs" ); 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"); }); }