behaviorsubject.lua 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. describe('BehaviorSubject', function()
  2. describe('create', function()
  3. it('returns a BehaviorSubject', function()
  4. expect(Rx.BehaviorSubject.create()).to.be.an(Rx.BehaviorSubject)
  5. end)
  6. it('sets the initial value based on the arguments', function()
  7. local subject = Rx.BehaviorSubject.create(1, 2, 3)
  8. expect({subject:getValue()}).to.equal({1, 2, 3})
  9. end)
  10. end)
  11. describe('subscribe', function()
  12. it('returns a Subscription', function()
  13. local subject = Rx.BehaviorSubject.create()
  14. local observer = Rx.Observer.create()
  15. expect(subject:subscribe(observer)).to.be.an(Rx.Subscription)
  16. end)
  17. it('accepts 3 functions as arguments', function()
  18. local onNext, onCompleted = spy(), spy()
  19. local subject = Rx.BehaviorSubject.create()
  20. subject:subscribe(onNext, nil, onCompleted)
  21. subject:onNext(5)
  22. subject:onCompleted()
  23. expect(onNext).to.equal({{5}})
  24. expect(#onCompleted).to.equal(1)
  25. end)
  26. it('calls onNext with the current value', function()
  27. local subject = Rx.BehaviorSubject.create()
  28. local observer = Rx.Observer.create()
  29. local onNext = spy(observer, '_onNext')
  30. subject:onNext(5)
  31. subject:subscribe(observer)
  32. expect(onNext).to.equal({{5}})
  33. end)
  34. end)
  35. describe('onNext', function()
  36. it('pushes values to all subscribers', function()
  37. local observers = {}
  38. local spies = {}
  39. for i = 1, 2 do
  40. observers[i] = Rx.Observer.create()
  41. spies[i] = spy(observers[i], '_onNext')
  42. end
  43. local subject = Rx.BehaviorSubject.create()
  44. subject:subscribe(observers[1])
  45. subject:subscribe(observers[2])
  46. subject:onNext(1)
  47. subject:onNext(2)
  48. subject:onNext(3)
  49. expect(spies[1]).to.equal({{1}, {2}, {3}})
  50. expect(spies[2]).to.equal({{1}, {2}, {3}})
  51. end)
  52. it('can be called using function syntax', function()
  53. local observer = Rx.Observer.create()
  54. local subject = Rx.BehaviorSubject.create()
  55. local onNext = spy(observer, 'onNext')
  56. subject:subscribe(observer)
  57. subject(4)
  58. expect(#onNext).to.equal(1)
  59. end)
  60. it('sets the current value', function()
  61. local subject = Rx.BehaviorSubject.create()
  62. subject:onNext(1, 2, 3)
  63. expect({subject:getValue()}).to.equal({1, 2, 3})
  64. subject:onNext(4, 5, 6)
  65. expect({subject:getValue()}).to.equal({4, 5, 6})
  66. end)
  67. end)
  68. describe('onError', function()
  69. it('pushes errors to all subscribers', function()
  70. local observers = {}
  71. local spies = {}
  72. for i = 1, 2 do
  73. observers[i] = Rx.Observer.create(nil, function() end, nil)
  74. spies[i] = spy(observers[i], '_onError')
  75. end
  76. local subject = Rx.BehaviorSubject.create()
  77. subject:subscribe(observers[1])
  78. subject:subscribe(observers[2])
  79. subject:onError('ohno')
  80. expect(spies[1]).to.equal({{'ohno'}})
  81. expect(spies[2]).to.equal({{'ohno'}})
  82. end)
  83. end)
  84. describe('onCompleted', function()
  85. it('notifies all subscribers of completion', function()
  86. local observers = {}
  87. local spies = {}
  88. for i = 1, 2 do
  89. observers[i] = Rx.Observer.create(nil, function() end, nil)
  90. spies[i] = spy(observers[i], '_onCompleted')
  91. end
  92. local subject = Rx.BehaviorSubject.create()
  93. subject:subscribe(observers[1])
  94. subject:subscribe(observers[2])
  95. subject:onCompleted()
  96. expect(#spies[1]).to.equal(1)
  97. expect(#spies[2]).to.equal(1)
  98. end)
  99. end)
  100. end)