takeUntil.lua 1.6 KB

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