summaryrefslogtreecommitdiff
path: root/test/parallel/test-vm-codegen.js
blob: 90b37c741a1c685c226a911d31ad91e42a8d0e92 (plain)
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
'use strict';

require('../common');
const assert = require('assert');

const { createContext, runInContext, runInNewContext } = require('vm');

const WASM_BYTES = Buffer.from(
  [0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00]);

{
  const ctx = createContext({ WASM_BYTES });
  const test = 'eval(""); new WebAssembly.Module(WASM_BYTES);';
  runInContext(test, ctx);

  runInNewContext(test, { WASM_BYTES }, {
    contextCodeGeneration: undefined,
  });
}

{
  const ctx = createContext({}, {
    codeGeneration: {
      strings: false,
    },
  });

  const EvalError = runInContext('EvalError', ctx);
  assert.throws(() => {
    runInContext('eval("x")', ctx);
  }, EvalError);
}

{
  const ctx = createContext({ WASM_BYTES }, {
    codeGeneration: {
      wasm: false,
    },
  });

  const CompileError = runInContext('WebAssembly.CompileError', ctx);
  assert.throws(() => {
    runInContext('new WebAssembly.Module(WASM_BYTES)', ctx);
  }, CompileError);
}

assert.throws(() => {
  runInNewContext('eval("x")', {}, {
    contextCodeGeneration: {
      strings: false,
    },
  });
}, {
  name: 'EvalError'
});

assert.throws(() => {
  runInNewContext('new WebAssembly.Module(WASM_BYTES)', { WASM_BYTES }, {
    contextCodeGeneration: {
      wasm: false,
    },
  });
}, {
  name: 'CompileError'
});

assert.throws(() => {
  createContext({}, {
    codeGeneration: {
      strings: 0,
    },
  });
}, {
  code: 'ERR_INVALID_ARG_TYPE',
});

assert.throws(() => {
  runInNewContext('eval("x")', {}, {
    contextCodeGeneration: {
      wasm: 1,
    },
  });
}, {
  code: 'ERR_INVALID_ARG_TYPE'
});

assert.throws(() => {
  createContext({}, {
    codeGeneration: 1,
  });
}, {
  code: 'ERR_INVALID_ARG_TYPE',
});

assert.throws(() => {
  createContext({}, {
    codeGeneration: null,
  });
}, {
  code: 'ERR_INVALID_ARG_TYPE',
});