/node_modules/chain/test/chain.test.js

https://gitlab.com/arendondiosa/webmpi · JavaScript · 190 lines · 149 code · 40 blank · 1 comment · 1 complexity · 7b29c14f7a4579f1378dcaf181c6a450 MD5 · raw file

  1. var chain = require('../chain'), assert = require('assert');
  2. /* Tests run with expresso (https://github.com/visionmedia/expresso) */
  3. var defer = function (func, time) {
  4. setTimeout(func, time || 10);
  5. }
  6. module.exports = {
  7. 'test chain.run()': function () {
  8. chain.run(function() { assert.ok(true); });
  9. var i = j = k = 0;
  10. chain.run(function () { return i++; }, function () { return i++; });
  11. chain.run(function () { return j++; }).then( function () { return j++; });
  12. chain.run(function () { return k++; }).thenRun(function () { return k++; });
  13. assert.equal(2, i);
  14. assert.equal(2, j);
  15. assert.equal(2, k);
  16. var str = '';
  17. chain.run(function (next) {
  18. defer(function () {
  19. str += 'a';
  20. next();
  21. });
  22. }, function () {
  23. return str += 'b';
  24. }).then(function (next) {
  25. defer(function () {
  26. str += 'c';
  27. next();
  28. });
  29. }, function () {
  30. return str += 'd';
  31. });
  32. setTimeout(function() {
  33. assert.equal('badc', str);
  34. }, 50);
  35. },
  36. 'test chain.chain()': function () {
  37. chain.chain(function() { assert.ok(true); });
  38. var x = y = z = 0;
  39. chain.chain(function () { return x=1; }, function () { return x=5; });
  40. chain.chain(function () { return y=1; }).then( function () { return y=5; });
  41. chain.chain(function () { return z=1; }).thenChain(function () { return z=5; });
  42. assert.equal(5, x);
  43. assert.equal(5, y);
  44. assert.equal(5, z);
  45. var str = '';
  46. chain.chain(function (next) {
  47. defer(function () {
  48. str += 'a';
  49. next();
  50. });
  51. }, function () {
  52. return str += 'b';
  53. }).then(function (next) {
  54. defer(function () {
  55. str += 'c';
  56. next();
  57. });
  58. }, function () {
  59. return str += 'd';
  60. });
  61. setTimeout(function() {
  62. assert.equal('abcd', str);
  63. }, 50);
  64. },
  65. 'test chain.onError() with chain()': function () {
  66. var a = b = c = err1 = err2 = 0;
  67. chain.chain(function (next, error) {
  68. try {
  69. error();
  70. c = 0;
  71. } catch (e) {
  72. c = 1;
  73. }
  74. });
  75. assert.equal(1, c);
  76. chain.onError(function () {
  77. err1 = 1;
  78. }).chain(function () {
  79. return a=1;
  80. }, function (next, error) {
  81. error();
  82. return true;
  83. }, function () {
  84. return a=5;
  85. });
  86. assert.equal(1, a);
  87. assert.equal(1, err1);
  88. chain.onError(function () {
  89. err2 = 1;
  90. }).chain(function () {
  91. return b=1;
  92. }).then(function (next, error) {
  93. error();
  94. return true;
  95. }).then(function () {
  96. return b=5;
  97. });
  98. assert.equal(1, b);
  99. assert.equal(1, err2);
  100. },
  101. 'test chain.onError() with run()': function () {
  102. var d = e = err3 = 0;
  103. chain.run(function (next, error) {
  104. try {
  105. error();
  106. d = 0;
  107. } catch (e) {
  108. d = 1;
  109. }
  110. });
  111. assert.equal(1, d);
  112. chain.onError(function () {
  113. err3 = 1;
  114. }).run(function () {
  115. return e=1;
  116. }, function (next, error) {
  117. error();
  118. return true;
  119. }, function () {
  120. return e=5;
  121. });
  122. assert.equal(1, e);
  123. assert.equal(1, err3);
  124. },
  125. 'test chain.addMethod()': function () {
  126. var num = 0;
  127. chain.addMethod('add', function (args, len) {
  128. while(len--) num += args[len];
  129. this.next(true);
  130. });
  131. chain.add(1, 2, 3);
  132. assert.equal(6, num);
  133. chain.add(5).thenAdd(5, 2);
  134. assert.equal(18, num);
  135. chain.add(1, 2).then(3, 4);
  136. assert.equal(28, num);
  137. },
  138. 'test chain.defer()': function () {
  139. var num = 0;
  140. chain.defer(50).thenRun(function () {
  141. num = 1;
  142. });
  143. setTimeout(function() {
  144. assert.equal(0, num);
  145. }, 10);
  146. setTimeout(function() {
  147. assert.equal(1, num);
  148. }, 80);
  149. },
  150. }