flatten.lua 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. describe('flatten', function()
  2. it('produces an error if its parent errors', function()
  3. local observable = Rx.Observable.of(''):map(function(x) return x() end)
  4. expect(observable).to.produce.error()
  5. expect(observable:flatten()).to.produce.error()
  6. end)
  7. it('produces all values produced by the observables produced by its parent', function()
  8. local observable = Rx.Observable.fromRange(3):map(function(i)
  9. return Rx.Observable.fromRange(i, 3)
  10. end):flatten()
  11. expect(observable).to.produce(1, 2, 3, 2, 3, 3)
  12. end)
  13. it('should unsubscribe from all source observables', function()
  14. local unsubscribeA = spy()
  15. local observableA = Rx.Observable.create(function(observer)
  16. return Rx.Subscription.create(unsubscribeA)
  17. end)
  18. local unsubscribeB = spy()
  19. local observableB = Rx.Observable.create(function(observer)
  20. return Rx.Subscription.create(unsubscribeB)
  21. end)
  22. local subject = Rx.Subject.create()
  23. local subscription = subject:flatten():subscribe()
  24. subject:onNext(observableA)
  25. subject:onNext(observableB)
  26. subscription:unsubscribe()
  27. expect(#unsubscribeA).to.equal(1)
  28. expect(#unsubscribeB).to.equal(1)
  29. end)
  30. end)