Skip to content

Commit 9f50db2

Browse files
Trottaddaleax
authored andcommitted
test: refactor test-vm-new-script-new-context
* block scope test cases * clean up global leaks in individual test cases * enable global variable leak checking * remove console.error() statements PR-URL: #14536 Reviewed-By: Refael Ackermann <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent f40b906 commit 9f50db2

File tree

1 file changed

+70
-53
lines changed

1 file changed

+70
-53
lines changed

test/parallel/test-vm-new-script-new-context.js

+70-53
Original file line numberDiff line numberDiff line change
@@ -20,71 +20,88 @@
2020
// USE OR OTHER DEALINGS IN THE SOFTWARE.
2121

2222
'use strict';
23-
const common = require('../common');
23+
require('../common');
24+
2425
const assert = require('assert');
26+
2527
const Script = require('vm').Script;
2628

27-
common.globalCheck = false;
29+
{
30+
const script = new Script('\'passed\';');
31+
const result1 = script.runInNewContext();
32+
const result2 = script.runInNewContext();
33+
assert.strictEqual('passed', result1);
34+
assert.strictEqual('passed', result2);
35+
}
2836

29-
console.error('run a string');
30-
let script = new Script('\'passed\';');
31-
console.error('script created');
32-
const result1 = script.runInNewContext();
33-
const result2 = script.runInNewContext();
34-
assert.strictEqual('passed', result1);
35-
assert.strictEqual('passed', result2);
37+
{
38+
const script = new Script('throw new Error(\'test\');');
39+
assert.throws(function() {
40+
script.runInNewContext();
41+
}, /^Error: test$/);
42+
}
3643

37-
console.error('thrown error');
38-
script = new Script('throw new Error(\'test\');');
39-
assert.throws(function() {
40-
script.runInNewContext();
41-
}, /^Error: test$/);
44+
{
45+
const script = new Script('foo.bar = 5;');
46+
assert.throws(function() {
47+
script.runInNewContext();
48+
}, /^ReferenceError: foo is not defined$/);
49+
}
4250

43-
44-
console.error('undefined reference');
45-
script = new Script('foo.bar = 5;');
46-
assert.throws(function() {
51+
{
52+
global.hello = 5;
53+
const script = new Script('hello = 2');
4754
script.runInNewContext();
48-
}, /^ReferenceError: foo is not defined$/);
55+
assert.strictEqual(5, global.hello);
4956

57+
// cleanup
58+
delete global.hello;
59+
}
5060

51-
global.hello = 5;
52-
script = new Script('hello = 2');
53-
script.runInNewContext();
54-
assert.strictEqual(5, global.hello);
61+
{
62+
global.code = 'foo = 1;' +
63+
'bar = 2;' +
64+
'if (baz !== 3) throw new Error(\'test fail\');';
65+
global.foo = 2;
66+
global.obj = { foo: 0, baz: 3 };
67+
const script = new Script(global.code);
68+
/* eslint-disable no-unused-vars */
69+
const baz = script.runInNewContext(global.obj);
70+
/* eslint-enable no-unused-vars */
71+
assert.strictEqual(1, global.obj.foo);
72+
assert.strictEqual(2, global.obj.bar);
73+
assert.strictEqual(2, global.foo);
5574

75+
//cleanup
76+
delete global.code;
77+
delete global.foo;
78+
delete global.obj;
79+
}
5680

57-
console.error('pass values in and out');
58-
global.code = 'foo = 1;' +
59-
'bar = 2;' +
60-
'if (baz !== 3) throw new Error(\'test fail\');';
61-
global.foo = 2;
62-
global.obj = { foo: 0, baz: 3 };
63-
script = new Script(global.code);
64-
/* eslint-disable no-unused-vars */
65-
const baz = script.runInNewContext(global.obj);
66-
/* eslint-enable no-unused-vars */
67-
assert.strictEqual(1, global.obj.foo);
68-
assert.strictEqual(2, global.obj.bar);
69-
assert.strictEqual(2, global.foo);
81+
{
82+
const script = new Script('f()');
83+
function changeFoo() { global.foo = 100; }
84+
script.runInNewContext({ f: changeFoo });
85+
assert.strictEqual(global.foo, 100);
7086

71-
console.error('call a function by reference');
72-
script = new Script('f()');
73-
function changeFoo() { global.foo = 100; }
74-
script.runInNewContext({ f: changeFoo });
75-
assert.strictEqual(global.foo, 100);
87+
// cleanup
88+
delete global.foo;
89+
}
7690

77-
console.error('modify an object by reference');
78-
script = new Script('f.a = 2');
79-
const f = { a: 1 };
80-
script.runInNewContext({ f: f });
81-
assert.strictEqual(f.a, 2);
91+
{
92+
const script = new Script('f.a = 2');
93+
const f = { a: 1 };
94+
script.runInNewContext({ f: f });
95+
assert.strictEqual(f.a, 2);
8296

83-
assert.throws(function() {
84-
script.runInNewContext();
85-
}, /^ReferenceError: f is not defined$/);
97+
assert.throws(function() {
98+
script.runInNewContext();
99+
}, /^ReferenceError: f is not defined$/);
100+
}
86101

87-
console.error('invalid this');
88-
assert.throws(function() {
89-
script.runInNewContext.call('\'hello\';');
90-
}, /^TypeError: this\.runInContext is not a function$/);
102+
{
103+
const script = new Script('');
104+
assert.throws(function() {
105+
script.runInNewContext.call('\'hello\';');
106+
}, /^TypeError: this\.runInContext is not a function$/);
107+
}

0 commit comments

Comments
 (0)