merge.lua 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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('produces values from all input observables, in order', function()
  20. local observableA = Rx.Subject.create()
  21. local observableB = Rx.Subject.create()
  22. local merged = observableA:merge(observableB)
  23. local onNext, onError, onCompleted = observableSpy(merged)
  24. observableA:onNext('a')
  25. observableB:onNext('b')
  26. observableB:onNext('b')
  27. observableA:onNext('a')
  28. observableA:onCompleted()
  29. observableB:onCompleted()
  30. expect(onNext).to.equal({{'a'}, {'b'}, {'b'}, {'a'}})
  31. end)
  32. it('completes when all source observables complete', function()
  33. local observableA = Rx.Subject.create()
  34. local observableB = Rx.Subject.create()
  35. local complete = spy()
  36. Rx.Observable.merge(observableA, observableB):subscribe(nil, nil, complete)
  37. expect(#complete).to.equal(0)
  38. observableA:onNext(1)
  39. expect(#complete).to.equal(0)
  40. observableB:onNext(2)
  41. expect(#complete).to.equal(0)
  42. observableB:onCompleted()
  43. expect(#complete).to.equal(0)
  44. observableA:onCompleted()
  45. expect(#complete).to.equal(1)
  46. end)
  47. end)