11cb0ef41Sopenharmony_ci'use strict'; 21cb0ef41Sopenharmony_ci 31cb0ef41Sopenharmony_cirequire('../common'); 41cb0ef41Sopenharmony_ciconst assert = require('assert'); 51cb0ef41Sopenharmony_ciconst vm = require('vm'); 61cb0ef41Sopenharmony_ci 71cb0ef41Sopenharmony_ciconst invalidArgType = { 81cb0ef41Sopenharmony_ci name: 'TypeError', 91cb0ef41Sopenharmony_ci code: 'ERR_INVALID_ARG_TYPE' 101cb0ef41Sopenharmony_ci}; 111cb0ef41Sopenharmony_ci 121cb0ef41Sopenharmony_ciconst outOfRange = { 131cb0ef41Sopenharmony_ci name: 'RangeError', 141cb0ef41Sopenharmony_ci code: 'ERR_OUT_OF_RANGE' 151cb0ef41Sopenharmony_ci}; 161cb0ef41Sopenharmony_ci 171cb0ef41Sopenharmony_ciassert.throws(() => { 181cb0ef41Sopenharmony_ci new vm.Script('void 0', 42); 191cb0ef41Sopenharmony_ci}, invalidArgType); 201cb0ef41Sopenharmony_ci 211cb0ef41Sopenharmony_ci[null, {}, [1], 'bad', true].forEach((value) => { 221cb0ef41Sopenharmony_ci assert.throws(() => { 231cb0ef41Sopenharmony_ci new vm.Script('void 0', { lineOffset: value }); 241cb0ef41Sopenharmony_ci }, invalidArgType); 251cb0ef41Sopenharmony_ci 261cb0ef41Sopenharmony_ci assert.throws(() => { 271cb0ef41Sopenharmony_ci new vm.Script('void 0', { columnOffset: value }); 281cb0ef41Sopenharmony_ci }, invalidArgType); 291cb0ef41Sopenharmony_ci}); 301cb0ef41Sopenharmony_ci 311cb0ef41Sopenharmony_ci[0.1, 2 ** 32].forEach((value) => { 321cb0ef41Sopenharmony_ci assert.throws(() => { 331cb0ef41Sopenharmony_ci new vm.Script('void 0', { lineOffset: value }); 341cb0ef41Sopenharmony_ci }, outOfRange); 351cb0ef41Sopenharmony_ci 361cb0ef41Sopenharmony_ci assert.throws(() => { 371cb0ef41Sopenharmony_ci new vm.Script('void 0', { columnOffset: value }); 381cb0ef41Sopenharmony_ci }, outOfRange); 391cb0ef41Sopenharmony_ci}); 401cb0ef41Sopenharmony_ci 411cb0ef41Sopenharmony_ciassert.throws(() => { 421cb0ef41Sopenharmony_ci new vm.Script('void 0', { lineOffset: Number.MAX_SAFE_INTEGER }); 431cb0ef41Sopenharmony_ci}, outOfRange); 441cb0ef41Sopenharmony_ci 451cb0ef41Sopenharmony_ciassert.throws(() => { 461cb0ef41Sopenharmony_ci new vm.Script('void 0', { columnOffset: Number.MAX_SAFE_INTEGER }); 471cb0ef41Sopenharmony_ci}, outOfRange); 481cb0ef41Sopenharmony_ci 491cb0ef41Sopenharmony_ciassert.throws(() => { 501cb0ef41Sopenharmony_ci new vm.Script('void 0', { filename: 123 }); 511cb0ef41Sopenharmony_ci}, invalidArgType); 521cb0ef41Sopenharmony_ci 531cb0ef41Sopenharmony_ciassert.throws(() => { 541cb0ef41Sopenharmony_ci new vm.Script('void 0', { produceCachedData: 1 }); 551cb0ef41Sopenharmony_ci}, invalidArgType); 561cb0ef41Sopenharmony_ci 571cb0ef41Sopenharmony_ci[[0], {}, true, 'bad', 42].forEach((value) => { 581cb0ef41Sopenharmony_ci assert.throws(() => { 591cb0ef41Sopenharmony_ci new vm.Script('void 0', { cachedData: value }); 601cb0ef41Sopenharmony_ci }, invalidArgType); 611cb0ef41Sopenharmony_ci}); 621cb0ef41Sopenharmony_ci 631cb0ef41Sopenharmony_ci{ 641cb0ef41Sopenharmony_ci const script = new vm.Script('void 0'); 651cb0ef41Sopenharmony_ci const sandbox = vm.createContext(); 661cb0ef41Sopenharmony_ci 671cb0ef41Sopenharmony_ci function assertErrors(options, errCheck) { 681cb0ef41Sopenharmony_ci assert.throws(() => { 691cb0ef41Sopenharmony_ci script.runInThisContext(options); 701cb0ef41Sopenharmony_ci }, errCheck); 711cb0ef41Sopenharmony_ci 721cb0ef41Sopenharmony_ci assert.throws(() => { 731cb0ef41Sopenharmony_ci script.runInContext(sandbox, options); 741cb0ef41Sopenharmony_ci }, errCheck); 751cb0ef41Sopenharmony_ci 761cb0ef41Sopenharmony_ci assert.throws(() => { 771cb0ef41Sopenharmony_ci script.runInNewContext({}, options); 781cb0ef41Sopenharmony_ci }, errCheck); 791cb0ef41Sopenharmony_ci } 801cb0ef41Sopenharmony_ci 811cb0ef41Sopenharmony_ci [null, 'bad', 42].forEach((value) => { 821cb0ef41Sopenharmony_ci assertErrors(value, invalidArgType); 831cb0ef41Sopenharmony_ci }); 841cb0ef41Sopenharmony_ci [{}, [1], 'bad', null].forEach((value) => { 851cb0ef41Sopenharmony_ci assertErrors({ timeout: value }, invalidArgType); 861cb0ef41Sopenharmony_ci }); 871cb0ef41Sopenharmony_ci [-1, 0, NaN].forEach((value) => { 881cb0ef41Sopenharmony_ci assertErrors({ timeout: value }, outOfRange); 891cb0ef41Sopenharmony_ci }); 901cb0ef41Sopenharmony_ci [{}, [1], 'bad', 1, null].forEach((value) => { 911cb0ef41Sopenharmony_ci assertErrors({ displayErrors: value }, invalidArgType); 921cb0ef41Sopenharmony_ci assertErrors({ breakOnSigint: value }, invalidArgType); 931cb0ef41Sopenharmony_ci }); 941cb0ef41Sopenharmony_ci} 95