Skip to content

Commit 85752eb

Browse files
committed
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.
1 parent 31dfc73 commit 85752eb

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed

spec/helpers/test-helper.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,10 @@ import {$$iterator} from '../../dist/cjs/symbol/iterator';
88
import $$symbolObservable from 'symbol-observable';
99

1010
export function lowerCaseO<T>(...args): Rx.Observable<T> {
11-
const values = [].slice.apply(arguments);
1211

1312
const o = {
1413
subscribe: function (observer) {
15-
values.forEach(function (v) {
14+
args.forEach(function (v) {
1615
observer.next(v);
1716
});
1817
observer.complete();

spec/observables/merge-spec.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {expect} from 'chai';
22
import * as Rx from '../../dist/cjs/Rx';
3+
import {lowerCaseO} from '../helpers/test-helper';
34
import marbleTestingSignature = require('../helpers/marble-testing'); // tslint:disable-line:no-require-imports
45

56
declare const hot: typeof marbleTestingSignature.hot;
@@ -210,6 +211,36 @@ describe('Observable.merge(...observables)', () => {
210211
expectSubscriptions(e1.subscriptions).toBe(e1subs);
211212
expectSubscriptions(e2.subscriptions).toBe(e2subs);
212213
});
214+
215+
it('should merge single lowerCaseO into RxJS Observable', () => {
216+
const e1 = lowerCaseO('a', 'b', 'c');
217+
218+
const result = Observable.merge(e1);
219+
220+
expect(result).to.be.instanceof(Observable);
221+
expectObservable(result).toBe('(abc|)');
222+
});
223+
224+
it('should merge two lowerCaseO into RxJS Observable', () => {
225+
const e1 = lowerCaseO('a', 'b', 'c');
226+
const e2 = lowerCaseO('d', 'e', 'f');
227+
228+
const result = Observable.merge(e1, e2);
229+
230+
expect(result).to.be.instanceof(Observable);
231+
expectObservable(result).toBe('(abcdef|)');
232+
});
233+
});
234+
235+
describe('Observable.merge(...observables, Scheduler)', () => {
236+
it('should merge single lowerCaseO into RxJS Observable', () => {
237+
const e1 = lowerCaseO('a', 'b', 'c');
238+
239+
const result = Observable.merge(e1, rxTestScheduler);
240+
241+
expect(result).to.be.instanceof(Observable);
242+
expectObservable(result).toBe('(abc|)');
243+
});
213244
});
214245

215246
describe('Observable.merge(...observables, Scheduler, number)', () => {

src/operator/merge.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ export function mergeStatic<T, R>(...observables: Array<ObservableInput<any> | I
160160
concurrent = <number>observables.pop();
161161
}
162162

163-
if (scheduler === null && observables.length === 1) {
163+
if (scheduler === null && observables.length === 1 && observables[0] instanceof Observable) {
164164
return <Observable<R>>observables[0];
165165
}
166166

0 commit comments

Comments
 (0)