Simplify test hook

This commit is contained in:
Nick Guerrera 2017-05-01 13:13:48 -07:00
parent 38e42d280a
commit 1ef1cc5e27
2 changed files with 25 additions and 13 deletions

View file

@ -23,12 +23,7 @@ namespace Microsoft.DotNet.MSBuildSdkResolver
}
// Test hook to provide environment variables without polluting the test process.
internal DotNetMSBuildSdkResolver(IReadOnlyDictionary<string, string> mockEnvironmentVariables)
: this(key => mockEnvironmentVariables.TryGetValue(key, out var value) ? value : null)
{
}
private DotNetMSBuildSdkResolver(Func<string, string> getEnvironmentVariable)
internal DotNetMSBuildSdkResolver(Func<string, string> getEnvironmentVariable)
{
_getEnvironmentVariable = getEnvironmentVariable;
}

View file

@ -10,6 +10,7 @@ using System.IO;
using System.Runtime.CompilerServices;
using Xunit;
using Xunit.Abstractions;
using System;
namespace Microsoft.DotNet.Cli.Utils.Tests
{
@ -73,13 +74,7 @@ namespace Microsoft.DotNet.Cli.Utils.Tests
}
public SdkResolver CreateResolver()
=> new DotNetMSBuildSdkResolver(
new Dictionary<string, string>
{
["ProgramW6432"] = GetProgramFilesDirectory(ProgramFiles.X64).FullName,
["ProgramFiles(x86)"] = GetProgramFilesDirectory(ProgramFiles.X86).FullName,
["ProgramFiles"] = GetProgramFilesDirectory(ProgramFiles.Default).FullName,
});
=> new DotNetMSBuildSdkResolver(GetEnvironmentVariable);
public DirectoryInfo GetSdkDirectory(ProgramFiles programFiles, string sdkName, string sdkVersion)
=> TestDirectory.GetDirectory(GetProgramFilesDirectory(programFiles).FullName, "dotnet", "sdk", sdkVersion, "Sdks", sdkName, "Sdk");
@ -97,6 +92,28 @@ namespace Microsoft.DotNet.Cli.Utils.Tests
public void CreateGlobalJson(DirectoryInfo directory, string version)
=> File.WriteAllText(directory.GetFile("global.json").FullName,
$@"{{ ""sdk"": {{ ""version"": ""{version}"" }} }}");
public string GetEnvironmentVariable(string variable)
{
ProgramFiles programFiles;
switch (variable)
{
case "ProgramW6432":
programFiles = ProgramFiles.X64;
break;
case "ProgramFiles(x86)":
programFiles = ProgramFiles.X86;
break;
case "ProgramFiles":
programFiles = ProgramFiles.Default;
break;
default:
return null;
}
return GetProgramFilesDirectory(programFiles).FullName;
}
}
private sealed class MockContext : SdkResolverContext