RxLua/tests/sample.lua
2016-01-09 16:11:13 -08:00

59 lines
1.8 KiB
Lua

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)