sample.lua 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. local onNext, onError, onCompleted = observableSpy(a:sample(b))
  42. expect(#onError).to.equal(1)
  43. end)
  44. it('errors when the sampler errors', function()
  45. local a = Rx.Observable.fromRange(3)
  46. local b = Rx.Observable.throw()
  47. local onNext, onError, onCompleted = observableSpy(a:sample(b))
  48. expect(#onError).to.equal(1)
  49. end)
  50. end)