1 | var assert = require('assert');
|
---|
2 | var ourProcess = require('./browser');
|
---|
3 | describe('test against our process', function () {
|
---|
4 | test(ourProcess);
|
---|
5 | });
|
---|
6 | if (!process.browser) {
|
---|
7 | describe('test against node', function () {
|
---|
8 | test(process);
|
---|
9 | });
|
---|
10 | vmtest();
|
---|
11 | }
|
---|
12 | function test (ourProcess) {
|
---|
13 | describe('test arguments', function () {
|
---|
14 | it ('works', function (done) {
|
---|
15 | var order = 0;
|
---|
16 |
|
---|
17 |
|
---|
18 | ourProcess.nextTick(function (num) {
|
---|
19 | assert.equal(num, order++, 'first one works');
|
---|
20 | ourProcess.nextTick(function (num) {
|
---|
21 | assert.equal(num, order++, 'recursive one is 4th');
|
---|
22 | }, 3);
|
---|
23 | }, 0);
|
---|
24 | ourProcess.nextTick(function (num) {
|
---|
25 | assert.equal(num, order++, 'second one starts');
|
---|
26 | ourProcess.nextTick(function (num) {
|
---|
27 | assert.equal(num, order++, 'this is third');
|
---|
28 | ourProcess.nextTick(function (num) {
|
---|
29 | assert.equal(num, order++, 'this is last');
|
---|
30 | done();
|
---|
31 | }, 5);
|
---|
32 | }, 4);
|
---|
33 | }, 1);
|
---|
34 | ourProcess.nextTick(function (num) {
|
---|
35 |
|
---|
36 | assert.equal(num, order++, '3rd schedualed happens after the error');
|
---|
37 | }, 2);
|
---|
38 | });
|
---|
39 | });
|
---|
40 | if (!process.browser) {
|
---|
41 | describe('test errors', function (t) {
|
---|
42 | it ('works', function (done) {
|
---|
43 | var order = 0;
|
---|
44 | process.removeAllListeners('uncaughtException');
|
---|
45 | process.once('uncaughtException', function(err) {
|
---|
46 | assert.equal(2, order++, 'error is third');
|
---|
47 | ourProcess.nextTick(function () {
|
---|
48 | assert.equal(5, order++, 'schedualed in error is last');
|
---|
49 | done();
|
---|
50 | });
|
---|
51 | });
|
---|
52 | ourProcess.nextTick(function () {
|
---|
53 | assert.equal(0, order++, 'first one works');
|
---|
54 | ourProcess.nextTick(function () {
|
---|
55 | assert.equal(4, order++, 'recursive one is 4th');
|
---|
56 | });
|
---|
57 | });
|
---|
58 | ourProcess.nextTick(function () {
|
---|
59 | assert.equal(1, order++, 'second one starts');
|
---|
60 | throw(new Error('an error is thrown'));
|
---|
61 | });
|
---|
62 | ourProcess.nextTick(function () {
|
---|
63 | assert.equal(3, order++, '3rd schedualed happens after the error');
|
---|
64 | });
|
---|
65 | });
|
---|
66 | });
|
---|
67 | }
|
---|
68 | describe('rename globals', function (t) {
|
---|
69 | var oldTimeout = setTimeout;
|
---|
70 | var oldClear = clearTimeout;
|
---|
71 |
|
---|
72 | it('clearTimeout', function (done){
|
---|
73 |
|
---|
74 | var ok = true;
|
---|
75 | clearTimeout = function () {
|
---|
76 | ok = false;
|
---|
77 | }
|
---|
78 | var ran = false;
|
---|
79 | function cleanup() {
|
---|
80 | clearTimeout = oldClear;
|
---|
81 | var err;
|
---|
82 | try {
|
---|
83 | assert.ok(ok, 'fake clearTimeout ran');
|
---|
84 | assert.ok(ran, 'should have run');
|
---|
85 | } catch (e) {
|
---|
86 | err = e;
|
---|
87 | }
|
---|
88 | done(err);
|
---|
89 | }
|
---|
90 | setTimeout(cleanup, 1000);
|
---|
91 | ourProcess.nextTick(function () {
|
---|
92 | ran = true;
|
---|
93 | });
|
---|
94 | });
|
---|
95 | it('just setTimeout', function (done){
|
---|
96 |
|
---|
97 |
|
---|
98 | setTimeout = function () {
|
---|
99 | setTimeout = oldTimeout;
|
---|
100 | try {
|
---|
101 | assert.ok(false, 'fake setTimeout called')
|
---|
102 | } catch (e) {
|
---|
103 | done(e);
|
---|
104 | }
|
---|
105 |
|
---|
106 | }
|
---|
107 |
|
---|
108 | ourProcess.nextTick(function () {
|
---|
109 | setTimeout = oldTimeout;
|
---|
110 | done();
|
---|
111 | });
|
---|
112 | });
|
---|
113 | });
|
---|
114 | }
|
---|
115 | function vmtest() {
|
---|
116 | var vm = require('vm');
|
---|
117 | var fs = require('fs');
|
---|
118 | var process = fs.readFileSync('./browser.js', {encoding: 'utf8'});
|
---|
119 |
|
---|
120 |
|
---|
121 | describe('should work in vm in strict mode with no globals', function () {
|
---|
122 | it('should parse', function (done) {
|
---|
123 | var str = '"use strict";var module = {exports:{}};';
|
---|
124 | str += process;
|
---|
125 | str += 'this.works = process.browser;';
|
---|
126 | var script = new vm.Script(str);
|
---|
127 | var context = {
|
---|
128 | works: false
|
---|
129 | };
|
---|
130 | script.runInNewContext(context);
|
---|
131 | assert.ok(context.works);
|
---|
132 | done();
|
---|
133 | });
|
---|
134 | it('setTimeout throws error', function (done) {
|
---|
135 | var str = '"use strict";var module = {exports:{}};';
|
---|
136 | str += process;
|
---|
137 | str += 'try {process.nextTick(function () {})} catch (e){this.works = e;}';
|
---|
138 | var script = new vm.Script(str);
|
---|
139 | var context = {
|
---|
140 | works: false
|
---|
141 | };
|
---|
142 | script.runInNewContext(context);
|
---|
143 | assert.ok(context.works);
|
---|
144 | done();
|
---|
145 | });
|
---|
146 | it('should generally work', function (done) {
|
---|
147 | var str = '"use strict";var module = {exports:{}};';
|
---|
148 | str += process;
|
---|
149 | str += 'process.nextTick(function () {assert.ok(true);done();})';
|
---|
150 | var script = new vm.Script(str);
|
---|
151 | var context = {
|
---|
152 | clearTimeout: clearTimeout,
|
---|
153 | setTimeout: setTimeout,
|
---|
154 | done: done,
|
---|
155 | assert: assert
|
---|
156 | };
|
---|
157 | script.runInNewContext(context);
|
---|
158 | });
|
---|
159 | it('late defs setTimeout', function (done) {
|
---|
160 | var str = '"use strict";var module = {exports:{}};';
|
---|
161 | str += process;
|
---|
162 | str += 'var setTimeout = hiddenSetTimeout;process.nextTick(function () {assert.ok(true);done();})';
|
---|
163 | var script = new vm.Script(str);
|
---|
164 | var context = {
|
---|
165 | clearTimeout: clearTimeout,
|
---|
166 | hiddenSetTimeout: setTimeout,
|
---|
167 | done: done,
|
---|
168 | assert: assert
|
---|
169 | };
|
---|
170 | script.runInNewContext(context);
|
---|
171 | });
|
---|
172 | it('late defs clearTimeout', function (done) {
|
---|
173 | var str = '"use strict";var module = {exports:{}};';
|
---|
174 | str += process;
|
---|
175 | str += 'var clearTimeout = hiddenClearTimeout;process.nextTick(function () {assert.ok(true);done();})';
|
---|
176 | var script = new vm.Script(str);
|
---|
177 | var context = {
|
---|
178 | hiddenClearTimeout: clearTimeout,
|
---|
179 | setTimeout: setTimeout,
|
---|
180 | done: done,
|
---|
181 | assert: assert
|
---|
182 | };
|
---|
183 | script.runInNewContext(context);
|
---|
184 | });
|
---|
185 | it('late defs setTimeout and then redefine', function (done) {
|
---|
186 | var str = '"use strict";var module = {exports:{}};';
|
---|
187 | str += process;
|
---|
188 | str += 'var setTimeout = hiddenSetTimeout;process.nextTick(function () {setTimeout = function (){throw new Error("foo")};hiddenSetTimeout(function(){process.nextTick(function (){assert.ok(true);done();});});});';
|
---|
189 | var script = new vm.Script(str);
|
---|
190 | var context = {
|
---|
191 | clearTimeout: clearTimeout,
|
---|
192 | hiddenSetTimeout: setTimeout,
|
---|
193 | done: done,
|
---|
194 | assert: assert
|
---|
195 | };
|
---|
196 | script.runInNewContext(context);
|
---|
197 | });
|
---|
198 | });
|
---|
199 | }
|
---|