From 85752ebc22561c62aa98b004fd259347cea4742c Mon Sep 17 00:00:00 2001 From: Mateusz Podlasin Date: Sun, 12 Feb 2017 17:45:25 +0100 Subject: [PATCH] fix(merge): return Observable when called with single lowerCaseO Return Observable when merge is called with single lower case observable, so that merge would always return Observable instance. --- spec/helpers/test-helper.ts | 3 +-- spec/observables/merge-spec.ts | 31 +++++++++++++++++++++++++++++++ src/operator/merge.ts | 2 +- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/spec/helpers/test-helper.ts b/spec/helpers/test-helper.ts index 5f9e2c19c3..2acd0f40d9 100644 --- a/spec/helpers/test-helper.ts +++ b/spec/helpers/test-helper.ts @@ -8,11 +8,10 @@ import {$$iterator} from '../../dist/cjs/symbol/iterator'; import $$symbolObservable from 'symbol-observable'; export function lowerCaseO(...args): Rx.Observable { - const values = [].slice.apply(arguments); const o = { subscribe: function (observer) { - values.forEach(function (v) { + args.forEach(function (v) { observer.next(v); }); observer.complete(); diff --git a/spec/observables/merge-spec.ts b/spec/observables/merge-spec.ts index 552144abe8..c49e61f811 100644 --- a/spec/observables/merge-spec.ts +++ b/spec/observables/merge-spec.ts @@ -1,5 +1,6 @@ import {expect} from 'chai'; import * as Rx from '../../dist/cjs/Rx'; +import {lowerCaseO} from '../helpers/test-helper'; import marbleTestingSignature = require('../helpers/marble-testing'); // tslint:disable-line:no-require-imports declare const hot: typeof marbleTestingSignature.hot; @@ -210,6 +211,36 @@ describe('Observable.merge(...observables)', () => { expectSubscriptions(e1.subscriptions).toBe(e1subs); expectSubscriptions(e2.subscriptions).toBe(e2subs); }); + + it('should merge single lowerCaseO into RxJS Observable', () => { + const e1 = lowerCaseO('a', 'b', 'c'); + + const result = Observable.merge(e1); + + expect(result).to.be.instanceof(Observable); + expectObservable(result).toBe('(abc|)'); + }); + + it('should merge two lowerCaseO into RxJS Observable', () => { + const e1 = lowerCaseO('a', 'b', 'c'); + const e2 = lowerCaseO('d', 'e', 'f'); + + const result = Observable.merge(e1, e2); + + expect(result).to.be.instanceof(Observable); + expectObservable(result).toBe('(abcdef|)'); + }); +}); + +describe('Observable.merge(...observables, Scheduler)', () => { + it('should merge single lowerCaseO into RxJS Observable', () => { + const e1 = lowerCaseO('a', 'b', 'c'); + + const result = Observable.merge(e1, rxTestScheduler); + + expect(result).to.be.instanceof(Observable); + expectObservable(result).toBe('(abc|)'); + }); }); describe('Observable.merge(...observables, Scheduler, number)', () => { diff --git a/src/operator/merge.ts b/src/operator/merge.ts index 1a34d10db4..1500cb4f19 100644 --- a/src/operator/merge.ts +++ b/src/operator/merge.ts @@ -160,7 +160,7 @@ export function mergeStatic(...observables: Array | I concurrent = observables.pop(); } - if (scheduler === null && observables.length === 1) { + if (scheduler === null && observables.length === 1 && observables[0] instanceof Observable) { return >observables[0]; }