subject.lua 2.6 KB

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