basant307/AI_Governance_Project
048
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: false129 };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: false141 };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: assert156 };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: assert169 };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: assert182 };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: assert195 };196 script.runInNewContext(context);197 });198 });199}200 