merge.lua 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. describe('merge', function()
  2. it('produces values from the first observable if it is the only argument', function()
  3. local observable = Rx.Observable.fromRange(5):merge()
  4. expect(observable).to.produce(1, 2, 3, 4, 5)
  5. end)
  6. it('unsubscribes from all input observables', function()
  7. local observableA = Rx.Observable.create(function(observer)
  8. return
  9. end)
  10. local unsubscribeB = spy()
  11. local subscriptionB = Rx.Subscription.create(unsubscribeB)
  12. local observableB = Rx.Observable.create(function(observer)
  13. return subscriptionB
  14. end)
  15. local subscription = observableA:merge(observableB):subscribe()
  16. subscription:unsubscribe()
  17. expect(#unsubscribeB).to.equal(1)
  18. end)
  19. it('unsubscribes from all input observables included completed', function()
  20. local observableA = Rx.Observable.empty()
  21. local unsubscribeB = spy()
  22. local subscriptionB = Rx.Subscription.create(unsubscribeB)
  23. local observableB = Rx.Observable.create(function(observer)
  24. return subscriptionB
  25. end)
  26. local subscription = observableA:merge(Rx.Observable.empty(), observableB):subscribe()
  27. subscription:unsubscribe()
  28. expect(#unsubscribeB).to.equal(1)
  29. end)
  30. it('produces values from all input observables, in order', function()
  31. local observableA = Rx.Subject.create()
  32. local observableB = Rx.Subject.create()
  33. local merged = observableA:merge(observableB)
  34. local onNext, onError, onCompleted = observableSpy(merged)
  35. observableA:onNext('a')
  36. observableB:onNext('b')
  37. observableB:onNext('b')
  38. observableA:onNext('a')
  39. observableA:onCompleted()
  40. observableB:onCompleted()
  41. expect(onNext).to.equal({{'a'}, {'b'}, {'b'}, {'a'}})
  42. end)
  43. it('completes when all source observables complete', function()
  44. local observableA = Rx.Subject.create()
  45. local observableB = Rx.Subject.create()
  46. local complete = spy()
  47. Rx.Observable.merge(observableA, observableB):subscribe(nil, nil, complete)
  48. expect(#complete).to.equal(0)
  49. observableA:onNext(1)
  50. expect(#complete).to.equal(0)
  51. observableB:onNext(2)
  52. expect(#complete).to.equal(0)
  53. observableB:onCompleted()
  54. expect(#complete).to.equal(0)
  55. observableA:onCompleted()
  56. expect(#complete).to.equal(1)
  57. end)
  58. end)