test.js (6310B)
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 }