Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: general improvements to vm tests #14458

Closed
wants to merge 10 commits into from
8 changes: 4 additions & 4 deletions test/parallel/test-vm-context-async-script.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,16 @@
// USE OR OTHER DEALINGS IN THE SOFTWARE.

'use strict';
require('../common');
const common = require('../common');
const assert = require('assert');
const vm = require('vm');

const sandbox = { setTimeout: setTimeout };
const sandbox = { setTimeout };

const ctx = vm.createContext(sandbox);

vm.runInContext('setTimeout(function() { x = 3; }, 0);', ctx);
setTimeout(function() {
setTimeout(common.mustCall(() => {
assert.strictEqual(sandbox.x, 3);
assert.strictEqual(ctx.x, 3);
}, 1);
}), 1);
16 changes: 8 additions & 8 deletions test/parallel/test-vm-context.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,29 +27,29 @@ const vm = require('vm');
const Script = vm.Script;
let script = new Script('"passed";');

console.error('run in a new empty context');
// Run in a new empty context
let context = vm.createContext();
let result = script.runInContext(context);
assert.strictEqual('passed', result);

console.error('create a new pre-populated context');
// Create a new pre-populated context
context = vm.createContext({ 'foo': 'bar', 'thing': 'lala' });
assert.strictEqual('bar', context.foo);
assert.strictEqual('lala', context.thing);

console.error('test updating context');
// Test updating context
script = new Script('foo = 3;');
result = script.runInContext(context);
assert.strictEqual(3, context.foo);
assert.strictEqual('lala', context.thing);

