@@ -39,7 +39,7 @@ public void RetrievingANonExistentFileChangeReturnsNull()
39
39
40
40
var changes = repo . Diff . Compare < TreeChanges > ( tree , tree ) ;
41
41
42
- Assert . Null ( changes [ "batman" ] ) ;
42
+ Assert . Equal ( 0 , changes . Count ( c => c . Path == "batman" ) ) ;
43
43
}
44
44
}
45
45
@@ -62,7 +62,7 @@ public void CanCompareACommitTreeAgainstItsParent()
62
62
Assert . Equal ( 1 , changes . Count ( ) ) ;
63
63
Assert . Equal ( 1 , changes . Added . Count ( ) ) ;
64
64
65
- TreeEntryChanges treeEntryChanges = changes [ "1.txt" ] ;
65
+ TreeEntryChanges treeEntryChanges = changes . Single ( c => c . Path == "1.txt" ) ;
66
66
67
67
var patch = repo . Diff . Compare < Patch > ( parentCommitTree , commitTree ) ;
68
68
Assert . False ( patch [ "1.txt" ] . IsBinaryComparison ) ;
@@ -272,8 +272,7 @@ public void DetectsTheRenamingOfAModifiedFileByDefault()
272
272
var changes = repo . Diff . Compare < TreeChanges > ( rootCommitTree , commitTreeWithRenamedFile ) ;
273
273
274
274
Assert . Equal ( 1 , changes . Count ( ) ) ;
275
- Assert . Equal ( "super-file.txt" , changes [ "super-file.txt" ] . Path ) ;
276
- Assert . Equal ( "my-name-does-not-feel-right.txt" , changes [ "super-file.txt" ] . OldPath ) ;
275
+ Assert . Equal ( "my-name-does-not-feel-right.txt" , changes . Single ( c => c . Path == "super-file.txt" ) . OldPath ) ;
277
276
Assert . Equal ( 1 , changes . Renamed . Count ( ) ) ;
278
277
}
279
278
}
@@ -888,7 +887,7 @@ public void CanCompareTwoVersionsOfAFileWithADiffOfTwoHunks(int contextLines, in
888
887
Assert . Equal ( 1 , changes . Deleted . Count ( ) ) ;
889
888
Assert . Equal ( 1 , changes . Added . Count ( ) ) ;
890
889
891
- Assert . Equal ( Mode . Nonexistent , changes [ "my-name-does-not-feel-right.txt" ] . Mode ) ;
890
+ Assert . Equal ( Mode . Nonexistent , changes . Single ( c => c . Path == "my-name-does-not-feel-right.txt" ) . Mode ) ;
892
891
893
892
var patch = repo . Diff . Compare < Patch > ( rootCommitTree , mergedCommitTree , compareOptions : compareOptions ) ;
894
893
@@ -904,14 +903,13 @@ public void CanCompareTwoVersionsOfAFileWithADiffOfTwoHunks(int contextLines, in
904
903
}
905
904
}
906
905
907
- [ Fact ]
908
- public void CanHandleTwoTreeEntryChangesWithTheSamePath ( )
906
+ private void CanHandleTwoTreeEntryChangesWithTheSamePath ( SimilarityOptions similarity , Action < string , TreeChanges > verifier )
909
907
{
910
908
string repoPath = InitNewRepository ( ) ;
911
909
912
910
using ( var repo = new Repository ( repoPath ) )
913
911
{
914
- Blob mainContent = OdbHelper . CreateBlob ( repo , "awesome content\n " ) ;
912
+ Blob mainContent = OdbHelper . CreateBlob ( repo , "awesome content\n " + new string ( 'b' , 4096 ) ) ;
915
913
Blob linkContent = OdbHelper . CreateBlob ( repo , "../../objc/Nu.h" ) ;
916
914
917
915
string path = string . Format ( "include{0}Nu{0}Nu.h" , Path . DirectorySeparatorChar ) ;
@@ -930,45 +928,84 @@ public void CanHandleTwoTreeEntryChangesWithTheSamePath()
930
928
var changes = repo . Diff . Compare < TreeChanges > ( treeOld , treeNew ,
931
929
compareOptions : new CompareOptions
932
930
{
933
- Similarity = SimilarityOptions . None ,
931
+ Similarity = similarity ,
934
932
} ) ;
935
933
936
- /*
937
- * $ git diff-tree -p 5c87b67 d5278d0
938
- * diff --git a/include/Nu/Nu.h b/include/Nu/Nu.h
939
- * deleted file mode 120000
940
- * index 19bf568..0000000
941
- * --- a/include/Nu/Nu.h
942
- * +++ /dev/null
943
- * @@ -1 +0,0 @@
944
- * -../../objc/Nu.h
945
- * \ No newline at end of file
946
- * diff --git a/include/Nu/Nu.h b/include/Nu/Nu.h
947
- * new file mode 100644
948
- * index 0000000..f9e6561
949
- * --- /dev/null
950
- * +++ b/include/Nu/Nu.h
951
- * @@ -0,0 +1 @@
952
- * +awesome content
953
- * diff --git a/objc/Nu.h b/objc/Nu.h
954
- * deleted file mode 100644
955
- * index f9e6561..0000000
956
- * --- a/objc/Nu.h
957
- * +++ /dev/null
958
- * @@ -1 +0,0 @@
959
- * -awesome content
960
- */
934
+ verifier ( path , changes ) ;
935
+ }
936
+ }
961
937
962
- Assert . Equal ( 1 , changes . Deleted . Count ( ) ) ;
963
- Assert . Equal ( 0 , changes . Modified . Count ( ) ) ;
964
- Assert . Equal ( 1 , changes . TypeChanged . Count ( ) ) ;
938
+ [ Fact ]
939
+ public void CanHandleTwoTreeEntryChangesWithTheSamePathUsingSimilarityNone ( )
940
+ {
941
+ /*
942
+ * $ git diff-tree -p 5c87b67 d5278d0
943
+ * diff --git a/include/Nu/Nu.h b/include/Nu/Nu.h
944
+ * deleted file mode 120000
945
+ * index 19bf568..0000000
946
+ * --- a/include/Nu/Nu.h
947
+ * +++ /dev/null
948
+ * @@ -1 +0,0 @@
949
+ * -../../objc/Nu.h
950
+ * \ No newline at end of file
951
+ * diff --git a/include/Nu/Nu.h b/include/Nu/Nu.h
952
+ * new file mode 100644
953
+ * index 0000000..f9e6561
954
+ * --- /dev/null
955
+ * +++ b/include/Nu/Nu.h
956
+ * @@ -0,0 +1 @@
957
+ * +awesome content
958
+ * diff --git a/objc/Nu.h b/objc/Nu.h
959
+ * deleted file mode 100644
960
+ * index f9e6561..0000000
961
+ * --- a/objc/Nu.h
962
+ * +++ /dev/null
963
+ * @@ -1 +0,0 @@
964
+ * -awesome content
965
+ */
966
+
967
+ CanHandleTwoTreeEntryChangesWithTheSamePath ( SimilarityOptions . None ,
968
+ ( path , changes ) =>
969
+ {
970
+ Assert . Equal ( 2 , changes . Count ( ) ) ;
971
+ Assert . Equal ( 1 , changes . Deleted . Count ( ) ) ;
972
+ Assert . Equal ( 1 , changes . TypeChanged . Count ( ) ) ;
973
+
974
+ TreeEntryChanges change = changes . Single ( c => c . Path == path ) ;
975
+ Assert . Equal ( Mode . SymbolicLink , change . OldMode ) ;
976
+ Assert . Equal ( Mode . NonExecutableFile , change . Mode ) ;
977
+ Assert . Equal ( ChangeKind . TypeChanged , change . Status ) ;
978
+ Assert . Equal ( path , change . Path ) ;
979
+ } ) ;
980
+ }
965
981
966
- TreeEntryChanges change = changes [ path ] ;
967
- Assert . Equal ( Mode . SymbolicLink , change . OldMode ) ;
968
- Assert . Equal ( Mode . NonExecutableFile , change . Mode ) ;
969
- Assert . Equal ( ChangeKind . TypeChanged , change . Status ) ;
970
- Assert . Equal ( path , change . Path ) ;
971
- }
982
+ [ Fact ]
983
+ public void CanHandleTwoTreeEntryChangesWithTheSamePathUsingSimilarityDefault ( )
984
+ {
985
+ /*
986
+ * $ git diff-tree -p 5c87b67 d5278d0
987
+ * To be done...
988
+ */
989
+
990
+ CanHandleTwoTreeEntryChangesWithTheSamePath ( SimilarityOptions . Default ,
991
+ ( path , changes ) =>
992
+ {
993
+ Assert . Equal ( 2 , changes . Count ( ) ) ;
994
+ Assert . Equal ( 1 , changes . Deleted . Count ( ) ) ;
995
+ Assert . Equal ( 1 , changes . Renamed . Count ( ) ) ;
996
+
997
+ TreeEntryChanges renamed = changes . Renamed . Single ( ) ;
998
+ Assert . Equal ( Mode . NonExecutableFile , renamed . OldMode ) ;
999
+ Assert . Equal ( Mode . NonExecutableFile , renamed . Mode ) ;
1000
+ Assert . Equal ( ChangeKind . Renamed , renamed . Status ) ;
1001
+ Assert . Equal ( path , renamed . Path ) ;
1002
+
1003
+ TreeEntryChanges deleted = changes . Deleted . Single ( ) ;
1004
+ Assert . Equal ( Mode . SymbolicLink , deleted . OldMode ) ;
1005
+ Assert . Equal ( Mode . Nonexistent , deleted . Mode ) ;
1006
+ Assert . Equal ( ChangeKind . Deleted , deleted . Status ) ;
1007
+ Assert . Equal ( path , deleted . Path ) ;
1008
+ } ) ;
972
1009
}
973
1010
974
1011
[ Fact ]
@@ -1104,8 +1141,8 @@ public void RetrievingDiffChangesMustAlwaysBeCaseSensitive()
1104
1141
{
1105
1142
var changes = repo . Diff . Compare < TreeChanges > ( repo . Lookup < Tree > ( treeOldOid ) , repo . Lookup < Tree > ( treeNewOid ) ) ;
1106
1143
1107
- Assert . Equal ( ChangeKind . Modified , changes [ "a.txt" ] . Status ) ;
1108
- Assert . Equal ( ChangeKind . Modified , changes [ "A.TXT" ] . Status ) ;
1144
+ Assert . Equal ( ChangeKind . Modified , changes . Single ( c => c . Path == "a.txt" ) . Status ) ;
1145
+ Assert . Equal ( ChangeKind . Modified , changes . Single ( c => c . Path == "A.TXT" ) . Status ) ;
1109
1146
}
1110
1147
}
1111
1148
0 commit comments