pool.test.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
  3. var _iterator = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/symbol/iterator"));
  4. var _symbol = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/symbol"));
  5. var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
  6. var _pool = require("./pool");
  7. var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
  8. function adopt(value) {
  9. return value instanceof P ? value : new P(function (resolve) {
  10. resolve(value);
  11. });
  12. }
  13. return new (P || (P = _promise["default"]))(function (resolve, reject) {
  14. function fulfilled(value) {
  15. try {
  16. step(generator.next(value));
  17. } catch (e) {
  18. reject(e);
  19. }
  20. }
  21. function rejected(value) {
  22. try {
  23. step(generator["throw"](value));
  24. } catch (e) {
  25. reject(e);
  26. }
  27. }
  28. function step(result) {
  29. result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
  30. }
  31. step((generator = generator.apply(thisArg, _arguments || [])).next());
  32. });
  33. };
  34. var __generator = void 0 && (void 0).__generator || function (thisArg, body) {
  35. var _ = {
  36. label: 0,
  37. sent: function sent() {
  38. if (t[0] & 1) throw t[1];
  39. return t[1];
  40. },
  41. trys: [],
  42. ops: []
  43. },
  44. f,
  45. y,
  46. t,
  47. g;
  48. return g = {
  49. next: verb(0),
  50. "throw": verb(1),
  51. "return": verb(2)
  52. }, typeof _symbol["default"] === "function" && (g[_iterator["default"]] = function () {
  53. return this;
  54. }), g;
  55. function verb(n) {
  56. return function (v) {
  57. return step([n, v]);
  58. };
  59. }
  60. function step(op) {
  61. if (f) throw new TypeError("Generator is already executing.");
  62. while (_) {
  63. try {
  64. if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
  65. if (y = 0, t) op = [op[0] & 2, t.value];
  66. switch (op[0]) {
  67. case 0:
  68. case 1:
  69. t = op;
  70. break;
  71. case 4:
  72. _.label++;
  73. return {
  74. value: op[1],
  75. done: false
  76. };
  77. case 5:
  78. _.label++;
  79. y = op[1];
  80. op = [0];
  81. continue;
  82. case 7:
  83. op = _.ops.pop();
  84. _.trys.pop();
  85. continue;
  86. default:
  87. if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
  88. _ = 0;
  89. continue;
  90. }
  91. if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
  92. _.label = op[1];
  93. break;
  94. }
  95. if (op[0] === 6 && _.label < t[1]) {
  96. _.label = t[1];
  97. t = op;
  98. break;
  99. }
  100. if (t && _.label < t[2]) {
  101. _.label = t[2];
  102. _.ops.push(op);
  103. break;
  104. }
  105. if (t[2]) _.ops.pop();
  106. _.trys.pop();
  107. continue;
  108. }
  109. op = body.call(thisArg, _);
  110. } catch (e) {
  111. op = [6, e];
  112. y = 0;
  113. } finally {
  114. f = t = 0;
  115. }
  116. }
  117. if (op[0] & 5) throw op[1];
  118. return {
  119. value: op[0] ? op[1] : void 0,
  120. done: true
  121. };
  122. }
  123. };
  124. var m = jest.fn();
  125. var task = function task() {
  126. return new _promise["default"](function (resolve, _) {
  127. m();
  128. resolve();
  129. });
  130. };
  131. describe('test Pool for control concurrency', function () {
  132. var pool = new _pool.Pool(task, 2);
  133. test('pool.js', function () {
  134. return __awaiter(void 0, void 0, void 0, function () {
  135. var chunk, data;
  136. return __generator(this, function (_a) {
  137. chunk = new Blob();
  138. data = [{
  139. chunk: chunk,
  140. index: 0
  141. }, {
  142. chunk: chunk,
  143. index: 1
  144. }, {
  145. chunk: chunk,
  146. index: 2
  147. }, {
  148. chunk: chunk,
  149. index: 3
  150. }, {
  151. chunk: chunk,
  152. index: 4
  153. }, {
  154. chunk: chunk,
  155. index: 5
  156. }];
  157. return [2
  158. /*return*/
  159. , _promise["default"].all(data.map(function (value) {
  160. return __awaiter(void 0, void 0, void 0, function () {
  161. return __generator(this, function (_a) {
  162. switch (_a.label) {
  163. case 0:
  164. return [4
  165. /*yield*/
  166. , pool.enqueue(value)];
  167. case 1:
  168. _a.sent();
  169. expect(pool.processing.length).toBeLessThanOrEqual(2);
  170. return [2
  171. /*return*/
  172. ];
  173. }
  174. });
  175. });
  176. })).then(function () {
  177. expect(m.mock.calls.length).toBe(6);
  178. })];
  179. });
  180. });
  181. });
  182. });