blob: f4b3fe5ed460e816b039824739d248f178d9d3ac [file] [log] [blame] [edit]
/* jshint node: true, esnext: true */
/* global QUnit */
'use strict';
// Test DOMPurify + jsdom using Node.js (version 8 and up)
const createDOMPurify = require('../dist/purify.cjs');
const jsdom = require('jsdom');
const { JSDOM, VirtualConsole } = jsdom;
const virtualConsole = new VirtualConsole();
const { window } = new JSDOM(
`<html><head></head><body><div id="qunit-fixture"></div></body></html>`,
{ runScripts: 'dangerously', virtualConsole }
);
require('jquery')(window);
const sanitizeTestSuite = require('./test-suite');
const bootstrapTestSuite = require('./bootstrap-test-suite');
async function startQUnit() {
const { default: tests } = await import('./fixtures/expect.mjs');
const xssTests = tests.filter((element) => /alert/.test(element.payload));
QUnit.assert.contains = function (actual, expected, message) {
const result = expected.indexOf(actual) > -1;
// Ref: https://api.qunitjs.com/assert/pushResult/
this.pushResult({
result: result,
actual: actual,
expected: expected,
message: message,
});
};
QUnit.config.autostart = false;
QUnit.module('DOMPurify - bootstrap', bootstrapTestSuite(JSDOM));
QUnit.module('DOMPurify in jsdom');
if (!window.jQuery) {
console.warn('Unable to load jQuery');
}
const DOMPurify = createDOMPurify(window);
if (!DOMPurify.isSupported) {
console.error('Unexpected error returned by jsdom.env():', err, err.stack);
process.exit(1);
}
window.alert = () => {
window.xssed = true;
};
sanitizeTestSuite(DOMPurify, window, tests, xssTests);
QUnit.start();
}
module.exports = startQUnit;