| 'use strict'; |
| |
| const common = 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]); |
| |
| |
| function expectsError(fn, type) { |
| try { |
| fn(); |
| assert.fail('expected fn to error'); |
| } catch (err) { |
| if (typeof type === 'string') |
| assert.strictEqual(err.name, type); |
| else |
| assert(err instanceof type); |
| } |
| } |
| |
| { |
| 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); |
| expectsError(() => { |
| runInContext('eval("x")', ctx); |
| }, EvalError); |
| } |
| |
| { |
| const ctx = createContext({ WASM_BYTES }, { |
| codeGeneration: { |
| wasm: false, |
| }, |
| }); |
| |
| const CompileError = runInContext('WebAssembly.CompileError', ctx); |
| expectsError(() => { |
| runInContext('new WebAssembly.Module(WASM_BYTES)', ctx); |
| }, CompileError); |
| } |
| |
| expectsError(() => { |
| runInNewContext('eval("x")', {}, { |
| contextCodeGeneration: { |
| strings: false, |
| }, |
| }); |
| }, 'EvalError'); |
| |
| expectsError(() => { |
| runInNewContext('new WebAssembly.Module(WASM_BYTES)', { WASM_BYTES }, { |
| contextCodeGeneration: { |
| wasm: false, |
| }, |
| }); |
| }, 'CompileError'); |
| |
| common.expectsError(() => { |
| createContext({}, { |
| codeGeneration: { |
| strings: 0, |
| }, |
| }); |
| }, { |
| code: 'ERR_INVALID_ARG_TYPE', |
| }); |
| |
| common.expectsError(() => { |
| runInNewContext('eval("x")', {}, { |
| contextCodeGeneration: { |
| wasm: 1, |
| }, |
| }); |
| }, { |
| code: 'ERR_INVALID_ARG_TYPE' |
| }); |
| |
| common.expectsError(() => { |
| createContext({}, { |
| codeGeneration: 1, |
| }); |
| }, { |
| code: 'ERR_INVALID_ARG_TYPE', |
| }); |
| |
| common.expectsError(() => { |
| createContext({}, { |
| codeGeneration: null, |
| }); |
| }, { |
| code: 'ERR_INVALID_ARG_TYPE', |
| }); |