|
20 | 20 | // USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21 | 21 |
|
22 | 22 | 'use strict';
|
23 |
| -const common = require('../common'); |
| 23 | +require('../common'); |
| 24 | + |
24 | 25 | const assert = require('assert');
|
| 26 | + |
25 | 27 | const Script = require('vm').Script;
|
26 | 28 |
|
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 | +} |
28 | 36 |
|
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 | +} |
36 | 43 |
|
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 | +} |
42 | 50 |
|
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'); |
47 | 54 | script.runInNewContext();
|
48 |
| -}, /^ReferenceError: foo is not defined$/); |
| 55 | + assert.strictEqual(5, global.hello); |
49 | 56 |
|
| 57 | + // cleanup |
| 58 | + delete global.hello; |
| 59 | +} |
50 | 60 |
|
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); |
55 | 74 |
|
| 75 | + //cleanup |
| 76 | + delete global.code; |
| 77 | + delete global.foo; |
| 78 | + delete global.obj; |
| 79 | +} |
56 | 80 |
|
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); |
70 | 86 |
|
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 | +} |
76 | 90 |
|
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); |
82 | 96 |
|
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 | +} |
86 | 101 |
|
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