forked from cure53/DOMPurify
/
jsdom-node.js
50 lines (39 loc) · 1.41 KB
/
jsdom-node.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/* 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');
const tests = require('./fixtures/expect');
const xssTests = tests.filter((element) => /alert/.test(element.payload));
require('qunit-parameterize/qunit-parameterize');
QUnit.assert.contains = function (needle, haystack, message) {
const result = haystack.indexOf(needle) > -1;
this.push(result, needle, haystack, 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();