1
- using System ;
2
- using System . Linq ;
1
+ using System . Linq ;
3
2
using LibGit2Sharp . Tests . TestHelpers ;
4
3
using Xunit ;
4
+ using Xunit . Extensions ;
5
5
6
6
namespace LibGit2Sharp . Tests
7
7
{
@@ -81,9 +81,11 @@ public void CanRetrieveTheBranchBeingMerged()
81
81
Assert . Null ( mergedHeads [ 1 ] . Tip ) ;
82
82
}
83
83
}
84
-
85
- [ Fact ]
86
- public void CanMergeRepoNonFastForward ( )
84
+
85
+ [ Theory ]
86
+ [ InlineData ( true ) ]
87
+ [ InlineData ( false ) ]
88
+ public void CanMergeRepoNonFastForward ( bool shouldMergeOccurInDetachedHeadState )
87
89
{
88
90
const string firstBranchFileName = "first branch file.txt" ;
89
91
const string secondBranchFileName = "second branch file.txt" ;
@@ -104,7 +106,15 @@ public void CanMergeRepoNonFastForward()
104
106
// Commit with ONE new file to first branch (FirstBranch moves forward as it is checked out, SecondBranch stays back one).
105
107
AddFileCommitToRepo ( repo , firstBranchFileName ) ;
106
108
107
- secondBranch . Checkout ( ) ;
109
+ if ( shouldMergeOccurInDetachedHeadState )
110
+ {
111
+ // Detaches HEAD
112
+ repo . Checkout ( secondBranch . Tip ) ;
113
+ }
114
+ else
115
+ {
116
+ secondBranch . Checkout ( ) ;
117
+ }
108
118
109
119
// Commit with ONE new file to second branch (FirstBranch and SecondBranch now point to separate commits that both have the same parent commit).
110
120
AddFileCommitToRepo ( repo , secondBranchFileName ) ;
@@ -116,6 +126,13 @@ public void CanMergeRepoNonFastForward()
116
126
Assert . Equal ( repo . Head . Tip , mergeResult . Commit ) ;
117
127
Assert . Equal ( originalTreeCount + 3 , mergeResult . Commit . Tree . Count ) ; // Expecting original tree count plussed by the 3 added files.
118
128
Assert . Equal ( 2 , mergeResult . Commit . Parents . Count ( ) ) ; // Merge commit should have 2 parents
129
+ Assert . Equal ( shouldMergeOccurInDetachedHeadState , repo . Info . IsHeadDetached ) ;
130
+
131
+ if ( ! shouldMergeOccurInDetachedHeadState )
132
+ {
133
+ // Ensure HEAD is still attached and points to SecondBranch
134
+ Assert . Equal ( repo . Refs . Head . TargetIdentifier , secondBranch . CanonicalName ) ;
135
+ }
119
136
}
120
137
}
121
138
@@ -143,8 +160,10 @@ public void IsUpToDateMerge()
143
160
}
144
161
}
145
162
146
- [ Fact ]
147
- public void CanFastForwardRepos ( )
163
+ [ Theory ]
164
+ [ InlineData ( true ) ]
165
+ [ InlineData ( false ) ]
166
+ public void CanFastForwardRepos ( bool shouldMergeOccurInDetachedHeadState )
148
167
{
149
168
const string firstBranchFileName = "first branch file.txt" ;
150
169
const string sharedBranchFileName = "first+second branch file.txt" ;
@@ -169,14 +188,33 @@ public void CanFastForwardRepos()
169
188
// Commit with ONE new file to first branch (FirstBranch moves forward as it is checked out, SecondBranch stays back one).
170
189
AddFileCommitToRepo ( repo , firstBranchFileName ) ;
171
190
172
- secondBranch . Checkout ( ) ;
191
+ if ( shouldMergeOccurInDetachedHeadState )
192
+ {
193
+ // Detaches HEAD
194
+ repo . Checkout ( secondBranch . Tip ) ;
195
+ }
196
+ else
197
+ {
198
+ secondBranch . Checkout ( ) ;
199
+ }
200
+
201
+ Assert . Equal ( shouldMergeOccurInDetachedHeadState , repo . Info . IsHeadDetached ) ;
173
202
174
203
MergeResult mergeResult = repo . Merge ( repo . Branches [ "FirstBranch" ] . Tip , Constants . Signature ) ;
175
204
176
205
Assert . Equal ( MergeStatus . FastForward , mergeResult . Status ) ;
177
206
Assert . Equal ( repo . Branches [ "FirstBranch" ] . Tip , mergeResult . Commit ) ;
178
207
Assert . Equal ( repo . Branches [ "FirstBranch" ] . Tip , repo . Head . Tip ) ;
208
+ Assert . Equal ( repo . Head . Tip , mergeResult . Commit ) ;
209
+
179
210
Assert . Equal ( 0 , repo . Index . RetrieveStatus ( ) . Count ( ) ) ;
211
+ Assert . Equal ( shouldMergeOccurInDetachedHeadState , repo . Info . IsHeadDetached ) ;
212
+
213
+ if ( ! shouldMergeOccurInDetachedHeadState )
214
+ {
215
+ // Ensure HEAD is still attached and points to SecondBranch
216
+ Assert . Equal ( repo . Refs . Head . TargetIdentifier , secondBranch . CanonicalName ) ;
217
+ }
180
218
}
181
219
}
182
220
0 commit comments