|
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