UNPKG

6.31 kBJavaScriptView Raw
1var assert = require('assert');
2var ourProcess = require('./browser');
3describe('test against our process', function () {
4 test(ourProcess);
5});
6if (!process.browser) {
7 describe('test against node', function () {
8 test(process);
9 });
10 vmtest();
11}
12function 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 });
40if (!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}
115function 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}