libgit2sharp/LibGit2Sharp.Tests/TreeFixture.cs

205 строки
6.5 KiB
C#

using System.Collections.Generic;
using System.IO;
using System.Linq;
using LibGit2Sharp.Tests.TestHelpers;
using Xunit;
namespace LibGit2Sharp.Tests
{
public class TreeFixture : BaseFixture
{
private const string sha = "581f9824ecaf824221bd36edf5430f2739a7c4f5";
[Fact]
public void CanCompareTwoTreeEntries()
{
using (var repo = new Repository(BareTestRepoPath))
{
var tree = repo.Lookup<Tree>(sha);
TreeEntry treeEntry1 = tree["README"];
TreeEntry treeEntry2 = tree["README"];
Assert.Equal(treeEntry2, treeEntry1);
Assert.True((treeEntry1 == treeEntry2));
}
}
[Fact]
public void CanConvertEntryToBlob()
{
using (var repo = new Repository(BareTestRepoPath))
{
var tree = repo.Lookup<Tree>(sha);
TreeEntry treeEntry = tree["README"];
var blob = treeEntry.Target as Blob;
Assert.NotNull(blob);
}
}
[Fact]
public void CanConvertEntryToTree()
{
using (var repo = new Repository(BareTestRepoPath))
{
var tree = repo.Lookup<Tree>(sha);
TreeEntry treeEntry = tree["1"];
var subtree = treeEntry.Target as Tree;
Assert.NotNull(subtree);
}
}
[Fact]
public void CanEnumerateBlobs()
{
using (var repo = new Repository(BareTestRepoPath))
{
var tree = repo.Lookup<Tree>(sha);
IEnumerable<Blob> blobs = tree
.Where(e => e.TargetType == TreeEntryTargetType.Blob)
.Select(e => e.Target)
.Cast<Blob>();
Assert.Equal(3, blobs.Count());
}
}
[Fact]
public void CanEnumerateSubTrees()
{
using (var repo = new Repository(BareTestRepoPath))
{
var tree = repo.Lookup<Tree>(sha);
IEnumerable<Tree> subTrees = tree
.Where(e => e.TargetType == TreeEntryTargetType.Tree)
.Select(e => e.Target)
.Cast<Tree>();
Assert.Equal(1, subTrees.Count());
}
}
[Fact]
public void CanEnumerateTreeEntries()
{
using (var repo = new Repository(BareTestRepoPath))
{
var tree = repo.Lookup<Tree>(sha);
Assert.Equal(tree.Count, tree.Count());
Assert.Equal(new[] { "1", "README", "branch_file.txt", "new.txt" }, tree.Select(te => te.Name).ToArray());
}
}
[Fact]
public void CanGetEntryByName()
{
using (var repo = new Repository(BareTestRepoPath))
{
var tree = repo.Lookup<Tree>(sha);
TreeEntry treeEntry = tree["README"];
Assert.Equal("a8233120f6ad708f843d861ce2b7228ec4e3dec6", treeEntry.Target.Sha);
Assert.Equal("README", treeEntry.Name);
}
}
[Fact]
public void GettingAnUknownTreeEntryReturnsNull()
{
using (var repo = new Repository(BareTestRepoPath))
{
var tree = repo.Lookup<Tree>(sha);
TreeEntry treeEntry = tree["I-do-not-exist"];
Assert.Null(treeEntry);
}
}
[Fact]
public void CanGetEntryCountFromTree()
{
using (var repo = new Repository(BareTestRepoPath))
{
var tree = repo.Lookup<Tree>(sha);
Assert.Equal(4, tree.Count);
}
}
[Fact]
public void CanReadEntryAttributes()
{
using (var repo = new Repository(BareTestRepoPath))
{
var tree = repo.Lookup<Tree>(sha);
Assert.Equal(Mode.NonExecutableFile, tree["README"].Mode);
}
}
[Fact]
public void CanReadTheTreeData()
{
using (var repo = new Repository(BareTestRepoPath))
{
var tree = repo.Lookup<Tree>(sha);
Assert.NotNull(tree);
}
}
[Fact]
public void TreeDataIsPresent()
{
using (var repo = new Repository(BareTestRepoPath))
{
GitObject tree = repo.Lookup(sha);
Assert.NotNull(tree);
}
}
[Fact]
public void CanRetrieveTreeEntryPath()
{
using (var repo = new Repository(BareTestRepoPath))
{
/* From a commit tree */
var commitTree = repo.Lookup<Commit>("4c062a6").Tree;
TreeEntry treeTreeEntry = commitTree["1"];
Assert.Equal("1", treeTreeEntry.Path);
string completePath = Path.Combine("1", "branch_file.txt");
TreeEntry blobTreeEntry = commitTree["1/branch_file.txt"];
Assert.Equal(completePath, blobTreeEntry.Path);
// A tree entry is now fetched through a relative path to the
// tree but exposes a complete path through its Path property
var subTree = treeTreeEntry.Target as Tree;
Assert.NotNull(subTree);
TreeEntry anInstance = subTree["branch_file.txt"];
Assert.NotEqual("branch_file.txt", anInstance.Path);
Assert.Equal(completePath, anInstance.Path);
Assert.Equal(completePath, subTree.First().Path);
/* From a random tree */
var tree = repo.Lookup<Tree>(treeTreeEntry.Target.Id);
TreeEntry anotherInstance = tree["branch_file.txt"];
Assert.Equal("branch_file.txt", anotherInstance.Path);
// From a rev-parse statement
var revparseTree = repo.Lookup<Tree>("master:1");
TreeEntry yetAnotherInstance = revparseTree["branch_file.txt"];
Assert.Equal(completePath, yetAnotherInstance.Path);
Assert.Equal(tree, subTree);
Assert.Equal(revparseTree, tree);
Assert.Equal(anotherInstance, anInstance);
Assert.Equal(yetAnotherInstance, anotherInstance);
Assert.NotEqual(anotherInstance.Path, anInstance.Path);
Assert.NotSame(anotherInstance, anInstance);
}
}
}
}