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)