takeUntil.lua 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. describe('takeUntil', function()
  2. it('produces an error if its parent errors', function()
  3. local trigger = Rx.Observable.create(function() end)
  4. local observable = Rx.Observable.of(''):map(function(x) return x() end)
  5. expect(observable).to.produce.error()
  6. expect(observable:takeUntil(trigger)).to.produce.error()
  7. end)
  8. it('fails if the first argument is not an Observable', function()
  9. local observable = Rx.Observable.of(3)
  10. expect(observable:takeUntil(nil)).to.fail()
  11. expect(observable:takeUntil(0)).to.fail()
  12. expect(observable:takeUntil({})).to.fail()
  13. end)
  14. it('produces all values if the specified observable does not produce any values', function()
  15. local trigger = Rx.Observable.create(function() end)
  16. local observable = Rx.Observable.fromTable({2, 3, 4}):takeUntil(trigger)
  17. expect(observable).to.produce(2, 3, 4)
  18. end)
  19. it('produces values after the specified observable produces a value', function()
  20. local onNext = spy()
  21. local trigger = Rx.Subject.create()
  22. local subject = Rx.Subject.create()
  23. subject:takeUntil(trigger):subscribe(Rx.Observer.create(onNext))
  24. subject:onNext('a')
  25. subject:onNext('b')
  26. trigger:onNext('a')
  27. subject:onNext('c')
  28. subject:onNext('d')
  29. subject:onCompleted()
  30. expect(onNext).to.equal({{'a'}, {'b'}})
  31. end)
  32. it('produces no values if the specified observable fires immediately', function()
  33. local onNext = spy()
  34. local subject = Rx.Subject.create()
  35. subject:takeUntil(Rx.Observable.of(1)):subscribe(Rx.Observer.create(onNext))
  36. subject:onNext(1)
  37. subject:onNext(2)
  38. subject:onNext(3)
  39. subject:onCompleted()
  40. expect(onNext).to.equal({})
  41. end)
  42. end)