-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFileExplorerTests.cs
96 lines (83 loc) · 4.35 KB
/
FileExplorerTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
namespace CSharpInteractive.Tests;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.InteropServices;
[SuppressMessage("Performance", "CA1861:Avoid constant arrays as arguments")]
[SuppressMessage("Usage", "xUnit1042:The member referenced by the MemberData attribute returns untyped data rows")]
public class FileExplorerTests
{
private readonly Mock<IEnvironment> _environment = new();
private readonly Mock<IHostEnvironment> _hostEnvironment = new();
private readonly Mock<IFileSystem> _fileSystem = new();
[Fact]
public void ShouldFindFilesFromAdditionalPaths()
{
// Given
var explorer = CreateInstance();
_hostEnvironment.Setup(i => i.GetEnvironmentVariable("Abc")).Returns(default(string));
_hostEnvironment.Setup(i => i.GetEnvironmentVariable("DOTNET_HOME")).Returns("DotNet");
_hostEnvironment.Setup(i => i.GetEnvironmentVariable("PATH")).Returns(default(string));
_fileSystem.Setup(i => i.IsDirectoryExist("DotNet")).Returns(true);
_fileSystem.Setup(i => i.EnumerateFileSystemEntries("DotNet", "*", SearchOption.TopDirectoryOnly)).Returns(["ab", "C", "dd"]);
_fileSystem.Setup(i => i.IsFileExist("ab")).Returns(false);
_fileSystem.Setup(i => i.IsFileExist("C")).Returns(true);
_fileSystem.Setup(i => i.IsFileExist("dd")).Returns(true);
// When
var actual = explorer.FindFiles("*", "Abc", "DOTNET_HOME").ToArray();
// Then
actual.ShouldBe(["C", "dd"]);
}
[Theory]
[MemberData(nameof(Data))]
public void ShouldFindFiles(OSPlatform platform, char pathSeparator)
{
// Given
_environment.SetupGet(i => i.OperatingSystemPlatform).Returns(platform);
var explorer = CreateInstance();
_hostEnvironment.Setup(i => i.GetEnvironmentVariable("Abc")).Returns(default(string));
_hostEnvironment.Setup(i => i.GetEnvironmentVariable("DOTNET_HOME")).Returns("DotNet");
_hostEnvironment.Setup(i => i.GetEnvironmentVariable("PATH")).Returns($"Bin1{pathSeparator} bin2");
_fileSystem.Setup(i => i.IsDirectoryExist("DotNet")).Returns(true);
_fileSystem.Setup(i => i.IsDirectoryExist("Bin1")).Returns(false);
_fileSystem.Setup(i => i.IsDirectoryExist("bin2")).Returns(true);
_fileSystem.Setup(i => i.EnumerateFileSystemEntries("DotNet", "*", SearchOption.TopDirectoryOnly)).Returns(["ab", "C", "dd"]);
_fileSystem.Setup(i => i.EnumerateFileSystemEntries("bin2", "*", SearchOption.TopDirectoryOnly)).Returns(["Zz", "zz"]);
_fileSystem.Setup(i => i.IsFileExist("ab")).Returns(false);
_fileSystem.Setup(i => i.IsFileExist("C")).Returns(true);
_fileSystem.Setup(i => i.IsFileExist("dd")).Returns(true);
_fileSystem.Setup(i => i.IsFileExist("Zz")).Returns(false);
_fileSystem.Setup(i => i.IsFileExist("zz")).Returns(true);
// When
var actual = explorer.FindFiles("*", "Abc", "DOTNET_HOME").ToArray();
// Then
actual.ShouldBe(["C", "dd", "zz"]);
}
[Fact]
public void ShouldSkipDuplicates()
{
// Given
var explorer = CreateInstance();
_hostEnvironment.Setup(i => i.GetEnvironmentVariable("Abc")).Returns(default(string));
_hostEnvironment.Setup(i => i.GetEnvironmentVariable("DOTNET_HOME")).Returns("DotNet");
_hostEnvironment.Setup(i => i.GetEnvironmentVariable("PATH")).Returns(default(string));
_fileSystem.Setup(i => i.IsDirectoryExist("DotNet")).Returns(true);
_fileSystem.Setup(i => i.EnumerateFileSystemEntries("DotNet", "*", SearchOption.TopDirectoryOnly)).Returns(["ab", "C", "dd", "C"]);
_fileSystem.Setup(i => i.IsFileExist("ab")).Returns(false);
_fileSystem.Setup(i => i.IsFileExist("C")).Returns(true);
_fileSystem.Setup(i => i.IsFileExist("dd")).Returns(true);
// When
var actual = explorer.FindFiles("*", "Abc", "DOTNET_HOME").ToArray();
// Then
actual.ShouldBe(["C", "dd"]);
}
private FileExplorer CreateInstance() => new(
_environment.Object,
_hostEnvironment.Object,
_fileSystem.Object);
public static IEnumerable<object?[]> Data => new List<object?[]>
{
new object[] {OSPlatform.Windows, ';'},
new object[] {OSPlatform.Linux, ':'},
new object[] {OSPlatform.FreeBSD, ':'},
new object[] {OSPlatform.OSX, ':'}
};
}