finishing off symlink support in easyzip

This commit is contained in:
Caelan Sayler
2024-03-20 10:01:02 +00:00
parent b2877fe4eb
commit ee5a7527f9
4 changed files with 99 additions and 43 deletions

View File

@@ -95,16 +95,22 @@ public class SymbolicLinkTests
var tmpFile = Path.Combine(tempFolder, "AFile");
var symFile1 = Path.Combine(tempFolder, "SymFile");
var symFile2 = Path.Combine(subDir, "SymFile2");
var symFile3 = Path.Combine(subDir, "SymFile3");
File.WriteAllText(tmpFile, "Hello!");
SymbolicLink.Create(symFile1, tmpFile, relative: true);
SymbolicLink.Create(symFile2, tmpFile, relative: true);
SymbolicLink.Create(symFile3, tmpFile, relative: false);
Assert.Equal("Hello!", File.ReadAllText(symFile1));
Assert.Equal("Hello!", File.ReadAllText(symFile2));
Assert.Equal("AFile", SymbolicLink.GetTarget(symFile1, resolve: false));
Assert.Equal("..\\AFile", SymbolicLink.GetTarget(symFile2, resolve: false));
Assert.Equal("AFile", SymbolicLink.GetTarget(symFile1, relative: true));
Assert.Equal("..\\AFile", SymbolicLink.GetTarget(symFile2, relative: true));
Assert.Equal("..\\AFile", SymbolicLink.GetTarget(symFile3, relative: true));
Assert.Equal(tmpFile, SymbolicLink.GetTarget(symFile1, relative: false));
Assert.Equal(tmpFile, SymbolicLink.GetTarget(symFile2, relative: false));
Assert.Equal(tmpFile, SymbolicLink.GetTarget(symFile3, relative: false));
Assert.Equal(tmpFile, SymbolicLink.GetTarget(symFile1));
Assert.Equal(tmpFile, SymbolicLink.GetTarget(symFile2));
@@ -129,8 +135,8 @@ public class SymbolicLinkTests
Assert.Equal(subSubDir, SymbolicLink.GetTarget(sym2));
Assert.Equal(subDir2, SymbolicLink.GetTarget(sym1));
Assert.Equal("..\\..\\SubDir2", SymbolicLink.GetTarget(sym1, resolve: false));
Assert.Equal("SubDir\\SubSub", SymbolicLink.GetTarget(sym2, resolve: false));
Assert.Equal("..\\..\\SubDir2", SymbolicLink.GetTarget(sym1, relative: true));
Assert.Equal("SubDir\\SubSub", SymbolicLink.GetTarget(sym2, relative: true));
}
[Fact]

View File

@@ -8,6 +8,51 @@ namespace Velopack.Tests;
public class ZipPackageTests
{
private readonly ITestOutputHelper _output;
public ZipPackageTests(ITestOutputHelper output)
{
_output = output;
}
[Fact]
public void EazyZipPreservesSymlinks()
{
using var logger = _output.BuildLoggerFor<ZipPackageTests>();
using var _1 = Utility.GetTempDirectory(out var tempDir);
using var _2 = Utility.GetTempDirectory(out var zipDir);
using var _3 = Utility.GetTempDirectory(out var extractedDir);
var actual = Path.Combine(tempDir, "actual");
var actualFile = Path.Combine(actual, "file.txt");
var other = Path.Combine(tempDir, "other");
var symlink = Path.Combine(other, "syml");
var symfile = Path.Combine(other, "sym.txt");
var zipFile = Path.Combine(zipDir, "test.zip");
Directory.CreateDirectory(actual);
Directory.CreateDirectory(other);
File.WriteAllText(actualFile, "hello");
SymbolicLink.Create(symlink, actual);
SymbolicLink.Create(symfile, actualFile);
Compression.EasyZip.CreateZipFromDirectoryAsync(logger, zipFile, tempDir).GetAwaiterResult();
Compression.EasyZip.ExtractZipToDirectory(logger, zipFile, extractedDir);
Assert.True(File.Exists(Path.Combine(extractedDir, "actual", "file.txt")));
Assert.Equal("hello", File.ReadAllText(Path.Combine(extractedDir, "actual", "file.txt")));
Assert.False(SymbolicLink.Exists(Path.Combine(extractedDir, "actual", "file.txt")));
Assert.True(Directory.Exists(Path.Combine(extractedDir, "other", "syml")));
Assert.True(File.Exists(Path.Combine(extractedDir, "other", "sym.txt")));
Assert.Equal("hello", File.ReadAllText(Path.Combine(extractedDir, "other", "sym.txt")));
Assert.True(SymbolicLink.Exists(Path.Combine(extractedDir, "other", "syml")));
Assert.True(SymbolicLink.Exists(Path.Combine(extractedDir, "other", "sym.txt")));
Assert.Equal("..\\actual\\file.txt", SymbolicLink.GetTarget(Path.Combine(extractedDir, "other", "sym.txt"), relative: true));
}
[Fact]
public void HasSameFilesAndDependenciesAsPackaging()
{