describe('skipUntil', function() it('produces an error if its parent errors', function() local trigger = Rx.Observable.of() local observable = Rx.Observable.of(''):map(function(x) return x() end) expect(observable).to.produce.error() expect(observable:skipUntil(trigger)).to.produce.error() end) it('fails if the first argument is not an Observable', function() local observable = Rx.Observable.of(3) expect(observable:skipUntil(nil)).to.fail() expect(observable:skipUntil(0)).to.fail() expect(observable:skipUntil({})).to.fail() end) it('produces no values if the specified observable does not produce any values', function() local trigger = Rx.Observable.create(function() end) local observable = Rx.Observable.fromTable({2, 3, 4}):skipUntil(trigger) local onNext, onError, onCompleted = observableSpy(observable) expect(#onNext).to.equal(0) expect(#onError).to.equal(0) expect(#onCompleted).to.equal(0) end) it('produces values after the specified observable produces a value', function() local onNext = spy() local trigger = Rx.Subject.create() local subject = Rx.Subject.create() subject:skipUntil(trigger):subscribe(Rx.Observer.create(onNext)) subject:onNext('a') subject:onNext('b') trigger:onNext('a') subject:onNext('c') subject:onNext('d') subject:onCompleted() expect(onNext).to.equal({{'c'}, {'d'}}) end) it('produces all values if the specified observable fires immediately', function() local onNext = spy() local subject = Rx.Subject.create() subject:skipUntil(Rx.Observable.of(1)):subscribe(Rx.Observer.create(onNext)) subject:onNext(1) subject:onNext(2) subject:onNext(3) subject:onCompleted() expect(onNext).to.equal({{1}, {2}, {3}}) end) end)