8000 Enhance merge test coverage to better test possible outcomes. · GiTechLab/libgit2sharp@97adc9d · GitHub
[go: up one dir, main page]

Skip to content

Commit 97adc9d

Browse files
committed
Enhance merge test coverage to better test possible outcomes.
1 parent bc101b2 commit 97adc9d

File tree

1 file changed

+47
-9
lines changed

1 file changed

+47
-9
lines changed

LibGit2Sharp.Tests/MergeFixture.cs

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
using System;
2-
using System.Linq;
1+
using System.Linq;
32
using LibGit2Sharp.Tests.TestHelpers;
43
using Xunit;
4+
using Xunit.Extensions;
55

66
namespace LibGit2Sharp.Tests
77
{
@@ -81,9 +81,11 @@ public void CanRetrieveTheBranchBeingMerged()
8181
Assert.Null(mergedHeads[1].Tip);
8282
}
8383
}
84-
85-
[Fact]
86-
public void CanMergeRepoNonFastForward()
84+
85+
[Theory]
86+
[InlineData(true)]
87+
[InlineData(false)]
88+
public void CanMergeRepoNonFastForward(bool shouldMergeOccurInDetachedHeadState)
8789
{
8890
const string firstBranchFileName = "first branch file.txt";
8991
const string secondBranchFileName = "second branch file.txt";
@@ -104,7 +106,15 @@ public void CanMergeRepoNonFastForward()
104106
// Commit with ONE new file to first branch (FirstBranch moves forward as it is checked out, SecondBranch stays back one).
105107
AddFileCommitToRepo(repo, firstBranchFileName);
106108

107-
secondBranch.Checkout();
109+
if (shouldMergeOccurInDetachedHeadState)
110+
{
111+
// Detaches HEAD
112+
repo.Checkout(secondBranch.Tip);
113+
}
114+
else
115+
{
116+
secondBranch.Checkout();
117+
}
108118

109119
// Commit with ONE new file to second branch (FirstBranch and SecondBranch now point to separate commits that both have the same parent commit).
110120
AddFileCommitToRepo(repo, secondBranchFileName);
@@ -116,6 +126,13 @@ public void CanMergeRepoNonFastForward()
116126
Assert.Equal(repo.Head.Tip, mergeResult.Commit);
117127
Assert.Equal(originalTreeCount + 3, mergeResult.Commit.Tree.Count); // Expecting original tree count plussed by the 3 added files.
118128
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+
}
119136
}
120137
}
121138

@@ -143,8 +160,10 @@ public void IsUpToDateMerge()
143160
}
144161
}
145162

146-
[Fact]
147-
public void CanFastForwardRepos()
163+
[Theory]
164+
[InlineData(true)]
165+
[InlineData(false)]
166+
public void CanFastForwardRepos(bool shouldMergeOccurInDetachedHeadState)
148167
{
149168
const string firstBranchFileName = "first branch file.txt";
150169
const string sharedBranchFileName = "first+second branch file.txt";
@@ -169,14 +188,33 @@ public void CanFastForwardRepos()
169188
// Commit with ONE new file to first branch (FirstBranch moves forward as it is checked out, SecondBranch stays back one).
170189
AddFileCommitToRepo(repo, firstBranchFileName);
171190

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);
173202

174203
MergeResult mergeResult = repo.Merge(repo.Branches["FirstBranch"].Tip, Constants.Signature);
175204

176205
Assert.Equal(MergeStatus.FastForward, mergeResult.Status);
177206
Assert.Equal(repo.Branches["FirstBranch"].Tip, mergeResult.Commit);
178207
Assert.Equal(repo.Branches["FirstBranch"].Tip, repo.Head.Tip);
208+
Assert.Equal(repo.Head.Tip, mergeResult.Commit);
209+
179210
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+
}
180218
}
181219
}
182220

0 commit comments

Comments
 (0)
0