UNPKG

mancha

Version:

Javscript HTML rendering engine

87 lines 3.4 kB
import * as chai from "chai"; import chaiAsPromised from "chai-as-promised"; import { DomUtils } from "htmlparser2"; import { hasProperty } from "./dome.js"; export function innerHTML(elem) { if (hasProperty(elem, "innerHTML")) return elem.innerHTML; else return DomUtils.getInnerHTML(elem); } export function setInnerHTML(elem, html) { // tsec-disable-next-line elem.innerHTML = html; } // Custom recursive textContent that skips <template> tags for domhandler nodes. export function getTextContent(node) { if (hasProperty(node, "textContent")) return node.textContent; const n = node; if (n.type === "text") return n.data || null; if (node.type === "tag" && node.name === "template") return ""; if (node.children) return node.children?.map(getTextContent).join("") ?? ""; return ""; } export const isNode = typeof process !== "undefined" && process.versions != null && process.versions.node != null; export async function setupGlobalTestEnvironment() { // Set up global test environment for DOM manipulation. // Fall back to JSDOM for DOM manipulation during testing. if (!globalThis.window) { // Import JSDOM dynamically, because it's not available in browser context. const jsdomName = "jsdom"; const { JSDOM } = await import(jsdomName); const dom = new JSDOM(``, { url: "http://localhost/" }); // Types. globalThis.Document = globalThis.Document || dom.window.Document; globalThis.DocumentFragment = globalThis.DocumentFragment || dom.window.DocumentFragment; // Objects and Classes. globalThis.window = globalThis.window || dom.window; globalThis.document = globalThis.document || dom.window.document; globalThis.DOMParser = globalThis.DOMParser || dom.window.DOMParser; globalThis.XMLSerializer = globalThis.XMLSerializer || dom.window.XMLSerializer; globalThis.PopStateEvent = globalThis.PopStateEvent || dom.window.PopStateEvent; } } export function createFragment(html) { // Use DOMParser to avoid tsec innerHTML violation and unify Node/Browser behavior. const parser = new DOMParser(); const doc = parser.parseFromString(html, "text/html"); const fragment = document.createDocumentFragment(); // Move nodes to fragment while (doc.body.firstChild) { fragment.appendChild(doc.body.firstChild); } return fragment; } // Map the assert methods using Chai. chai.use(chaiAsPromised); export const assert = { equal: (actual, expected, message) => { chai.expect(actual, message).to.equal(expected); }, deepEqual: (actual, expected, message) => { chai.expect(actual, message).to.deep.equal(expected); }, notEqual: (actual, expected, message) => { chai.expect(actual, message).to.not.equal(expected); }, greaterEqual: (actual, expected, message) => { chai.expect(actual, message).to.be.gte(expected); }, ok: (value, message) => { chai.expect(value, message).to.be.ok; }, fail: (message) => { throw new Error(message); }, throws: (fn, message) => { chai.expect(fn, message).to.throw(); }, rejects: async (p, message) => { await chai.expect(p, message).to.eventually.be.rejected; }, }; //# sourceMappingURL=test_utils.js.map