test.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /* eslint handle-callback-err:0, no-magic-numbers:0, no-unused-vars:0 */
  2. 'use strict'
  3. // Import
  4. const events = require('events')
  5. const equal = require('assert-helpers').equal
  6. const joe = require('joe')
  7. const domain = require('./')
  8. // =====================================
  9. // Tests
  10. joe.describe('domain-browser', function (describe, it) {
  11. it('should work on throws', function (done) {
  12. const d = domain.create()
  13. d.on('error', function (err) {
  14. equal(err && err.message, 'a thrown error', 'error message')
  15. done()
  16. })
  17. d.run(function () {
  18. throw new Error('a thrown error')
  19. })
  20. })
  21. it('should be able to add emitters', function (done) {
  22. const d = domain.create()
  23. const emitter = new events.EventEmitter()
  24. d.add(emitter)
  25. d.on('error', function (err) {
  26. equal(err && err.message, 'an emitted error', 'error message')
  27. done()
  28. })
  29. emitter.emit('error', new Error('an emitted error'))
  30. })
  31. it('should be able to remove emitters', function (done) {
  32. const emitter = new events.EventEmitter()
  33. const d = domain.create()
  34. let domainGotError = false
  35. d.add(emitter)
  36. d.on('error', function (err) {
  37. domainGotError = true
  38. })
  39. emitter.on('error', function (err) {
  40. equal(err && err.message, 'This error should not go to the domain', 'error message')
  41. // Make sure nothing race condition-y is happening
  42. setTimeout(function () {
  43. equal(domainGotError, false, 'no domain error')
  44. done()
  45. }, 0)
  46. })
  47. d.remove(emitter)
  48. emitter.emit('error', new Error('This error should not go to the domain'))
  49. })
  50. it('bind should work', function (done) {
  51. const d = domain.create()
  52. d.on('error', function (err) {
  53. equal(err && err.message, 'a thrown error', 'error message')
  54. done()
  55. })
  56. d.bind(function (err, a, b) {
  57. equal(err && err.message, 'a passed error', 'error message')
  58. equal(a, 2, 'value of a')
  59. equal(b, 3, 'value of b')
  60. throw new Error('a thrown error')
  61. })(new Error('a passed error'), 2, 3)
  62. })
  63. it('intercept should work', function (done) {
  64. const d = domain.create()
  65. let count = 0
  66. d.on('error', function (err) {
  67. if ( count === 0 ) {
  68. equal(err && err.message, 'a thrown error', 'error message')
  69. }
  70. else if ( count === 1 ) {
  71. equal(err && err.message, 'a passed error', 'error message')
  72. done()
  73. }
  74. count++
  75. })
  76. d.intercept(function (a, b) {
  77. equal(a, 2, 'value of a')
  78. equal(b, 3, 'value of b')
  79. throw new Error('a thrown error')
  80. })(null, 2, 3)
  81. d.intercept(function (a, b) {
  82. throw new Error('should never reach here')
  83. })(new Error('a passed error'), 2, 3)
  84. })
  85. })