87 lines
2.5 KiB
C#
87 lines
2.5 KiB
C#
using Explorer.Application;
|
|
using Explorer.Domain;
|
|
|
|
namespace Explorer.Application.Tests;
|
|
|
|
public class GitDiffPlannerTests
|
|
{
|
|
[Fact]
|
|
public void Staged_diff_does_not_read_the_working_tree()
|
|
{
|
|
var request = GitDiffPlanner.Create(new GitChange
|
|
{
|
|
Path = "src/App.cs",
|
|
State = GitChangeState.Staged,
|
|
Index = 'M',
|
|
WorkTree = '.'
|
|
});
|
|
Assert.Null(request.Error);
|
|
Assert.False(request.NeedsWorkingTree);
|
|
Assert.Contains("--cached", request.Arguments);
|
|
Assert.Contains("src/App.cs", request.Arguments);
|
|
}
|
|
|
|
[Fact]
|
|
public void Untracked_diff_uses_no_index_against_dev_null()
|
|
{
|
|
var request = GitDiffPlanner.Create(new GitChange
|
|
{
|
|
Path = "new.txt",
|
|
State = GitChangeState.Untracked,
|
|
Index = '?',
|
|
WorkTree = '?'
|
|
});
|
|
Assert.True(request.NeedsWorkingTree);
|
|
Assert.Contains("--no-index", request.Arguments);
|
|
Assert.Contains("/dev/null", request.Arguments);
|
|
Assert.Contains("new.txt", request.Arguments);
|
|
}
|
|
|
|
[Fact]
|
|
public void Deleted_unstaged_diff_does_not_need_the_working_tree()
|
|
{
|
|
var request = GitDiffPlanner.Create(new GitChange
|
|
{
|
|
Path = "gone.cs",
|
|
State = GitChangeState.Unstaged,
|
|
Index = '.',
|
|
WorkTree = 'D'
|
|
});
|
|
Assert.False(request.NeedsWorkingTree);
|
|
Assert.DoesNotContain("--cached", request.Arguments);
|
|
}
|
|
}
|
|
|
|
public class GitDiffParserTests
|
|
{
|
|
[Fact]
|
|
public void Classifies_unified_diff_lines()
|
|
{
|
|
var diff = GitDiffParser.Parse("""
|
|
diff --git a/src/App.cs b/src/App.cs
|
|
index 111..222 100644
|
|
--- a/src/App.cs
|
|
+++ b/src/App.cs
|
|
@@ -1,3 +1,4 @@
|
|
keep
|
|
-old
|
|
+new
|
|
still
|
|
""", "src/App.cs");
|
|
Assert.Equal("src/App.cs", diff.Title);
|
|
Assert.False(diff.IsBinary);
|
|
Assert.Equal(GitDiffLineKind.Meta, diff.Lines[0].Kind);
|
|
Assert.Equal(GitDiffLineKind.Hunk, diff.Lines[4].Kind);
|
|
Assert.Equal(GitDiffLineKind.Context, diff.Lines[5].Kind);
|
|
Assert.Equal(GitDiffLineKind.Removed, diff.Lines[6].Kind);
|
|
Assert.Equal(GitDiffLineKind.Added, diff.Lines[7].Kind);
|
|
}
|
|
|
|
[Fact]
|
|
public void Marks_binary_and_empty()
|
|
{
|
|
Assert.True(GitDiffParser.Parse("Binary files a/x and b/x differ\n", "x").IsBinary);
|
|
Assert.True(GitDiffParser.Parse("", "x").IsEmpty);
|
|
}
|
|
}
|