Skip to content

Commit 9bcb2c2

Browse files
committed
Fix expectedIndex for move items
1 parent e555d8b commit 9bcb2c2

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

lib/arrayChanges.js

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,13 @@ module.exports = function arrayChanges(actual, expected, equal, similar, options
5959
return i;
6060
}
6161

62+
63+
function findMoveTargetWithId(id) {
64+
return mutatedArray.find(function (diffItem) {
65+
return diffItem.type === 'moveTarget' && diffItem.id === id;
66+
});
67+
}
68+
6269
var removes = itemsDiff.filter(function (diffItem) {
6370
return diffItem.type === 'remove';
6471
});
@@ -76,15 +83,13 @@ module.exports = function arrayChanges(actual, expected, equal, similar, options
7683
return diffItem.type === 'move';
7784
});
7885

79-
86+
var ids = 0;
8087
moves.forEach(function (diffItem) {
8188
var moveFromIndex = offsetIndex(diffItem.from + 1) - 1;
8289
var removed = mutatedArray.slice(moveFromIndex, diffItem.howMany + moveFromIndex);
8390
removed.forEach(function (v, index) {
8491
v.type = 'moveSource';
85-
v.expectedIndex = offsetIndex(diffItem.to + index);
86-
v.expected = expected[v.expectedIndex];
87-
v.equal = equal(v.value, v.expected);
92+
v.id = ids++;
8893
});
8994
var added = removed.map(function (v, index) {
9095
return extend({}, v, { last: false, type: 'moveTarget' });
@@ -93,7 +98,6 @@ module.exports = function arrayChanges(actual, expected, equal, similar, options
9398
Array.prototype.splice.apply(mutatedArray, [insertIndex, 0].concat(added));
9499
});
95100

96-
97101
var inserts = itemsDiff.filter(function (diffItem) {
98102
return diffItem.type === 'insert';
99103
});
@@ -114,14 +118,27 @@ module.exports = function arrayChanges(actual, expected, equal, similar, options
114118
var offset = 0;
115119
mutatedArray.forEach(function (diffItem, index) {
116120
var type = diffItem.type;
117-
if (type === 'remove' || type === 'moveSource') {
121+
if (type === 'moveTarget') {
122+
diffItem.expected = expected[offset + index];
123+
diffItem.expectedIndex = offset + index;
124+
diffItem.equal = equal(diffItem.value, diffItem.expected);
125+
} else if (type === 'remove' || type === 'moveSource') {
118126
offset -= 1;
119127
} else if (type === 'similar') {
120128
diffItem.expected = expected[offset + index];
121129
diffItem.expectedIndex = offset + index;
122130
}
123131
});
124132

133+
mutatedArray.forEach(function (diffItem) {
134+
if (diffItem.type === 'moveSource') {
135+
var moveTarget = findMoveTargetWithId(diffItem.id);
136+
diffItem.expected = moveTarget.expected;
137+
diffItem.expectedIndex = moveTarget.expectedIndex;
138+
diffItem.equal = moveTarget.equal;
139+
}
140+
});
141+
125142
var conflicts = mutatedArray.reduce(function (conflicts, item) {
126143
return item.type === 'similar' || item.type === 'moveSource' || item.type === 'moveTarget' ? conflicts : conflicts + 1;
127144
}, 0);

0 commit comments

Comments
 (0)