'use strict'; const common = require('../common'); const vm = require('vm'); const invalidArgType = { type: TypeError, code: 'ERR_INVALID_ARG_TYPE' }; const outOfRange = { type: RangeError, code: 'ERR_OUT_OF_RANGE' }; common.expectsError(() => { new vm.Script('void 0', 42); }, invalidArgType); [null, {}, [1], 'bad', true].forEach((value) => { common.expectsError(() => { new vm.Script('void 0', { lineOffset: value }); }, invalidArgType); common.expectsError(() => { new vm.Script('void 0', { columnOffset: value }); }, invalidArgType); }); [0.1, 2 ** 32].forEach((value) => { common.expectsError(() => { new vm.Script('void 0', { lineOffset: value }); }, outOfRange); common.expectsError(() => { new vm.Script('void 0', { columnOffset: value }); }, outOfRange); }); common.expectsError(() => { new vm.Script('void 0', { lineOffset: Number.MAX_SAFE_INTEGER }); }, outOfRange); common.expectsError(() => { new vm.Script('void 0', { columnOffset: Number.MAX_SAFE_INTEGER }); }, outOfRange); common.expectsError(() => { new vm.Script('void 0', { filename: 123 }); }, invalidArgType); common.expectsError(() => { new vm.Script('void 0', { produceCachedData: 1 }); }, invalidArgType); [[0], {}, true, 'bad', 42].forEach((value) => { common.expectsError(() => { new vm.Script('void 0', { cachedData: value }); }, invalidArgType); }); { const script = new vm.Script('void 0'); const sandbox = vm.createContext(); function assertErrors(options, errCheck) { common.expectsError(() => { script.runInThisContext(options); }, errCheck); common.expectsError(() => { script.runInContext(sandbox, options); }, errCheck); common.expectsError(() => { script.runInNewContext({}, options); }, errCheck); } [null, 'bad', 42].forEach((value) => { assertErrors(value, invalidArgType); }); [{}, [1], 'bad', null].forEach((value) => { assertErrors({ timeout: value }, invalidArgType); }); [-1, 0, NaN].forEach((value) => { assertErrors({ timeout: value }, outOfRange); }); [{}, [1], 'bad', 1, null].forEach((value) => { assertErrors({ displayErrors: value }, invalidArgType); assertErrors({ breakOnSigint: value }, invalidArgType); }); }