@@ -491,4 +491,23 @@ describe('array-changes', function () {
491491 { type : 'moveSource' , value : 'c' , actualIndex : 2 , expected : 'c' , expectedIndex : 0 , id : 1 , equal : true , last : true }
492492 ] ) ;
493493 } ) ;
494+
495+ it ( "handles moves with a mix of equal and similar items" , function ( ) {
496+ var a = [ 'aaa' , 'bbb' , 'ccc' , 'dddd' ] ;
497+ var b = [ 'ddd' , 'ccc' , 'bbb' , 'aaa' ] ;
498+
499+ expect ( arrayChanges ( a , b , function ( a , b ) {
500+ return expect . equal ( a , b ) ;
501+ } , function ( a , b ) {
502+ return expect . equal ( a . slice ( 0 , 3 ) , b . slice ( 0 , 3 ) ) ;
503+ } ) , 'to equal' , [
504+ { type : 'moveTarget' , value : 'dddd' , actualIndex : 3 , id : 2 , last : false , expected : 'ddd' , expectedIndex : 0 , equal : false } ,
505+ { type : 'moveTarget' , value : 'ccc' , actualIndex : 2 , id : 1 , last : false , expected : 'ccc' , expectedIndex : 1 , equal : true } ,
506+ { type : 'moveTarget' , value : 'bbb' , actualIndex : 1 , id : 0 , last : false , expected : 'bbb' , expectedIndex : 2 , equal : true } ,
507+ { type : 'equal' , value : 'aaa' , actualIndex : 0 , expected : 'aaa' , expectedIndex : 3 } ,
508+ { type : 'moveSource' , value : 'bbb' , actualIndex : 1 , id : 0 , expected : 'bbb' , expectedIndex : 2 , equal : true } ,
509+ { type : 'moveSource' , value : 'ccc' , actualIndex : 2 , id : 1 , expected : 'ccc' , expectedIndex : 1 , equal : true } ,
510+ { type : 'moveSource' , value : 'dddd' , actualIndex : 3 , id : 2 , expected : 'ddd' , expectedIndex : 0 , equal : false , last : true }
511+ ] ) ;
512+ } ) ;
494513} ) ;
0 commit comments