@@ -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