replaysubject.lua 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. describe('ReplaySubject', function()
  2. describe('create', function()
  3. it('returns a ReplaySubject', function()
  4. expect(Rx.ReplaySubject.create()).to.be.an(Rx.ReplaySubject)
  5. end)
  6. it('sets an appropriate buffer size if it is specified', function()
  7. local subject = Rx.ReplaySubject.create(2)
  8. local observer = Rx.Observer.create()
  9. local onNext = spy(observer, '_onNext')
  10. subject:onNext(1)
  11. subject:onNext(2)
  12. subject:onNext(3)
  13. subject:subscribe(observer)
  14. expect(onNext).to.equal({{2}, {3}})
  15. end)
  16. it('keeps an infinite buffer if no buffer size is specified', function()
  17. local subject = Rx.ReplaySubject.create()
  18. local observer = Rx.Observer.create()
  19. local onNext = spy(observer, '_onNext')
  20. subject:onNext(1)
  21. subject:onNext(2)
  22. subject:onNext(3)
  23. subject:subscribe(observer)
  24. expect(onNext).to.equal({{1}, {2}, {3}})
  25. end)
  26. end)
  27. describe('subscribe', function()
  28. it('returns a Subscription', function()
  29. local subject = Rx.ReplaySubject.create()
  30. local observer = Rx.Observer.create()
  31. expect(subject:subscribe(observer)).to.be.an(Rx.Subscription)
  32. end)
  33. it('accepts 3 functions as arguments', function()
  34. local onNext, onCompleted = spy(), spy()
  35. local subject = Rx.ReplaySubject.create()
  36. subject:subscribe(onNext, nil, onCompleted)
  37. subject:onNext(5)
  38. subject:onCompleted()
  39. expect(onNext).to.equal({{5}})
  40. expect(#onCompleted).to.equal(1)
  41. end)
  42. it('calls onNext with the current buffer', function()
  43. local subject = Rx.ReplaySubject.create(2)
  44. local observer = Rx.Observer.create()
  45. local onNext = spy(observer, '_onNext')
  46. subject:onNext(1)
  47. subject:onNext(2)
  48. subject:onNext(3)
  49. subject:subscribe(observer)
  50. expect(onNext).to.equal({{2}, {3}})
  51. end)
  52. end)
  53. describe('onNext', function()
  54. it('pushes values to all subscribers', function()
  55. local observers = {}
  56. local spies = {}
  57. for i = 1, 2 do
  58. observers[i] = Rx.Observer.create()
  59. spies[i] = spy(observers[i], '_onNext')
  60. end
  61. local subject = Rx.ReplaySubject.create()
  62. subject:subscribe(observers[1])
  63. subject:subscribe(observers[2])
  64. subject:onNext(1)
  65. subject:onNext(2)
  66. subject:onNext(3)
  67. expect(spies[1]).to.equal({{1}, {2}, {3}})
  68. expect(spies[2]).to.equal({{1}, {2}, {3}})
  69. end)
  70. it('can be called using function syntax', function()
  71. local observer = Rx.Observer.create()
  72. local subject = Rx.ReplaySubject.create()
  73. local onNext = spy(observer, 'onNext')
  74. subject:subscribe(observer)
  75. subject(4)
  76. expect(#onNext).to.equal(1)
  77. end)
  78. end)
  79. end)