for-each.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import assert from 'assert';
  2. describe('forEach', () => {
  3. it('rejects if the argument is not a function', async () => {
  4. let promise = Observable.of(1, 2, 3).forEach();
  5. try {
  6. await promise;
  7. assert.ok(false);
  8. } catch (err) {
  9. assert.equal(err.name, 'TypeError');
  10. }
  11. });
  12. it('rejects if the callback throws', async () => {
  13. let error = {};
  14. try {
  15. await Observable.of(1, 2, 3).forEach(x => { throw error });
  16. assert.ok(false);
  17. } catch (err) {
  18. assert.equal(err, error);
  19. }
  20. });
  21. it('does not execute callback after callback throws', async () => {
  22. let calls = [];
  23. try {
  24. await Observable.of(1, 2, 3).forEach(x => {
  25. calls.push(x);
  26. throw {};
  27. });
  28. assert.ok(false);
  29. } catch (err) {
  30. assert.deepEqual(calls, [1]);
  31. }
  32. });
  33. it('rejects if the producer calls error', async () => {
  34. let error = {};
  35. try {
  36. let observer;
  37. let promise = new Observable(x => { observer = x }).forEach(() => {});
  38. observer.error(error);
  39. await promise;
  40. assert.ok(false);
  41. } catch (err) {
  42. assert.equal(err, error);
  43. }
  44. });
  45. it('resolves with undefined if the producer calls complete', async () => {
  46. let observer;
  47. let promise = new Observable(x => { observer = x }).forEach(() => {});
  48. observer.complete();
  49. assert.equal(await promise, undefined);
  50. });
  51. it('provides a cancellation function as the second argument', async () => {
  52. let observer;
  53. let results = [];
  54. await Observable.of(1, 2, 3).forEach((value, cancel) => {
  55. results.push(value);
  56. if (value > 1) {
  57. return cancel();
  58. }
  59. });
  60. assert.deepEqual(results, [1, 2]);
  61. });
  62. });