// Issue GH-227:
assert.throws(function() {
assert.throws(() => {
vm.runInNewContext('', null, 'some.js');
}, /^TypeError: sandbox must be an object$/);

// Issue GH-1140:
console.error('test runInContext signature');
// Test runInContext signature
let gh1140Exception;
try {
vm.runInContext('throw new Error()', context, 'expected-filename.js');
Expand Down Expand Up @@ -77,7 +77,7 @@ const contextifiedSandboxErrorMsg =
});

// Issue GH-693:
console.error('test RegExp as argument to assert.throws');
// Test RegExp as argument to assert.throws
script = vm.createScript('const assert = require(\'assert\'); assert.throws(' +
'function() { throw "hello world"; }, /hello/);',
'some.js');
Expand All @@ -92,13 +92,13 @@ assert.strictEqual(script.runInContext(ctx), false);

// Error on the first line of a module should
// have the correct line and column number
assert.throws(function() {
assert.throws(() => {
vm.runInContext('throw new Error()', context, {
filename: 'expected-filename.js',
lineOffset: 32,
columnOffset: 123
});
}, function(err) {
}, (err) => {
return /expected-filename\.js:33:130/.test(err.stack);
}, 'Expected appearance of proper offset in Error stack');

Expand Down
8 changes: 4 additions & 4 deletions test/parallel/test-vm-create-and-run-in-context.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,23 +26,23 @@ const assert = require('assert');

const vm = require('vm');

console.error('run in a new empty context');
// Run in a new empty context
let context = vm.createContext();
let result = vm.runInContext('"passed";', context);
assert.strictEqual('passed', result);

console.error('create a new pre-populated context');
// Create a new pre-populated context
context = vm.createContext({ 'foo': 'bar', 'thing': 'lala' });
assert.strictEqual('bar', context.foo);
assert.strictEqual('lala', context.thing);

console.error('test updating context');
// Test updating context
result = vm.runInContext('var foo = 3;', context);
assert.strictEqual(3, context.foo);
assert.strictEqual('lala', context.thing);

// https://github.com/nodejs/node/issues/5768
console.error('run in contextified sandbox without referencing the context');
// Run in contextified sandbox without referencing the context
const sandbox = { x: 1 };
vm.createContext(sandbox);
global.gc();
Expand Down
2 changes: 0 additions & 2 deletions test/parallel/test-vm-function-declaration.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,5 +42,3 @@ assert.strictEqual(res.name, 'b', 'res should be named b');
assert.strictEqual(typeof o.a, 'function', 'a should be function');
assert.strictEqual(typeof o.b, 'function', 'b should be function');
assert.strictEqual(res, o.b, 'result should be global b function');

console.log('ok');
8 changes: 4 additions & 4 deletions test/parallel/test-vm-new-script-new-context.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ const Script = require('vm').Script;

{
const script = new Script('throw new Error(\'test\');');
assert.throws(function() {
assert.throws(() => {
script.runInNewContext();
}, /^Error: test$/);
}

{
const script = new Script('foo.bar = 5;');
assert.throws(function() {
assert.throws(() => {
script.runInNewContext();
}, /^ReferenceError: foo is not defined$/);
}
Expand Down Expand Up @@ -94,14 +94,14 @@ const Script = require('vm').Script;
script.runInNewContext({ f: f });
assert.strictEqual(f.a, 2);

assert.throws(function() {
assert.throws(() => {
script.runInNewContext();
}, /^ReferenceError: f is not defined$/);
}

{
const script = new Script('');
assert.throws(function() {
assert.throws(() => {
script.runInNewContext.call('\'hello\';');
}, /^TypeError: this\.runInContext is not a function$/);
}
10 changes: 5 additions & 5 deletions test/parallel/test-vm-new-script-this-context.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@ const Script = require('vm').Script;

common.globalCheck = false;

console.error('run a string');
// Run a string
let script = new Script('\'passed\';');
const result = script.runInThisContext(script);
assert.strictEqual('passed', result);

console.error('thrown error');
// Thrown error
script = new Script('throw new Error(\'test\');');
assert.throws(function() {
assert.throws(() => {
script.runInThisContext(script);
}, /^Error: test$/);

Expand All @@ -43,7 +43,7 @@ script.runInThisContext(script);
assert.strictEqual(2, global.hello);


console.error('pass values');
// Pass values
global.code = 'foo = 1;' +
'bar = 2;' +
'if (typeof baz !== "undefined") throw new Error("test fail");';
Expand All @@ -55,7 +55,7 @@ assert.strictEqual(0, global.obj.foo);
assert.strictEqual(2, global.bar);
assert.strictEqual(1, global.foo);

console.error('call a function');
// Call a function
global.f = function() { global.foo = 100; };
script = new Script('f()');
script.runInThisContext(script);
Expand Down
14 changes: 7 additions & 7 deletions test/parallel/test-vm-run-in-new-context.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,12 @@ assert.strictEqual(typeof global.gc, 'function',

common.globalCheck = false;

console.error('run a string');
// Run a string
const result = vm.runInNewContext('\'passed\';');
assert.strictEqual('passed', result);

console.error('thrown error');
assert.throws(function() {
// Thrown error
assert.throws(() => {
vm.runInNewContext('throw new Error(\'test\');');
}, /^Error: test$/);

Expand All @@ -45,7 +45,7 @@ vm.runInNewContext('hello = 2');
assert.strictEqual(5, global.hello);


console.error('pass values in and out');
// Pass values in and out
global.code = 'foo = 1;' +
'bar = 2;' +
'if (baz !== 3) throw new Error(\'test fail\');';
Expand All @@ -58,17 +58,17 @@ assert.strictEqual(1, global.obj.foo);
assert.strictEqual(2, global.obj.bar);
assert.strictEqual(2, global.foo);

console.error('call a function by reference');
// Call a function by reference
function changeFoo() { global.foo = 100; }
vm.runInNewContext('f()', { f: changeFoo });
assert.strictEqual(global.foo, 100);

console.error('modify an object by reference');
// Modify an object by reference
const f = { a: 1 };
vm.runInNewContext('f.a = 2', { f: f });
assert.strictEqual(f.a, 2);

console.error('use function in context without referencing context');
// Use function in context without referencing context
const fn = vm.runInNewContext('(function() { obj.p = {}; })', { obj: {} });
global.gc();
fn();
Expand Down
14 changes: 5 additions & 9 deletions test/parallel/test-vm-syntax-error-message.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
'use strict';
require('../common');
const common = require('../common');
const assert = require('assert');
const child_process = require('child_process');

Expand All @@ -11,16 +11,12 @@ const p = child_process.spawn(process.execPath, [
'catch (e) { console.log(e.message); }'
]);

p.stderr.on('data', function(data) {
assert.fail(`Unexpected stderr data: ${data}`);
});
p.stderr.on('data', common.mustNotCall());

let output = '';

p.stdout.on('data', function(data) {
output += data;
});
p.stdout.on('data', (data) => output += data);

process.on('exit', function() {
p.stdout.on('end', common.mustCall(() => {
assert.strictEqual(output.replace(/[\r\n]+/g, ''), 'boo');
});
}));
12 changes: 4 additions & 8 deletions test/parallel/test-vm-syntax-error-stderr.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,14 @@ const p = child_process.spawn(process.execPath, [
wrong_script
]);

p.stdout.on('data', function(data) {
assert.fail(`Unexpected stdout data: ${data}`);
});
p.stdout.on('data', common.mustNotCall());

let output = '';

p.stderr.on('data', function(data) {
output += data;
});
p.stderr.on('data', (data) => output += data);

process.on('exit', function() {
p.stderr.on('end', common.mustCall(() => {
assert(/BEGIN CERT/.test(output));
assert(/^\s+\^/m.test(output));
assert(/Invalid left-hand side expression in prefix operation/.test(output));
});
}));