promise.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. var assert = require("assert"),
  2. all = require("../promise").all,
  3. when = require("../promise").when,
  4. whenPromise = require("../promise").whenPromise,
  5. defer = require("../promise").defer,
  6. Promise = require("../promise"),
  7. Step = require("../step").Step;
  8. exports.testSpeedPlainValue = function(){
  9. for(var i = 0; i < 1000; i++){
  10. when(3, function(){
  11. });
  12. }
  13. };
  14. exports.testSpeedPromise = function(){
  15. var deferred = defer();
  16. for(var i = 0; i < 1000; i++){
  17. when(deferred.promise, function(){
  18. });
  19. }
  20. deferred.resolve(3);
  21. };
  22. exports.testWhenPromiseRejectHandled = function(){
  23. // The inner whenPromise doesn't have a rejectCallback, but the outer one does.
  24. // This means the error then *is* handled, but the inner whenPromise doesn't know about that.
  25. // This shouldn't result in an uncaught exception thrown by the promise library.
  26. whenPromise(true, function(){
  27. return whenPromise((function(){
  28. var deferred = defer();
  29. deferred.reject({});
  30. return deferred.promise;
  31. })());
  32. }).then(null, function(){});
  33. };
  34. exports.testMultipleReject = function(){
  35. all(delayedFail(25), delayedFail(50), delayedSuccess(75)).then(function () {
  36. throw new Error('There should be no success here.');
  37. }, function () {
  38. // This is where we want to end up, once only.
  39. });
  40. };
  41. function delayedSuccess(delay) {
  42. var deferred = defer();
  43. setTimeout(function () {
  44. deferred.resolve();
  45. }, delay);
  46. return deferred.promise;
  47. }
  48. function delayedFail(delay) {
  49. var deferred = defer();
  50. setTimeout(function () {
  51. deferred.reject();
  52. }, delay);
  53. return deferred.promise;
  54. }
  55. function veryDeferred(){
  56. var deferred = defer();
  57. setTimeout(function(){
  58. deferred.resolve(true);
  59. }, 100);
  60. return deferred.promise;
  61. }
  62. function veryDeferred(){
  63. var deferred = defer();
  64. setTimeout(function(){
  65. deferred.resolve(true);
  66. }, 100);
  67. return deferred.promise;
  68. }
  69. exports.testStep = function(){
  70. var deferred = defer();
  71. Step({foo: 'bar'}, [
  72. function(){
  73. console.log('S1');
  74. assert.ok(this.foo === 'bar');
  75. return false;
  76. },
  77. function(result){
  78. console.log('S2');
  79. assert.ok(result === false);
  80. this.foo = 'baz';
  81. return veryDeferred();
  82. },
  83. function(result){
  84. console.log('S3');
  85. assert.ok(this.foo === 'baz');
  86. assert.ok(result === true);
  87. throw Error('Catchme!');
  88. },
  89. function(result){
  90. console.log('S4');
  91. assert.ok(result instanceof Error);
  92. assert.ok(result.message === 'Catchme!');
  93. deferred.resolve(true);
  94. // return undefined;
  95. },
  96. function(result){
  97. console.log('S5', result);
  98. // Should never come here
  99. deferred.reject(false);
  100. assert.ok(true === false);
  101. },
  102. ]);
  103. return deferred.promise;
  104. };
  105. exports.testAsValue = function (){
  106. var deferred = Promise.as("supercala");
  107. deferred.then(function (res) {
  108. assert.ok(res == "supercala");
  109. }, function () {
  110. throw new Error("Unexpected error");
  111. });
  112. };
  113. exports.testAsPromise = function (){
  114. var temp = defer();
  115. temp.resolve("supercala");
  116. var deferred = Promise.as(temp);
  117. assert.ok(temp === deferred);
  118. deferred.then(function (res) {
  119. assert.ok(res == "supercala");
  120. }, function () {
  121. throw new Error("Unexpected error");
  122. });
  123. };
  124. if (require.main === module)
  125. require("patr/runner").run(exports);