123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- var assert = require('assert');
- var ourProcess = require('./browser');
- describe('test against our process', function () {
- test(ourProcess);
- });
- if (!process.browser) {
- describe('test against node', function () {
- test(process);
- });
- vmtest();
- }
- function test (ourProcess) {
- describe('test arguments', function () {
- it ('works', function (done) {
- var order = 0;
- ourProcess.nextTick(function (num) {
- assert.equal(num, order++, 'first one works');
- ourProcess.nextTick(function (num) {
- assert.equal(num, order++, 'recursive one is 4th');
- }, 3);
- }, 0);
- ourProcess.nextTick(function (num) {
- assert.equal(num, order++, 'second one starts');
- ourProcess.nextTick(function (num) {
- assert.equal(num, order++, 'this is third');
- ourProcess.nextTick(function (num) {
- assert.equal(num, order++, 'this is last');
- done();
- }, 5);
- }, 4);
- }, 1);
- ourProcess.nextTick(function (num) {
- assert.equal(num, order++, '3rd schedualed happens after the error');
- }, 2);
- });
- });
- if (!process.browser) {
- describe('test errors', function (t) {
- it ('works', function (done) {
- var order = 0;
- process.removeAllListeners('uncaughtException');
- process.once('uncaughtException', function(err) {
- assert.equal(2, order++, 'error is third');
- ourProcess.nextTick(function () {
- assert.equal(5, order++, 'schedualed in error is last');
- done();
- });
- });
- ourProcess.nextTick(function () {
- assert.equal(0, order++, 'first one works');
- ourProcess.nextTick(function () {
- assert.equal(4, order++, 'recursive one is 4th');
- });
- });
- ourProcess.nextTick(function () {
- assert.equal(1, order++, 'second one starts');
- throw(new Error('an error is thrown'));
- });
- ourProcess.nextTick(function () {
- assert.equal(3, order++, '3rd schedualed happens after the error');
- });
- });
- });
- }
- describe('rename globals', function (t) {
- var oldTimeout = setTimeout;
- var oldClear = clearTimeout;
- it('clearTimeout', function (done){
- var ok = true;
- clearTimeout = function () {
- ok = false;
- }
- var ran = false;
- function cleanup() {
- clearTimeout = oldClear;
- var err;
- try {
- assert.ok(ok, 'fake clearTimeout ran');
- assert.ok(ran, 'should have run');
- } catch (e) {
- err = e;
- }
- done(err);
- }
- setTimeout(cleanup, 1000);
- ourProcess.nextTick(function () {
- ran = true;
- });
- });
- it('just setTimeout', function (done){
- setTimeout = function () {
- setTimeout = oldTimeout;
- try {
- assert.ok(false, 'fake setTimeout called')
- } catch (e) {
- done(e);
- }
- }
- ourProcess.nextTick(function () {
- setTimeout = oldTimeout;
- done();
- });
- });
- });
- }
- function vmtest() {
- var vm = require('vm');
- var fs = require('fs');
- var process = fs.readFileSync('./browser.js', {encoding: 'utf8'});
- describe('should work in vm in strict mode with no globals', function () {
- it('should parse', function (done) {
- var str = '"use strict";var module = {exports:{}};';
- str += process;
- str += 'this.works = process.browser;';
- var script = new vm.Script(str);
- var context = {
- works: false
- };
- script.runInNewContext(context);
- assert.ok(context.works);
- done();
- });
- it('setTimeout throws error', function (done) {
- var str = '"use strict";var module = {exports:{}};';
- str += process;
- str += 'try {process.nextTick(function () {})} catch (e){this.works = e;}';
- var script = new vm.Script(str);
- var context = {
- works: false
- };
- script.runInNewContext(context);
- assert.ok(context.works);
- done();
- });
- it('should generally work', function (done) {
- var str = '"use strict";var module = {exports:{}};';
- str += process;
- str += 'process.nextTick(function () {assert.ok(true);done();})';
- var script = new vm.Script(str);
- var context = {
- clearTimeout: clearTimeout,
- setTimeout: setTimeout,
- done: done,
- assert: assert
- };
- script.runInNewContext(context);
- });
- it('late defs setTimeout', function (done) {
- var str = '"use strict";var module = {exports:{}};';
- str += process;
- str += 'var setTimeout = hiddenSetTimeout;process.nextTick(function () {assert.ok(true);done();})';
- var script = new vm.Script(str);
- var context = {
- clearTimeout: clearTimeout,
- hiddenSetTimeout: setTimeout,
- done: done,
- assert: assert
- };
- script.runInNewContext(context);
- });
- it('late defs clearTimeout', function (done) {
- var str = '"use strict";var module = {exports:{}};';
- str += process;
- str += 'var clearTimeout = hiddenClearTimeout;process.nextTick(function () {assert.ok(true);done();})';
- var script = new vm.Script(str);
- var context = {
- hiddenClearTimeout: clearTimeout,
- setTimeout: setTimeout,
- done: done,
- assert: assert
- };
- script.runInNewContext(context);
- });
- it('late defs setTimeout and then redefine', function (done) {
- var str = '"use strict";var module = {exports:{}};';
- str += process;
- str += 'var setTimeout = hiddenSetTimeout;process.nextTick(function () {setTimeout = function (){throw new Error("foo")};hiddenSetTimeout(function(){process.nextTick(function (){assert.ok(true);done();});});});';
- var script = new vm.Script(str);
- var context = {
- clearTimeout: clearTimeout,
- hiddenSetTimeout: setTimeout,
- done: done,
- assert: assert
- };
- script.runInNewContext(context);
- });
- });
- }
|