Skip to content

Commit

Permalink
Enforce Index.Move() test coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
nulltoken committed Nov 28, 2011
1 parent 524f56f commit 2a4ac3c
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 1 deletion.
57 changes: 57 additions & 0 deletions LibGit2Sharp.Tests/IndexFixture.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
Expand Down Expand Up @@ -399,6 +400,62 @@ public void CanRenameAFile()
}
}

[TestCase("README", FileStatus.Unaltered, "deleted_unstaged_file.txt", FileStatus.Missing, FileStatus.Removed, FileStatus.Staged)]
[TestCase("new_tracked_file.txt", FileStatus.Added, "deleted_unstaged_file.txt", FileStatus.Missing, FileStatus.Nonexistent, FileStatus.Staged)]
[TestCase("modified_staged_file.txt", FileStatus.Staged, "deleted_unstaged_file.txt", FileStatus.Missing, FileStatus.Removed, FileStatus.Staged)]
[TestCase("modified_unstaged_file.txt", FileStatus.Modified, "deleted_unstaged_file.txt", FileStatus.Missing, FileStatus.Removed, FileStatus.Staged)]
public void CanMoveAnExistingFileOverANonExistingFile(string sourcePath, FileStatus sourceStatus, string destPath, FileStatus destStatus, FileStatus sourcePostStatus, FileStatus destPostStatus)
{
TemporaryCloneOfTestRepo path = BuildTemporaryCloneOfTestRepo(StandardTestRepoWorkingDirPath);
using (var repo = new Repository(path.RepositoryPath))
{
repo.Index.RetrieveStatus(sourcePath).ShouldEqual(sourceStatus);
repo.Index.RetrieveStatus(destPath).ShouldEqual(destStatus);

repo.Index.Move(sourcePath, destPath);

repo.Index.RetrieveStatus(sourcePath).ShouldEqual(sourcePostStatus);
repo.Index.RetrieveStatus(destPath).ShouldEqual(destPostStatus);
}
}

[TestCase("README", FileStatus.Unaltered, new[] { "README", "new_tracked_file.txt", "modified_staged_file.txt", "modified_unstaged_file.txt", "new_untracked_file.txt" })]
[TestCase("new_tracked_file.txt", FileStatus.Added, new[] { "README", "new_tracked_file.txt", "modified_staged_file.txt", "modified_unstaged_file.txt", "new_untracked_file.txt" })]
[TestCase("modified_staged_file.txt", FileStatus.Staged, new[] { "README", "new_tracked_file.txt", "modified_staged_file.txt", "modified_unstaged_file.txt", "new_untracked_file.txt" })]
[TestCase("modified_unstaged_file.txt", FileStatus.Modified, new[] { "README", "new_tracked_file.txt", "modified_staged_file.txt", "modified_unstaged_file.txt", "new_untracked_file.txt" })]
public void MovingOverAnExistingFileThrows(string sourcePath, FileStatus sourceStatus, IEnumerable<string> destPaths)
{
InvalidMoveUseCases(sourcePath, sourceStatus, destPaths);
}

[TestCase("new_untracked_file.txt", FileStatus.Untracked, new[] { "README", "new_tracked_file.txt", "modified_staged_file.txt", "modified_unstaged_file.txt", "new_untracked_file.txt", "deleted_unstaged_file.txt", "deleted_staged_file.txt", "i_dont_exist.txt" })]
public void MovingAFileWichIsNotUnderSourceControlThrows(string sourcePath, FileStatus sourceStatus, IEnumerable<string> destPaths)
{
InvalidMoveUseCases(sourcePath, sourceStatus, destPaths);
}

[TestCase("deleted_unstaged_file.txt", FileStatus.Missing, new[] { "README", "new_tracked_file.txt", "modified_staged_file.txt", "modified_unstaged_file.txt", "new_untracked_file.txt", "deleted_unstaged_file.txt", "deleted_staged_file.txt", "i_dont_exist.txt" })]
[TestCase("deleted_staged_file.txt", FileStatus.Removed, new[] { "README", "new_tracked_file.txt", "modified_staged_file.txt", "modified_unstaged_file.txt", "new_untracked_file.txt", "deleted_unstaged_file.txt", "deleted_staged_file.txt", "i_dont_exist.txt" })]
[TestCase("i_dont_exist.txt", FileStatus.Nonexistent, new[] { "README", "new_tracked_file.txt", "modified_staged_file.txt", "modified_unstaged_file.txt", "new_untracked_file.txt", "deleted_unstaged_file.txt", "deleted_staged_file.txt", "i_dont_exist.txt" })]
public void MovingAFileNotInTheWorkingDirectoryThrows(string sourcePath, FileStatus sourceStatus, IEnumerable<string> destPaths)
{
InvalidMoveUseCases(sourcePath, sourceStatus, destPaths);
}

private static void InvalidMoveUseCases(string sourcePath, FileStatus sourceStatus, IEnumerable<string> destPaths)
{
using (var repo = new Repository(StandardTestRepoPath))
{
repo.Index.RetrieveStatus(sourcePath).ShouldEqual(sourceStatus);

foreach (var destPath in destPaths)
{
string path = destPath;
Assert.Throws<LibGit2Exception>(() => repo.Index.Move(sourcePath, path));
}
}
}

[Test]
public void CanRemoveAFile()
{
Expand Down
2 changes: 1 addition & 1 deletion LibGit2Sharp/Index.cs
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ public void Move(IEnumerable<string> sourcePaths, IEnumerable<string> destinatio
}

FileStatus desStatus = keyValuePair.Value.Item2;
if (desStatus.Has(FileStatus.Nonexistent))
if (desStatus.HasAny(new[] { FileStatus.Nonexistent, FileStatus.Missing }))
{
continue;
}
Expand Down

0 comments on commit 2a4ac3c

Please sign in to comment.