| /* eslint handle-callback-err:0, no-magic-numbers:0, no-unused-vars:0 */ |
| 'use strict' |
| |
| // Import |
| const events = require('events') |
| const equal = require('assert-helpers').equal |
| const joe = require('joe') |
| const domain = require('./') |
| |
| // ===================================== |
| // Tests |
| |
| joe.describe('domain-browser', function (describe, it) { |
| it('should work on throws', function (done) { |
| const d = domain.create() |
| d.on('error', function (err) { |
| equal(err && err.message, 'a thrown error', 'error message') |
| done() |
| }) |
| d.run(function () { |
| throw new Error('a thrown error') |
| }) |
| }) |
| |
| it('should be able to add emitters', function (done) { |
| const d = domain.create() |
| const emitter = new events.EventEmitter() |
| |
| d.add(emitter) |
| d.on('error', function (err) { |
| equal(err && err.message, 'an emitted error', 'error message') |
| done() |
| }) |
| |
| emitter.emit('error', new Error('an emitted error')) |
| }) |
| |
| it('should be able to remove emitters', function (done) { |
| const emitter = new events.EventEmitter() |
| const d = domain.create() |
| let domainGotError = false |
| |
| d.add(emitter) |
| d.on('error', function (err) { |
| domainGotError = true |
| }) |
| |
| emitter.on('error', function (err) { |
| equal(err && err.message, 'This error should not go to the domain', 'error message') |
| |
| // Make sure nothing race condition-y is happening |
| setTimeout(function () { |
| equal(domainGotError, false, 'no domain error') |
| done() |
| }, 0) |
| }) |
| |
| d.remove(emitter) |
| emitter.emit('error', new Error('This error should not go to the domain')) |
| }) |
| |
| it('bind should work', function (done) { |
| const d = domain.create() |
| d.on('error', function (err) { |
| equal(err && err.message, 'a thrown error', 'error message') |
| done() |
| }) |
| d.bind(function (err, a, b) { |
| equal(err && err.message, 'a passed error', 'error message') |
| equal(a, 2, 'value of a') |
| equal(b, 3, 'value of b') |
| throw new Error('a thrown error') |
| })(new Error('a passed error'), 2, 3) |
| }) |
| |
| it('intercept should work', function (done) { |
| const d = domain.create() |
| let count = 0 |
| d.on('error', function (err) { |
| if ( count === 0 ) { |
| equal(err && err.message, 'a thrown error', 'error message') |
| } |
| else if ( count === 1 ) { |
| equal(err && err.message, 'a passed error', 'error message') |
| done() |
| } |
| count++ |
| }) |
| |
| d.intercept(function (a, b) { |
| equal(a, 2, 'value of a') |
| equal(b, 3, 'value of b') |
| throw new Error('a thrown error') |
| })(null, 2, 3) |
| |
| d.intercept(function (a, b) { |
| throw new Error('should never reach here') |
| })(new Error('a passed error'), 2, 3) |
| }) |
| }) |