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

Commit 11f1bd8

Browse files
vicbmhevery
authored andcommitted
fix(change detection): Fix for comparing string by value
1 parent 390aea5 commit 11f1bd8

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

lib/change_detection/dirty_checking_change_detector.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,7 @@ class _MapChangeRecord<K, V> implements MapChangeRecord<K, V> {
488488
_truncate(lastOldSeqRecord, oldSeqRecord);
489489
return isDirty;
490490
}
491-
491+
492492
void _reset() {
493493
var record = _changesHead;
494494
while (record != null) {
@@ -577,7 +577,7 @@ class _MapChangeRecord<K, V> implements MapChangeRecord<K, V> {
577577
_removalsTail = record;
578578
}
579579
}
580-
580+
581581
void _removeFromSeq(KeyValueRecord prev, KeyValueRecord record) {
582582
KeyValueRecord next = record._nextKeyValue;
583583
if (prev == null) _mapHead = next; else prev._nextKeyValue = next;
@@ -678,7 +678,7 @@ class _CollectionChangeRecord<K, V> implements CollectionChangeRecord<K, V> {
678678
}
679679

680680
void forEachMove(void f(MovedItem<K, V> change)) {
681-
ItemRecord record = _changesHead;
681+
ItemRecord record = _movesHead;
682682
while(record != null) {
683683
f(record);
684684
record = record._nextMovedRec;
@@ -782,7 +782,7 @@ class _CollectionChangeRecord<K, V> implements CollectionChangeRecord<K, V> {
782782
mismatch(ItemRecord record, dynamic item, int index) {
783783
// Guard against bogus String changes
784784
if (record != null && item is String && record.item is String &&
785-
record == item) {
785+
record.item == item) {
786786
// this is false change in strings we need to recover, and pretend it is
787787
// the same. We save the value so that next time identity will pass
788788
return record..item = item;

test/change_detection/dirty_checking_change_detector_spec.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,16 @@ main() => describe('DirtyCheckingChangeDetector', () {
242242
removals: []));
243243
});
244244

245+
it('should test string by value rather than by reference', () {
246+
var list = ['a', 'boo'];
247+
var record = detector.watch(list, null, 'handler');
248+
detector.collectChanges();
249+
250+
list[1] = 'b' + 'oo';
251+
252+
expect(detector.collectChanges()).toEqual(null);
253+
});
254+
245255
it('should remove and add same item', () {
246256
var list = ['a', 'b', 'c'];
247257
var record = detector.watch(list, null, 'handler');

0 commit comments

Comments
 (0)