|
@@ -0,0 +1,58 @@
|
|
|
+describe('sample', function()
|
|
|
+ it('errors if no sampler is specified', function()
|
|
|
+ expect(function() Rx.Observable.empty():sample() end).to.fail()
|
|
|
+ end)
|
|
|
+
|
|
|
+ it('produces nil values if the sampler fires before the source does', function()
|
|
|
+ local sampler = Rx.Observable.fromRange(3)
|
|
|
+ local onNext, onError, onCompleted = observableSpy(Rx.Observable.empty():sample(sampler))
|
|
|
+ expect(#onNext).to.equal(3)
|
|
|
+ expect(next(onNext[1])).to_not.exist()
|
|
|
+ expect(next(onNext[2])).to_not.exist()
|
|
|
+ expect(next(onNext[3])).to_not.exist()
|
|
|
+ end)
|
|
|
+
|
|
|
+ it('produces the latest value produced by the source when the sampler fires', function()
|
|
|
+ local a = Rx.Subject.create()
|
|
|
+ local b = Rx.Subject.create()
|
|
|
+ local onNext, onError, onCompleted = observableSpy(a:sample(b))
|
|
|
+ a:onNext(1)
|
|
|
+ b:onNext('a')
|
|
|
+ b:onNext('b')
|
|
|
+ a:onNext(2)
|
|
|
+ a:onNext(3)
|
|
|
+ b:onNext('c')
|
|
|
+ a:onCompleted()
|
|
|
+ b:onCompleted()
|
|
|
+ expect(onNext).to.equal({{1}, {1}, {3}})
|
|
|
+ end)
|
|
|
+
|
|
|
+ it('completes when the sampler completes', function()
|
|
|
+ local a = Rx.Subject.create()
|
|
|
+ local b = Rx.Subject.create()
|
|
|
+ local onNext, onError, onCompleted = observableSpy(a:sample(b))
|
|
|
+ a:onNext(1)
|
|
|
+ a:onCompleted()
|
|
|
+ b:onNext('a')
|
|
|
+ b:onNext('b')
|
|
|
+ b:onNext('c')
|
|
|
+ expect(#onCompleted).to.equal(0)
|
|
|
+ b:onCompleted()
|
|
|
+ expect(#onCompleted).to.equal(1)
|
|
|
+ expect(onNext).to.equal({{1}, {1}, {1}})
|
|
|
+ end)
|
|
|
+
|
|
|
+ it('errors when the source errors', function()
|
|
|
+ local a = Rx.Observable.throw()
|
|
|
+ local b = Rx.Observable.fromRange(3)
|
|
|
+ local onNext, onError, onCompleted = observableSpy(a:sample(b))
|
|
|
+ expect(#onError).to.equal(1)
|
|
|
+ end)
|
|
|
+
|
|
|
+ it('errors when the sampler errors', function()
|
|
|
+ local a = Rx.Observable.fromRange(3)
|
|
|
+ local b = Rx.Observable.throw()
|
|
|
+ local onNext, onError, onCompleted = observableSpy(a:sample(b))
|
|
|
+ expect(#onError).to.equal(1)
|
|
|
+ end)
|
|
|
+end)
|