sample.lua 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. describe('sample', function()
  2. it('errors if no sampler is specified', function()
  3. expect(function() Rx.Observable.empty():sample() end).to.fail()
  4. end)
  5. it('produces nil values if the sampler fires before the source does', function()
  6. local sampler = Rx.Observable.fromRange(3)
  7. local onNext, onError, onCompleted = observableSpy(Rx.Observable.empty():sample(sampler))
  8. expect(#onNext).to.equal(0)
  9. end)
  10. it('produces the latest value produced by the source when the sampler fires', function()
  11. local a = Rx.Subject.create()
  12. local b = Rx.Subject.create()
  13. local onNext, onError, onCompleted = observableSpy(a:sample(b))
  14. a:onNext(1)
  15. b:onNext('a')
  16. b:onNext('b')
  17. a:onNext(2)
  18. a:onNext(3)
  19. b:onNext('c')
  20. a:onCompleted()
  21. b:onCompleted()
  22. expect(onNext).to.equal({{1}, {1}, {3}})
  23. end)
  24. it('completes when the sampler completes', function()
  25. local a = Rx.Subject.create()
  26. local b = Rx.Subject.create()
  27. local onNext, onError, onCompleted = observableSpy(a:sample(b))
  28. a:onNext(1)
  29. a:onCompleted()
  30. b:onNext('a')
  31. b:onNext('b')
  32. b:onNext('c')
  33. expect(#onCompleted).to.equal(0)
  34. b:onCompleted()
  35. expect(#onCompleted).to.equal(1)
  36. expect(onNext).to.equal({{1}, {1}, {1}})
  37. end)
  38. it('errors when the source errors', function()
  39. local a = Rx.Observable.throw()
  40. local b = Rx.Observable.fromRange(3)
  41. expect(a:sample(b)).to.produce.error()
  42. end)
  43. it('errors when the sampler errors', function()
  44. local a = Rx.Observable.fromRange(3)
  45. local b = Rx.Observable.throw()
  46. expect(a:sample(b)).to.produce.error()
  47. end)
  48. end)