155 lines
7.5 KiB
C#
155 lines
7.5 KiB
C#
using System;
|
|
using Sep.Git.Tfs.Core.TfsInterop;
|
|
using Xunit;
|
|
|
|
namespace Sep.Git.Tfs.Test.Integration
|
|
{
|
|
//NOTE: All timestamps in these tests must specify a time zone. If they don't, the local time zone will be used in the DateTime,
|
|
// but the commit timestamp will use the ToUniversalTime() version of the DateTime.
|
|
// This will cause the hashes to differ on computers in different time zones.
|
|
public class CloneTests : IDisposable
|
|
{
|
|
IntegrationHelper h;
|
|
|
|
public CloneTests()
|
|
{
|
|
h = new IntegrationHelper();
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
h.Dispose();
|
|
}
|
|
|
|
[FactExceptOnUnix(Skip="eventually")]
|
|
public void FailOnNoProject()
|
|
{
|
|
}
|
|
|
|
[FactExceptOnUnix]
|
|
public void ClonesEmptyProject()
|
|
{
|
|
h.SetupFake(r =>
|
|
{
|
|
r.Changeset(1, "Project created from template", DateTime.Parse("2012-01-01 12:12:12 -05:00"))
|
|
.Change(TfsChangeType.Add, TfsItemType.Folder, "$/MyProject");
|
|
});
|
|
h.Run("clone", h.TfsUrl, "$/MyProject");
|
|
h.AssertGitRepo("MyProject");
|
|
const string expectedSha = "4053764b2868a2be71ae7f5f113ad84dff8a052a";
|
|
h.AssertRef("MyProject", "HEAD", expectedSha);
|
|
h.AssertRef("MyProject", "master", expectedSha);
|
|
h.AssertRef("MyProject", "refs/remotes/tfs/default", expectedSha);
|
|
h.AssertEmptyWorkspace("MyProject");
|
|
}
|
|
|
|
[FactExceptOnUnix]
|
|
public void CloneProjectWithChangesets()
|
|
{
|
|
h.SetupFake(r =>
|
|
{
|
|
r.Changeset(1, "Project created from template", DateTime.Parse("2012-01-01 12:12:12 -05:00"))
|
|
.Change(TfsChangeType.Add, TfsItemType.Folder, "$/MyProject");
|
|
r.Changeset(2, "First commit", DateTime.Parse("2012-01-02 12:12:12 -05:00"))
|
|
.Change(TfsChangeType.Add, TfsItemType.Folder, "$/MyProject/Folder")
|
|
.Change(TfsChangeType.Add, TfsItemType.File, "$/MyProject/Folder/File.txt", "File contents")
|
|
.Change(TfsChangeType.Add, TfsItemType.File, "$/MyProject/README", "tldr");
|
|
});
|
|
h.Run("clone", h.TfsUrl, "$/MyProject");
|
|
h.AssertGitRepo("MyProject");
|
|
const string expectedSha = "d64d883266eca65bede947c79529318718a0d8eb";
|
|
h.AssertRef("MyProject", "HEAD", expectedSha);
|
|
h.AssertRef("MyProject", "master", expectedSha);
|
|
h.AssertRef("MyProject", "refs/remotes/tfs/default", expectedSha);
|
|
h.AssertFileInWorkspace("MyProject", "Folder/File.txt", "File contents");
|
|
h.AssertFileInWorkspace("MyProject", "README", "tldr");
|
|
}
|
|
|
|
[FactExceptOnUnix]
|
|
public void CloneProjectWithInternationalCharactersInFileNamesAndFolderNames()
|
|
{
|
|
h.SetupFake(r =>
|
|
{
|
|
r.Changeset(1, "Project created from template", DateTime.Parse("2012-01-01 12:12:12 -05:00"))
|
|
.Change(TfsChangeType.Add, TfsItemType.Folder, "$/MyProject");
|
|
r.Changeset(2, "First commit", DateTime.Parse("2012-01-02 12:12:12 -05:00"))
|
|
.Change(TfsChangeType.Add, TfsItemType.Folder, "$/MyProject/ÆØÅ")
|
|
.Change(TfsChangeType.Add, TfsItemType.File, "$/MyProject/ÆØÅ/äöü.txt", "File contents");
|
|
});
|
|
h.Run("clone", h.TfsUrl, "$/MyProject");
|
|
h.AssertGitRepo("MyProject");
|
|
AssertRefs("4faa9a5f32e6af118b84071a537228d3f7da7d9d");
|
|
h.AssertFileInWorkspace("MyProject", "ÆØÅ/äöü.txt", "File contents");
|
|
}
|
|
|
|
[FactExceptOnUnix]
|
|
public void CloneProjectWithInternationalCharactersInFileContents()
|
|
{
|
|
h.SetupFake(r =>
|
|
{
|
|
r.Changeset(1, "Project created from template", DateTime.Parse("2012-01-01 12:12:12 -05:00"))
|
|
.Change(TfsChangeType.Add, TfsItemType.Folder, "$/MyProject");
|
|
r.Changeset(2, "First commit", DateTime.Parse("2012-01-02 12:12:12 -05:00"))
|
|
.Change(TfsChangeType.Add, TfsItemType.Folder, "$/MyProject/Folder")
|
|
.Change(TfsChangeType.Add, TfsItemType.File, "$/MyProject/Folder/File.txt", "Blåbærsyltetøy er godt!"); // "Blueberry jam is tasty!"
|
|
});
|
|
h.Run("clone", h.TfsUrl, "$/MyProject");
|
|
h.AssertGitRepo("MyProject");
|
|
AssertRefs("5bd7660fa145ce0c38b5c279502478ce205a0cfb");
|
|
h.AssertFileInWorkspace("MyProject", "Folder/File.txt", "Blåbærsyltetøy er godt!");
|
|
}
|
|
|
|
[FactExceptOnUnix]
|
|
public void CloneProjectWithInternationalCharactersInCommitMessages()
|
|
{
|
|
h.SetupFake(r =>
|
|
{
|
|
r.Changeset(1, "Project created from template", DateTime.Parse("2012-01-01 12:12:12 -05:00"))
|
|
.Change(TfsChangeType.Add, TfsItemType.Folder, "$/MyProject");
|
|
r.Changeset(2, "Blåbærsyltetøy", DateTime.Parse("2012-01-02 12:12:12 -05:00"))
|
|
.Change(TfsChangeType.Add, TfsItemType.Folder, "$/MyProject/Folder")
|
|
.Change(TfsChangeType.Add, TfsItemType.File, "$/MyProject/Folder/File.txt", "File contents");
|
|
});
|
|
h.Run("clone", h.TfsUrl, "$/MyProject");
|
|
h.AssertGitRepo("MyProject");
|
|
AssertRefs("cd14e6e28abffd625412dae36d9d9659bf6cb68c");
|
|
h.AssertFileInWorkspace("MyProject", "Folder/File.txt", "File contents");
|
|
|
|
var expectedCommitMessage = new System.Text.StringBuilder();
|
|
expectedCommitMessage.AppendLine("Blåbærsyltetøy");
|
|
expectedCommitMessage.AppendLine("");
|
|
expectedCommitMessage.AppendLine("git-tfs-id: [http://does/not/matter]$/MyProject;C2");
|
|
|
|
h.AssertCommitMessage("MyProject", "HEAD", expectedCommitMessage.ToString());
|
|
}
|
|
|
|
private void AssertRefs(string expectedSha)
|
|
{
|
|
h.AssertRef("MyProject", "HEAD", expectedSha);
|
|
h.AssertRef("MyProject", "master", expectedSha);
|
|
h.AssertRef("MyProject", "refs/remotes/tfs/default", expectedSha);
|
|
}
|
|
|
|
[FactExceptOnUnix]
|
|
public void CloneWithMixedUpCase()
|
|
{
|
|
h.SetupFake(r =>
|
|
{
|
|
r.Changeset(1, "Project created from template", DateTime.Parse("2012-01-01 12:12:12 -05:00"))
|
|
.Change(TfsChangeType.Add, TfsItemType.Folder, "$/MyProject");
|
|
r.Changeset(2, "First commit", DateTime.Parse("2012-01-02 12:12:12 -05:00"))
|
|
.Change(TfsChangeType.Add, TfsItemType.Folder, "$/MyProject/Foo")
|
|
.Change(TfsChangeType.Add, TfsItemType.Folder, "$/MyProject/Foo/Bar")
|
|
.Change(TfsChangeType.Add, TfsItemType.File, "$/MyProject/Foo/Bar/File.txt", "File contents");
|
|
r.Changeset(3, "Second commit", DateTime.Parse("2012-01-02 12:12:12 -05:00"))
|
|
.Change(TfsChangeType.Edit, TfsItemType.File, "$/myproject/foo/BAR/file.txt", "Updated file contents in path with different casing")
|
|
.Change(TfsChangeType.Add, TfsItemType.File, "$/myproject/FOO/bar/file2.txt", "Another file in the same folder, but with different casing");
|
|
});
|
|
h.Run("clone", h.TfsUrl, "$/MyProject");
|
|
h.AssertGitRepo("MyProject");
|
|
h.AssertCleanWorkspace("MyProject");
|
|
AssertRefs("175420603e41cd0175e3c25581754726bd21cb96");
|
|
}
|
|
}
|
|
}
|