-
Notifications
You must be signed in to change notification settings - Fork 206
/
test-clean-core-eval.js
56 lines (55 loc) · 1.46 KB
/
test-clean-core-eval.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
51
52
53
54
55
56
import '@endo/init';
import test from 'ava';
import {
defangEvaluableCode,
compartmentEvaluate,
} from '../scripts/clean-core-eval.js';
test('defangEvaluableCode is working', t => {
const samples = [
[''],
[
`\n// <!-- foo\n\n`,
`\n// <\\!-- foo\n\n`,
{ message: /\(SES_HTML_COMMENT_REJECTED\)/ },
],
[
`\n// --> foo\n\n`,
`\n// --\\> foo\n\n`,
{ message: /\(SES_HTML_COMMENT_REJECTED\)/ },
],
[
`\n\`import('foo')\`\n`,
`\n\`import\\('foo')\`\n`,
{ message: /\(SES_IMPORT_REJECTED\)/ },
],
[
`\n123; import('foo')\n`,
`\n123; import\\('foo')\n`,
{ message: /\(SES_IMPORT_REJECTED\)/ },
{ message: /Invalid or unexpected token/ },
],
];
for (const [
code,
transformed,
originalExpected,
defangedExpected,
] of samples) {
const defanged = defangEvaluableCode(code);
if (originalExpected) {
// Transform is necessary, and the original code throws.
t.is(defanged, transformed);
t.throws(() => compartmentEvaluate(code), originalExpected);
} else {
// No transform is necessary, and the code doesn't throw.
t.is(defanged, code);
t.notThrows(() => compartmentEvaluate(code));
}
if (defangedExpected) {
t.throws(() => compartmentEvaluate(defanged), defangedExpected);
} else {
// The transformed code doesn't throw.
t.notThrows(() => compartmentEvaluate(defanged));
}
}
});