Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions src/main/js/error.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ export function reportFatal(errorHandler, msg) {
* and returns a single <pre>boolean</pre>, which terminates processing if <pre>true</pre>.
*
* @typedef {Object} ErrorHandler
* @property {(msg: string) => boolean} warn
* @property {(msg: string) => boolean} error
* @property {(msg: string) => boolean} fatal
* @property {((msg: string) => boolean)} [info]
* @property {((msg: string) => boolean)} [warn]
* @property {((msg: string) => boolean)} [error]
* @property {((msg: string) => boolean)} [fatal]
*/
2 changes: 1 addition & 1 deletion src/main/js/html.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ const browserIsFirefox = /firefox/i.test(navigator.userAgent);
* @param {?boolean} displayForcedOnlyMode Value of the IMSC1 displayForcedOnlyMode parameter,
* or false if null
* @param {?ErrorHandler} errorHandler Error callback
* @param {ISD} previousISDState State saved during processing of the previous ISD, or null if initial call
* @param {?ISD} previousISDState State saved during processing of the previous ISD, or null if initial call
* @param {?boolean} enableRollUp Enables roll-up animations (see CEA 708)
* @return {ISD} ISD state to be provided when this function is called for the next ISD
*/
Expand Down
10 changes: 7 additions & 3 deletions src/main/js/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,14 @@ export { createSAXParserFromDOMParser };
*
* @param {string} xmlstring XML document
* @param {ErrorHandler} errorHandler Error callback
* @param {?MetadataHandler} metadataHandler Callback for <Metadata> elements
* @param {?Parser} parser XML parser
* @param {?MetadataHandler} [metadataHandler] Callback for <Metadata> elements
Comment thread
dheitmueller marked this conversation as resolved.
Resolved
* @param {?Parser} [parser] XML parser
* @returns {?TTElement} Opaque in-memory representation of an IMSC1 document
*/
export function fromXML(xmlstring, errorHandler, metadataHandler, parser = createSAXParserFromDOMParser()) {
export function fromXML(xmlstring, errorHandler, metadataHandler, parser) {
if (parser === null || parser === undefined) {
parser = createSAXParserFromDOMParser();
}

return fromParser(xmlstring, errorHandler, metadataHandler, parser);
}
43 changes: 43 additions & 0 deletions src/test/js/DefaultParserTest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { equal, throws } from "node:assert";
import { test } from "node:test";

const originalWindow = globalThis.window;
const originalDocument = globalThis.document;

globalThis.window = { getComputedStyle: () => ({}) };
globalThis.document = { documentElement: {} };

const { fromXML } = await import("../../main/js/main.js");

globalThis.window = originalWindow;
globalThis.document = originalDocument;

const XML = '<tt xmlns="http://www.w3.org/ns/ttml" xml:lang="en" />';
const TEST_ERROR = new Error("default parser used");

function assertUsesDefaultParser(parse) {
const originalDOMParser = globalThis.DOMParser;
let parseCount = 0;

globalThis.DOMParser = class {
parseFromString() {
parseCount++;
throw TEST_ERROR;
}
};

try {
throws(parse, TEST_ERROR);
equal(parseCount, 1);
} finally {
globalThis.DOMParser = originalDOMParser;
}
}

test("fromXML uses the default parser when parser is omitted", () => {
assertUsesDefaultParser(() => fromXML(XML, {}));
});

test("fromXML uses the default parser when parser is null", () => {
assertUsesDefaultParser(() => fromXML(XML, {}, null, null));
});
Loading