Skip to content
This repository was archived by the owner on Apr 20, 2018. It is now read-only.

Commit 218a834

Browse files
Merge pull request #646 from paulpdaniels/filter-map-thisarg-fix
Filter map ThisArg fix
2 parents 018d570 + e6210fb commit 218a834

5 files changed

Lines changed: 71 additions & 3 deletions

File tree

src/core/perf/operators/filter.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
FilterObservable.prototype.internalFilter = function(predicate, thisArg) {
1515
var self = this;
16-
return new FilterObservable(this.source, function(x, i, o) { return self.predicate(x, i, o) && predicate(x, i, o); }, thisArg);
16+
return new FilterObservable(this.source, function(x, i, o) { return self.predicate(x, i, o) && predicate.call(this, x, i, o); }, thisArg);
1717
};
1818

1919
return FilterObservable;

src/core/perf/operators/map.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
MapObservable.prototype.internalMap = function (selector, thisArg) {
1111
var self = this;
12-
return new MapObservable(this.source, function (x, i, o) { return selector(self.selector(x, i, o), i, o); }, thisArg)
12+
return new MapObservable(this.source, function (x, i, o) { return selector.call(this, self.selector(x, i, o), i, o); }, thisArg)
1313
};
1414

1515
MapObservable.prototype.subscribeCore = function (observer) {

tests/observable/controlled.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,4 +216,4 @@ test('controlled drops messages with queue disabled', function(){
216216
);
217217

218218

219-
});
219+
});

tests/observable/select.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,4 +356,38 @@
356356
equal(9, invoked2);
357357
});
358358

359+
test('Map and Map thisArg', function(){
360+
361+
var scheduler = new TestScheduler();
362+
363+
function Filterer() {
364+
this.selector1 = function(item) {return item + 2};
365+
this.selector2 = function(item) {return item * 3};
366+
}
367+
368+
var filterer = new Filterer();
369+
370+
var xs = scheduler.createColdObservable(
371+
onNext(10, 1),
372+
onNext(20, 2),
373+
onNext(30, 3),
374+
onNext(40, 4),
375+
onCompleted(100)
376+
);
377+
378+
var results = scheduler.startWithCreate(function() {
379+
return xs
380+
.map(function(x){ return this.selector1(x);}, filterer)
381+
.map(function(x){ return this.selector2(x);}, filterer)
382+
.map(function(x){ return this.selector1(x);}, filterer);
383+
});
384+
385+
results.messages.assertEqual(
386+
onNext(210, 11),
387+
onNext(220, 14),
388+
onNext(230, 17),
389+
onNext(240, 20),
390+
onCompleted(300));
391+
});
392+
359393
}());

tests/observable/where.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,40 @@
728728
equal(4, invoked2);
729729
});
730730

731+
test('Filter and Filter ThisArg', function() {
732+
var scheduler = new TestScheduler();
733+
734+
function Filterer() {
735+
this.filter1 = function(item) {return item % 2 == 0};
736+
this.filter2 = function(item) {return item % 3 == 0};
737+
}
738+
739+
var filterer = new Filterer();
740+
741+
var xs = scheduler.createColdObservable(
742+
onNext(10, 1),
743+
onNext(20, 2),
744+
onNext(30, 3),
745+
onNext(40, 4),
746+
onNext(50, 5),
747+
onNext(60, 6),
748+
onNext(70, 7),
749+
onNext(80, 8),
750+
onNext(90, 9),
751+
onCompleted(100)
752+
);
753+
754+
var results = scheduler.startWithCreate(function() {
755+
return xs
756+
.filter(function(x){ return this.filter1(x);}, filterer)
757+
.filter(function(x){ return this.filter2(x);}, filterer)
758+
.filter(function(x){ return this.filter1(x);}, filterer);
759+
});
760+
761+
results.messages.assertEqual(onNext(260, 6), onCompleted(300));
762+
763+
});
764+
731765
test('Filter and Map Optimization', function () {
732766
var scheduler = new TestScheduler();
733767

0 commit comments

Comments
 (0)