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