twitst4tz

twitter statistics web application
Log | Files | Refs | README | LICENSE

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 }