PageRenderTime 52ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/test/mocha/error.js

https://github.com/mpmedia/bluebird
JavaScript | 131 lines | 116 code | 14 blank | 1 comment | 3 complexity | 54ef48ac3ce41dfbce4202a817722775 MD5 | raw file
  1. "use strict";
  2. var assert = require("assert");
  3. var adapter = require("../../js/debug/bluebird.js");
  4. var fulfilled = adapter.fulfilled;
  5. var rejected = adapter.rejected;
  6. var pending = adapter.pending;
  7. var Promise = adapter;
  8. describe("Promise.prototype.error", function(){
  9. describe("catches stuff originating from explicit rejections", function() {
  10. specify("using constructor", function(done) {
  11. var e = new Error("sup");
  12. new Promise(function(resolve, reject) {
  13. reject(e);
  14. }).error(function(err){
  15. assert(err === e);
  16. done();
  17. });
  18. });
  19. specify("using Promise.reject", function(done) {
  20. var e = new Error("sup");
  21. Promise.reject(e).error(function(err) {
  22. assert(err === e);
  23. done();
  24. });
  25. });
  26. specify("using deferred", function(done) {
  27. var e = new Error("sup");
  28. var d = Promise.defer();
  29. d.promise.error(function(err) {
  30. assert(err === e);
  31. done();
  32. });
  33. d.reject(e);
  34. });
  35. specify("using callback", function(done) {
  36. var e = new Promise.TypeError("sup");
  37. function callsback(a, b, c, fn) {
  38. fn(e);
  39. }
  40. callsback = Promise.promisify(callsback);
  41. callsback(1, 2, 3).error(function(err) {
  42. assert(err === e);
  43. done();
  44. });
  45. });
  46. });
  47. describe("does not catch stuff originating from thrown errors", function() {
  48. specify("using constructor", function(done) {
  49. var e = new Error("sup");
  50. new Promise(function(resolve, reject) {
  51. throw e;
  52. }).error(function(err) {
  53. assert.fail();
  54. }).caught(function(err){
  55. assert(err === e);
  56. done();
  57. });
  58. });
  59. specify("using thenable", function(done) {
  60. var e = new Error("sup");
  61. var thenable = {
  62. then: function(resolve, reject){
  63. reject(e);
  64. }
  65. };
  66. Promise.cast(thenable).error(function(err) {
  67. console.error(err);
  68. assert.fail();
  69. }).caught(function(err) {
  70. assert(err === e);
  71. done();
  72. });
  73. });
  74. specify("using callback", function(done) {
  75. var e = new Error("sup");
  76. function callsback(a, b, c, fn) {
  77. throw e;
  78. }
  79. callsback = Promise.promisify(callsback);
  80. callsback(1, 2, 3).error(function(err) {
  81. assert.fail();
  82. }).caught(function(err){
  83. assert(err === e);
  84. done();
  85. });
  86. });
  87. });
  88. specify("gh-54-1", function(done) {
  89. function doThing(arg) {
  90. return new Promise(function (resolve, reject) {
  91. if (typeof arg !== "string") return reject(new Error("invalid thing"));
  92. });
  93. }
  94. doThing().error(function(){
  95. done();
  96. }).caught(function(){
  97. assert.fail();
  98. });
  99. });
  100. specify("gh-54-2", function(done) {
  101. function doBuggyThing(arg) {
  102. return new Promise(function (resolve, rej) {
  103. // arg2 & reject dont exist. this is buggy.
  104. if (arg2 && typeof arg2 !== "string") return reject(new Error("invalid thing"));
  105. });
  106. }
  107. var called = false;
  108. doBuggyThing().error(function(){
  109. called = true;
  110. }).caught(function() {
  111. });
  112. setTimeout(function(){
  113. assert(!called);
  114. done();
  115. }, 13);
  116. });
  117. })