diff --git a/tests/observable.lua b/tests/observable.lua index f417cd9..e041a6e 100644 --- a/tests/observable.lua +++ b/tests/observable.lua @@ -171,4 +171,5 @@ describe('Observable', function() dofile('tests/skip.lua') dofile('tests/skipUntil.lua') dofile('tests/take.lua') + dofile('tests/takeUntil.lua') end) diff --git a/tests/takeUntil.lua b/tests/takeUntil.lua new file mode 100644 index 0000000..9d0aaf9 --- /dev/null +++ b/tests/takeUntil.lua @@ -0,0 +1,45 @@ +describe('takeUntil', function() + it('produces an error if its parent errors', function() + local observable = Rx.Observable.fromValue(''):map(function(x) return x() end) + expect(observable.subscribe).to.fail() + expect(observable:takeUntil().subscribe).to.fail() + end) + + it('fails if the first argument is not an Observable', function() + local observable = Rx.Observable.fromValue(3) + expect(observable:takeUntil(nil)).to.fail() + expect(observable:takeUntil(0)).to.fail() + expect(observable:takeUntil({})).to.fail() + end) + + it('produces all 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}):takeUntil(trigger) + expect(observable).to.produce(2, 3, 4) + 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:takeUntil(trigger):subscribe(Rx.Observer.create(onNext)) + subject:onNext('a') + subject:onNext('b') + trigger:onNext('a') + subject:onNext('c') + subject:onNext('d') + subject:onComplete() + expect(onNext).to.equal({{'a'}, {'b'}}) + end) + + it('produces no values if the specified observable fires immediately', function() + local onNext = spy() + local subject = Rx.Subject.create() + subject:takeUntil(Rx.Observable.fromValue(1)):subscribe(Rx.Observer.create(onNext)) + subject:onNext(1) + subject:onNext(2) + subject:onNext(3) + subject:onComplete() + expect(onNext).to.equal({}) + end) +end)