Merge pull request #9332 from dotnet/merges/release/2.1.4xx-to-master

Merge release/2.1.4xx to master
This commit is contained in:
Livar 2018-05-31 10:22:00 -07:00 committed by GitHub
commit 80d542b8f4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 274 additions and 92 deletions

View file

@ -5,7 +5,7 @@
<MicrosoftAspNetCoreAppPackageVersion>$(MicrosoftAspNetCoreAllPackageVersion)</MicrosoftAspNetCoreAppPackageVersion> <MicrosoftAspNetCoreAppPackageVersion>$(MicrosoftAspNetCoreAllPackageVersion)</MicrosoftAspNetCoreAppPackageVersion>
<MicrosoftNETCoreAppPackageVersion>2.1.0-rtm-26515-03</MicrosoftNETCoreAppPackageVersion> <MicrosoftNETCoreAppPackageVersion>2.1.0-rtm-26515-03</MicrosoftNETCoreAppPackageVersion>
<MicrosoftNETCoreDotNetHostResolverPackageVersion>$(MicrosoftNETCoreAppPackageVersion)</MicrosoftNETCoreDotNetHostResolverPackageVersion> <MicrosoftNETCoreDotNetHostResolverPackageVersion>$(MicrosoftNETCoreAppPackageVersion)</MicrosoftNETCoreDotNetHostResolverPackageVersion>
<MicrosoftBuildPackageVersion>15.7.179</MicrosoftBuildPackageVersion> <MicrosoftBuildPackageVersion>15.8.0-preview-000061</MicrosoftBuildPackageVersion>
<MicrosoftBuildFrameworkPackageVersion>$(MicrosoftBuildPackageVersion)</MicrosoftBuildFrameworkPackageVersion> <MicrosoftBuildFrameworkPackageVersion>$(MicrosoftBuildPackageVersion)</MicrosoftBuildFrameworkPackageVersion>
<MicrosoftBuildRuntimePackageVersion>$(MicrosoftBuildPackageVersion)</MicrosoftBuildRuntimePackageVersion> <MicrosoftBuildRuntimePackageVersion>$(MicrosoftBuildPackageVersion)</MicrosoftBuildRuntimePackageVersion>
<MicrosoftBuildLocalizationPackageVersion>$(MicrosoftBuildPackageVersion)</MicrosoftBuildLocalizationPackageVersion> <MicrosoftBuildLocalizationPackageVersion>$(MicrosoftBuildPackageVersion)</MicrosoftBuildLocalizationPackageVersion>
@ -45,6 +45,7 @@
<NuGetPackagingPackageVersion>$(NuGetBuildTasksPackageVersion)</NuGetPackagingPackageVersion> <NuGetPackagingPackageVersion>$(NuGetBuildTasksPackageVersion)</NuGetPackagingPackageVersion>
<NuGetProjectModelPackageVersion>$(NuGetBuildTasksPackageVersion)</NuGetProjectModelPackageVersion> <NuGetProjectModelPackageVersion>$(NuGetBuildTasksPackageVersion)</NuGetProjectModelPackageVersion>
<NuGetVersioningPackageVersion>$(NuGetBuildTasksPackageVersion)</NuGetVersioningPackageVersion> <NuGetVersioningPackageVersion>$(NuGetBuildTasksPackageVersion)</NuGetVersioningPackageVersion>
<NuGetSdkResolverPackageVersion>$(NuGetBuildTasksPackageVersion)</NuGetSdkResolverPackageVersion>
<MicrosoftNETTestSdkPackageVersion>15.8.0-preview-20180510-03</MicrosoftNETTestSdkPackageVersion> <MicrosoftNETTestSdkPackageVersion>15.8.0-preview-20180510-03</MicrosoftNETTestSdkPackageVersion>
<MicrosoftTestPlatformCLIPackageVersion>$(MicrosoftNETTestSdkPackageVersion)</MicrosoftTestPlatformCLIPackageVersion> <MicrosoftTestPlatformCLIPackageVersion>$(MicrosoftNETTestSdkPackageVersion)</MicrosoftTestPlatformCLIPackageVersion>
<MicrosoftTestPlatformBuildPackageVersion>$(MicrosoftNETTestSdkPackageVersion)</MicrosoftTestPlatformBuildPackageVersion> <MicrosoftTestPlatformBuildPackageVersion>$(MicrosoftNETTestSdkPackageVersion)</MicrosoftTestPlatformBuildPackageVersion>

View file

@ -3,6 +3,7 @@
// Import the utility functionality. // Import the utility functionality.
import jobs.generation.ArchivalSettings;
import jobs.generation.Utilities; import jobs.generation.Utilities;
def project = GithubProject def project = GithubProject
@ -108,6 +109,12 @@ set DOTNET_CLI_UI_LANGUAGE=es
Utilities.addMSTestResults(newJob, '**/*.trx') Utilities.addMSTestResults(newJob, '**/*.trx')
} }
Utilities.addGithubPRTriggerForBranch(newJob, branch, "${os} ${architecture} ${configuration} Build") Utilities.addGithubPRTriggerForBranch(newJob, branch, "${os} ${architecture} ${configuration} Build")
def archiveSettings = new ArchivalSettings()
archiveSettings.addFiles("test/**/*.trx")
archiveSettings.setFailIfNothingArchived()
archiveSettings.setArchiveOnFailure()
Utilities.addArchival(newJob, archiveSettings)
} }
// Make the call to generate the help job // Make the call to generate the help job

View file

@ -522,6 +522,7 @@ else {
throw "Invalid value for `$Runtime" throw "Invalid value for `$Runtime"
} }
# Check if the SDK version is already installed.
$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion $isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion
if ($isAssetInstalled) { if ($isAssetInstalled) {
Say "$assetName version $SpecificVersion is already installed." Say "$assetName version $SpecificVersion is already installed."
@ -561,6 +562,12 @@ catch {
Say "Extracting zip from $DownloadLink" Say "Extracting zip from $DownloadLink"
Extract-Dotnet-Package -ZipPath $ZipPath -OutPath $InstallRoot Extract-Dotnet-Package -ZipPath $ZipPath -OutPath $InstallRoot
# Check if the SDK version is now installed; if not, fail the installation.
$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion
if (!$isAssetInstalled) {
throw "$assetName version $SpecificVersion failed to install with an unknown error."
}
Remove-Item $ZipPath Remove-Item $ZipPath
Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot -BinFolderRelativePath $BinFolderRelativePath Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot -BinFolderRelativePath $BinFolderRelativePath

View file

@ -754,6 +754,7 @@ install_dotnet() {
return 1 return 1
fi fi
# Check if the SDK version is already installed.
if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$specific_version"; then if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$specific_version"; then
say "$asset_name version $specific_version is already installed." say "$asset_name version $specific_version is already installed."
return 0 return 0
@ -791,6 +792,12 @@ install_dotnet() {
say "Extracting zip from $download_link" say "Extracting zip from $download_link"
extract_dotnet_package "$zip_path" "$install_root" extract_dotnet_package "$zip_path" "$install_root"
# Check if the SDK version is now installed; if not, fail the installation.
if ! is_dotnet_package_installed "$install_root" "$asset_relative_path" "$specific_version"; then
say_err "$asset_name version $specific_version failed to install with an unknown error."
return 1
fi
return 0 return 0
} }

View file

@ -3,6 +3,7 @@
using System; using System;
using System.IO; using System.IO;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Microsoft.DotNet.Cli.Utils namespace Microsoft.DotNet.Cli.Utils
@ -47,5 +48,35 @@ namespace Microsoft.DotNet.Cli.Utils
} }
} }
} }
/// <summary>
/// Run Directory.Move and File.Move in Windows has a chance to get IOException with
/// HResult 0x80070005 due to Indexer. But this error is transient.
/// </summary>
internal static void RetryOnMoveAccessFailure(Action action)
{
const int ERROR_HRESULT_ACCESS_DENIED = unchecked((int)0x80070005);
int nextWaitTime = 10;
int remainRetry = 10;
while (true)
{
try
{
action();
break;
}
catch (IOException e) when (e.HResult == ERROR_HRESULT_ACCESS_DENIED)
{
Thread.Sleep(nextWaitTime);
nextWaitTime *= 2;
remainRetry--;
if (remainRetry == 0)
{
throw;
}
}
}
}
} }
} }

View file

@ -0,0 +1,24 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
namespace Microsoft.DotNet.Configurer
{
public class DotnetFirstRunConfiguration
{
public bool GenerateAspNetCertificate { get; }
public bool PrintTelemetryMessage { get; }
public bool SkipFirstRunExperience { get; }
public DotnetFirstRunConfiguration(
bool generateAspNetCertificate,
bool printTelemetryMessage,
bool skipFirstRunExperience)
{
GenerateAspNetCertificate = generateAspNetCertificate;
PrintTelemetryMessage = printTelemetryMessage;
SkipFirstRunExperience = skipFirstRunExperience;
}
}
}

View file

@ -12,7 +12,7 @@ namespace Microsoft.DotNet.Configurer
public class DotnetFirstTimeUseConfigurer public class DotnetFirstTimeUseConfigurer
{ {
private IReporter _reporter; private IReporter _reporter;
private IEnvironmentProvider _environmentProvider; private DotnetFirstRunConfiguration _dotnetFirstRunConfiguration;
private INuGetCachePrimer _nugetCachePrimer; private INuGetCachePrimer _nugetCachePrimer;
private INuGetCacheSentinel _nugetCacheSentinel; private INuGetCacheSentinel _nugetCacheSentinel;
private IFirstTimeUseNoticeSentinel _firstTimeUseNoticeSentinel; private IFirstTimeUseNoticeSentinel _firstTimeUseNoticeSentinel;
@ -29,7 +29,7 @@ namespace Microsoft.DotNet.Configurer
IAspNetCertificateSentinel aspNetCertificateSentinel, IAspNetCertificateSentinel aspNetCertificateSentinel,
IAspNetCoreCertificateGenerator aspNetCoreCertificateGenerator, IAspNetCoreCertificateGenerator aspNetCoreCertificateGenerator,
IFileSentinel toolPathSentinel, IFileSentinel toolPathSentinel,
IEnvironmentProvider environmentProvider, DotnetFirstRunConfiguration dotnetFirstRunConfiguration,
IReporter reporter, IReporter reporter,
string cliFallbackFolderPath, string cliFallbackFolderPath,
IEnvironmentPath pathAdder) IEnvironmentPath pathAdder)
@ -40,7 +40,7 @@ namespace Microsoft.DotNet.Configurer
_aspNetCertificateSentinel = aspNetCertificateSentinel; _aspNetCertificateSentinel = aspNetCertificateSentinel;
_aspNetCoreCertificateGenerator = aspNetCoreCertificateGenerator; _aspNetCoreCertificateGenerator = aspNetCoreCertificateGenerator;
_toolPathSentinel = toolPathSentinel; _toolPathSentinel = toolPathSentinel;
_environmentProvider = environmentProvider; _dotnetFirstRunConfiguration = dotnetFirstRunConfiguration;
_reporter = reporter; _reporter = reporter;
_cliFallbackFolderPath = cliFallbackFolderPath; _cliFallbackFolderPath = cliFallbackFolderPath;
_pathAdder = pathAdder ?? throw new ArgumentNullException(nameof(pathAdder)); _pathAdder = pathAdder ?? throw new ArgumentNullException(nameof(pathAdder));
@ -93,11 +93,8 @@ namespace Microsoft.DotNet.Configurer
#if EXCLUDE_ASPNETCORE #if EXCLUDE_ASPNETCORE
return false; return false;
#else #else
var generateAspNetCertificate =
_environmentProvider.GetEnvironmentVariableAsBool("DOTNET_GENERATE_ASPNET_CERTIFICATE", true);
return ShouldRunFirstRunExperience() && return ShouldRunFirstRunExperience() &&
generateAspNetCertificate && _dotnetFirstRunConfiguration.GenerateAspNetCertificate &&
!_aspNetCertificateSentinel.Exists(); !_aspNetCertificateSentinel.Exists();
#endif #endif
} }
@ -116,11 +113,8 @@ namespace Microsoft.DotNet.Configurer
private bool ShouldPrintFirstTimeUseNotice() private bool ShouldPrintFirstTimeUseNotice()
{ {
var showFirstTimeUseNotice =
_environmentProvider.GetEnvironmentVariableAsBool("DOTNET_PRINT_TELEMETRY_MESSAGE", true);
return ShouldRunFirstRunExperience() && return ShouldRunFirstRunExperience() &&
showFirstTimeUseNotice && _dotnetFirstRunConfiguration.PrintTelemetryMessage &&
!_firstTimeUseNoticeSentinel.Exists(); !_firstTimeUseNoticeSentinel.Exists();
} }
@ -157,10 +151,7 @@ namespace Microsoft.DotNet.Configurer
private bool ShouldRunFirstRunExperience() private bool ShouldRunFirstRunExperience()
{ {
var skipFirstTimeExperience = return !_dotnetFirstRunConfiguration.SkipFirstRunExperience;
_environmentProvider.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false);
return !skipFirstTimeExperience;
} }
} }
} }

View file

@ -141,6 +141,15 @@ namespace Microsoft.DotNet.Cli
command = "help"; command = "help";
} }
var environmentProvider = new EnvironmentProvider();
bool generateAspNetCertificate =
environmentProvider.GetEnvironmentVariableAsBool("DOTNET_GENERATE_ASPNET_CERTIFICATE", true);
bool printTelemetryMessage =
environmentProvider.GetEnvironmentVariableAsBool("DOTNET_PRINT_TELEMETRY_MESSAGE", true);
bool skipFirstRunExperience =
environmentProvider.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false);
topLevelCommandParserResult = new TopLevelCommandParserResult(command); topLevelCommandParserResult = new TopLevelCommandParserResult(command);
var hasSuperUserAccess = false; var hasSuperUserAccess = false;
if (IsDotnetBeingInvokedFromNativeInstaller(topLevelCommandParserResult)) if (IsDotnetBeingInvokedFromNativeInstaller(topLevelCommandParserResult))
@ -149,15 +158,26 @@ namespace Microsoft.DotNet.Cli
firstTimeUseNoticeSentinel = new NoOpFirstTimeUseNoticeSentinel(); firstTimeUseNoticeSentinel = new NoOpFirstTimeUseNoticeSentinel();
toolPathSentinel = new NoOpFileSentinel(exists: false); toolPathSentinel = new NoOpFileSentinel(exists: false);
hasSuperUserAccess = true; hasSuperUserAccess = true;
// When running through a native installer, we want the cache expansion to happen, so
// we need to override this.
skipFirstRunExperience = false;
} }
var dotnetFirstRunConfiguration = new DotnetFirstRunConfiguration(
generateAspNetCertificate,
printTelemetryMessage,
skipFirstRunExperience);
ConfigureDotNetForFirstTimeUse( ConfigureDotNetForFirstTimeUse(
nugetCacheSentinel, nugetCacheSentinel,
firstTimeUseNoticeSentinel, firstTimeUseNoticeSentinel,
aspNetCertificateSentinel, aspNetCertificateSentinel,
toolPathSentinel, toolPathSentinel,
cliFallbackFolderPathCalculator, cliFallbackFolderPathCalculator,
hasSuperUserAccess); hasSuperUserAccess,
dotnetFirstRunConfiguration,
environmentProvider);
break; break;
} }
@ -222,15 +242,17 @@ namespace Microsoft.DotNet.Cli
IAspNetCertificateSentinel aspNetCertificateSentinel, IAspNetCertificateSentinel aspNetCertificateSentinel,
IFileSentinel toolPathSentinel, IFileSentinel toolPathSentinel,
CliFolderPathCalculator cliFolderPathCalculator, CliFolderPathCalculator cliFolderPathCalculator,
bool hasSuperUserAccess) bool hasSuperUserAccess,
DotnetFirstRunConfiguration dotnetFirstRunConfiguration,
IEnvironmentProvider environmentProvider)
{ {
var environmentProvider = new EnvironmentProvider();
using (PerfTrace.Current.CaptureTiming()) using (PerfTrace.Current.CaptureTiming())
{ {
var nugetPackagesArchiver = new NuGetPackagesArchiver(); var nugetPackagesArchiver = new NuGetPackagesArchiver();
var environmentPath = var environmentPath = EnvironmentPathFactory.CreateEnvironmentPath(
EnvironmentPathFactory.CreateEnvironmentPath(cliFolderPathCalculator, hasSuperUserAccess, environmentProvider); cliFolderPathCalculator,
hasSuperUserAccess,
environmentProvider);
var commandFactory = new DotNetCommandFactory(alwaysRunOutOfProc: true); var commandFactory = new DotNetCommandFactory(alwaysRunOutOfProc: true);
var nugetCachePrimer = new NuGetCachePrimer( var nugetCachePrimer = new NuGetCachePrimer(
nugetPackagesArchiver, nugetPackagesArchiver,
@ -244,7 +266,7 @@ namespace Microsoft.DotNet.Cli
aspNetCertificateSentinel, aspNetCertificateSentinel,
aspnetCertificateGenerator, aspnetCertificateGenerator,
toolPathSentinel, toolPathSentinel,
environmentProvider, dotnetFirstRunConfiguration,
Reporter.Output, Reporter.Output,
cliFolderPathCalculator.CliFallbackFolderPath, cliFolderPathCalculator.CliFallbackFolderPath,
environmentPath); environmentPath);

View file

@ -113,7 +113,7 @@ namespace Microsoft.DotNet.ShellShim
foreach (var file in GetShimFiles(commandName).Where(f => _fileSystem.File.Exists(f.Value))) foreach (var file in GetShimFiles(commandName).Where(f => _fileSystem.File.Exists(f.Value)))
{ {
var tempPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); var tempPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
_fileSystem.File.Move(file.Value, tempPath); FileAccessRetrier.RetryOnMoveAccessFailure(() => _fileSystem.File.Move(file.Value, tempPath));
files[file.Value] = tempPath; files[file.Value] = tempPath;
} }
} }
@ -137,7 +137,7 @@ namespace Microsoft.DotNet.ShellShim
rollback: () => { rollback: () => {
foreach (var kvp in files) foreach (var kvp in files)
{ {
_fileSystem.File.Move(kvp.Value, kvp.Key); FileAccessRetrier.RetryOnMoveAccessFailure(() => _fileSystem.File.Move(kvp.Value, kvp.Key));
} }
}); });
} }

View file

@ -4,6 +4,7 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Xml.Linq; using System.Xml.Linq;
using Microsoft.DotNet.Cli; using Microsoft.DotNet.Cli;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Configurer; using Microsoft.DotNet.Configurer;
using Microsoft.DotNet.Tools; using Microsoft.DotNet.Tools;
using Microsoft.Extensions.EnvironmentAbstractions; using Microsoft.Extensions.EnvironmentAbstractions;
@ -82,7 +83,7 @@ namespace Microsoft.DotNet.ToolPackage
} }
Directory.CreateDirectory(packageRootDirectory.Value); Directory.CreateDirectory(packageRootDirectory.Value);
Directory.Move(stageDirectory.Value, packageDirectory.Value); FileAccessRetrier.RetryOnMoveAccessFailure(() => Directory.Move(stageDirectory.Value, packageDirectory.Value));
rollbackDirectory = packageDirectory.Value; rollbackDirectory = packageDirectory.Value;
return new ToolPackageInstance(_store, packageId, version, packageDirectory); return new ToolPackageInstance(_store, packageId, version, packageDirectory);

View file

@ -8,6 +8,7 @@ using Microsoft.Extensions.EnvironmentAbstractions;
using NuGet.ProjectModel; using NuGet.ProjectModel;
using NuGet.Versioning; using NuGet.Versioning;
using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.Cli.Utils;
using System.Threading;
namespace Microsoft.DotNet.ToolPackage namespace Microsoft.DotNet.ToolPackage
{ {
@ -79,7 +80,7 @@ namespace Microsoft.DotNet.ToolPackage
// Use the staging directory for uninstall // Use the staging directory for uninstall
// This prevents cross-device moves when temp is mounted to a different device // This prevents cross-device moves when temp is mounted to a different device
var tempPath = _store.GetRandomStagingDirectory().Value; var tempPath = _store.GetRandomStagingDirectory().Value;
Directory.Move(PackageDirectory.Value, tempPath); FileAccessRetrier.RetryOnMoveAccessFailure(() => Directory.Move(PackageDirectory.Value, tempPath));
tempPackageDirectory = tempPath; tempPackageDirectory = tempPath;
} }
@ -111,7 +112,7 @@ namespace Microsoft.DotNet.ToolPackage
if (tempPackageDirectory != null) if (tempPackageDirectory != null)
{ {
Directory.CreateDirectory(rootDirectory.Value); Directory.CreateDirectory(rootDirectory.Value);
Directory.Move(tempPackageDirectory, PackageDirectory.Value); FileAccessRetrier.RetryOnMoveAccessFailure(() => Directory.Move(tempPackageDirectory, PackageDirectory.Value));
} }
}); });
} }

View file

@ -17,6 +17,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.NETCore.App" Version="$(MicrosoftNETCoreAppPackageVersion)" /> <PackageReference Include="Microsoft.NETCore.App" Version="$(MicrosoftNETCoreAppPackageVersion)" />
<PackageReference Include="NuGet.Build.Tasks" Version="$(NuGetBuildTasksPackageVersion)" /> <PackageReference Include="NuGet.Build.Tasks" Version="$(NuGetBuildTasksPackageVersion)" />
<PackageReference Include="Microsoft.Build.NuGetSdkResolver" Version="$(NuGetSdkResolverPackageVersion)" />
<PackageReference Include="Microsoft.TestPlatform.CLI" Version="$(MicrosoftTestPlatformCLIPackageVersion)" /> <PackageReference Include="Microsoft.TestPlatform.CLI" Version="$(MicrosoftTestPlatformCLIPackageVersion)" />
<PackageReference Include="Microsoft.TestPlatform.Build" Version="$(MicrosoftTestPlatformBuildPackageVersion)" /> <PackageReference Include="Microsoft.TestPlatform.Build" Version="$(MicrosoftTestPlatformBuildPackageVersion)" />
<PackageReference Condition=" '$(DotNetBuildFromSource)' != 'true' " Include="NuGet.Localization" Version="$(NuGetProjectModelPackageVersion)" /> <PackageReference Condition=" '$(DotNetBuildFromSource)' != 'true' " Include="NuGet.Localization" Version="$(NuGetProjectModelPackageVersion)" />
@ -283,6 +284,9 @@
<RemainingFiles Remove="$(PublishDir)**\*.resources.dll" /> <RemainingFiles Remove="$(PublishDir)**\*.resources.dll" />
<DiasymReaderPath Include="$(SharedFrameworkNameVersionPath)/Microsoft.DiaSymReader.Native.*.dll" /> <DiasymReaderPath Include="$(SharedFrameworkNameVersionPath)/Microsoft.DiaSymReader.Native.*.dll" />
<!-- MSBuild includes reference assemblies to compile in-memory tasks. Don't try to crossgen. -->
<RemainingFiles Remove="$(PublishDir)ref\*.dll" />
</ItemGroup> </ItemGroup>
<AddMetadataIsPE Items="@(RoslynFiles)"> <AddMetadataIsPE Items="@(RoslynFiles)">

View file

@ -21,7 +21,6 @@ namespace Microsoft.DotNet.Configurer.UnitTests
private Mock<IAspNetCertificateSentinel> _aspNetCertificateSentinelMock; private Mock<IAspNetCertificateSentinel> _aspNetCertificateSentinelMock;
private Mock<IAspNetCoreCertificateGenerator> _aspNetCoreCertificateGeneratorMock; private Mock<IAspNetCoreCertificateGenerator> _aspNetCoreCertificateGeneratorMock;
private Mock<IFileSentinel> _toolPathSentinelMock; private Mock<IFileSentinel> _toolPathSentinelMock;
private Mock<IEnvironmentProvider> _environmentProviderMock;
private Mock<IReporter> _reporterMock; private Mock<IReporter> _reporterMock;
private Mock<IEnvironmentPath> _pathAdderMock; private Mock<IEnvironmentPath> _pathAdderMock;
@ -33,16 +32,8 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock = new Mock<IAspNetCertificateSentinel>(); _aspNetCertificateSentinelMock = new Mock<IAspNetCertificateSentinel>();
_aspNetCoreCertificateGeneratorMock = new Mock<IAspNetCoreCertificateGenerator>(); _aspNetCoreCertificateGeneratorMock = new Mock<IAspNetCoreCertificateGenerator>();
_toolPathSentinelMock = new Mock<IFileSentinel>(); _toolPathSentinelMock = new Mock<IFileSentinel>();
_environmentProviderMock = new Mock<IEnvironmentProvider>();
_reporterMock = new Mock<IReporter>(); _reporterMock = new Mock<IReporter>();
_pathAdderMock = new Mock<IEnvironmentPath>(); _pathAdderMock = new Mock<IEnvironmentPath>();
_environmentProviderMock
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false))
.Returns(false);
_environmentProviderMock
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_PRINT_TELEMETRY_MESSAGE", true))
.Returns(true);
} }
[Fact] [Fact]
@ -57,7 +48,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -72,9 +68,6 @@ namespace Microsoft.DotNet.Configurer.UnitTests
public void It_does_not_print_the_first_time_use_notice_when_the_user_has_set_the_DOTNET_SKIP_FIRST_TIME_EXPERIENCE_environemnt_variable() public void It_does_not_print_the_first_time_use_notice_when_the_user_has_set_the_DOTNET_SKIP_FIRST_TIME_EXPERIENCE_environemnt_variable()
{ {
_firstTimeUseNoticeSentinelMock.Setup(n => n.Exists()).Returns(false); _firstTimeUseNoticeSentinelMock.Setup(n => n.Exists()).Returns(false);
_environmentProviderMock
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false))
.Returns(true);
var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer( var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer(
_nugetCachePrimerMock.Object, _nugetCachePrimerMock.Object,
@ -83,7 +76,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: true
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -98,9 +96,6 @@ namespace Microsoft.DotNet.Configurer.UnitTests
public void It_does_not_print_the_first_time_use_notice_when_the_user_has_set_the_DOTNET_PRINT_TELEMETRY_MESSAGE_environemnt_variable() public void It_does_not_print_the_first_time_use_notice_when_the_user_has_set_the_DOTNET_PRINT_TELEMETRY_MESSAGE_environemnt_variable()
{ {
_firstTimeUseNoticeSentinelMock.Setup(n => n.Exists()).Returns(false); _firstTimeUseNoticeSentinelMock.Setup(n => n.Exists()).Returns(false);
_environmentProviderMock
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_PRINT_TELEMETRY_MESSAGE", true))
.Returns(false);
var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer( var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer(
_nugetCachePrimerMock.Object, _nugetCachePrimerMock.Object,
@ -109,7 +104,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: false,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -132,7 +132,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -155,7 +160,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -177,7 +187,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -199,7 +214,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -210,12 +230,9 @@ namespace Microsoft.DotNet.Configurer.UnitTests
} }
[Fact] [Fact]
public void It_does_not_prime_the_cache_if_the_sentinel_exists_but_the_user_has_set_the_DOTNET_SKIP_FIRST_TIME_EXPERIENCE_environemnt_variable() public void It_does_not_prime_the_cache_if_the_sentinel_does_not_exist_but_the_user_has_set_the_DOTNET_SKIP_FIRST_TIME_EXPERIENCE_environment_variable()
{ {
_nugetCacheSentinelMock.Setup(n => n.Exists()).Returns(false); _nugetCacheSentinelMock.Setup(n => n.Exists()).Returns(false);
_environmentProviderMock
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false))
.Returns(true);
var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer( var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer(
_nugetCachePrimerMock.Object, _nugetCachePrimerMock.Object,
@ -224,7 +241,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: true
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -246,7 +268,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -269,7 +296,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -295,7 +327,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -322,7 +359,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -345,7 +387,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -368,7 +415,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -398,7 +450,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -420,7 +477,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -435,9 +497,6 @@ namespace Microsoft.DotNet.Configurer.UnitTests
public void It_does_not_generate_the_aspnet_https_development_certificate_when_the_user_has_set_the_DOTNET_SKIP_FIRST_TIME_EXPERIENCE_environment_variable() public void It_does_not_generate_the_aspnet_https_development_certificate_when_the_user_has_set_the_DOTNET_SKIP_FIRST_TIME_EXPERIENCE_environment_variable()
{ {
_aspNetCertificateSentinelMock.Setup(n => n.Exists()).Returns(false); _aspNetCertificateSentinelMock.Setup(n => n.Exists()).Returns(false);
_environmentProviderMock
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false))
.Returns(true);
var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer( var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer(
_nugetCachePrimerMock.Object, _nugetCachePrimerMock.Object,
@ -446,7 +505,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: true
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -461,9 +525,6 @@ namespace Microsoft.DotNet.Configurer.UnitTests
public void It_does_not_generate_the_aspnet_https_development_certificate_when_the_user_has_set_the_DOTNET_GENERATE_ASPNET_CERTIFICATE_environment_variable() public void It_does_not_generate_the_aspnet_https_development_certificate_when_the_user_has_set_the_DOTNET_GENERATE_ASPNET_CERTIFICATE_environment_variable()
{ {
_aspNetCertificateSentinelMock.Setup(n => n.Exists()).Returns(false); _aspNetCertificateSentinelMock.Setup(n => n.Exists()).Returns(false);
_environmentProviderMock
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_GENERATE_ASPNET_CERTIFICATE", true))
.Returns(false);
var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer( var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer(
_nugetCachePrimerMock.Object, _nugetCachePrimerMock.Object,
@ -472,7 +533,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: false,
printTelemetryMessage: true,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -487,8 +553,6 @@ namespace Microsoft.DotNet.Configurer.UnitTests
public void It_generates_the_aspnet_https_development_certificate_if_the_sentinel_does_not_exist() public void It_generates_the_aspnet_https_development_certificate_if_the_sentinel_does_not_exist()
{ {
_aspNetCertificateSentinelMock.Setup(n => n.Exists()).Returns(false); _aspNetCertificateSentinelMock.Setup(n => n.Exists()).Returns(false);
_environmentProviderMock.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_GENERATE_ASPNET_CERTIFICATE", true))
.Returns(true);
var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer( var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer(
_nugetCachePrimerMock.Object, _nugetCachePrimerMock.Object,
@ -497,7 +561,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -520,7 +589,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: false
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);
@ -533,10 +607,6 @@ namespace Microsoft.DotNet.Configurer.UnitTests
[Fact] [Fact]
public void It_does_not_add_the_tool_path_to_the_environment_if_the_first_run_experience_is_skipped() public void It_does_not_add_the_tool_path_to_the_environment_if_the_first_run_experience_is_skipped()
{ {
_environmentProviderMock
.Setup(e => e.GetEnvironmentVariableAsBool("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", false))
.Returns(true);
var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer( var dotnetFirstTimeUseConfigurer = new DotnetFirstTimeUseConfigurer(
_nugetCachePrimerMock.Object, _nugetCachePrimerMock.Object,
_nugetCacheSentinelMock.Object, _nugetCacheSentinelMock.Object,
@ -544,7 +614,12 @@ namespace Microsoft.DotNet.Configurer.UnitTests
_aspNetCertificateSentinelMock.Object, _aspNetCertificateSentinelMock.Object,
_aspNetCoreCertificateGeneratorMock.Object, _aspNetCoreCertificateGeneratorMock.Object,
_toolPathSentinelMock.Object, _toolPathSentinelMock.Object,
_environmentProviderMock.Object, new DotnetFirstRunConfiguration
(
generateAspNetCertificate: true,
printTelemetryMessage: true,
skipFirstRunExperience: true
),
_reporterMock.Object, _reporterMock.Object,
CliFallbackFolderPath, CliFallbackFolderPath,
_pathAdderMock.Object); _pathAdderMock.Object);

View file

@ -334,19 +334,34 @@ namespace Microsoft.DotNet.Cli.Utils.Tests
private sealed class MockFactory : SdkResultFactory private sealed class MockFactory : SdkResultFactory
{ {
public override SdkResult IndicateFailure(IEnumerable<string> errors, IEnumerable<string> warnings = null) public override SdkResult IndicateFailure(IEnumerable<string> errors, IEnumerable<string> warnings = null)
=> new MockResult { Success = false, Errors = errors, Warnings = warnings }; => new MockResult(success: false, path: null, version: null, warnings: warnings, errors: errors);
public override SdkResult IndicateSuccess(string path, string version, IEnumerable<string> warnings = null) public override SdkResult IndicateSuccess(string path, string version, IEnumerable<string> warnings = null)
=> new MockResult { Success = true, Path = path, Version = version, Warnings = warnings }; => new MockResult(success: true, path: path, version: version, warnings: warnings);
} }
private sealed class MockResult : SdkResult private sealed class MockResult : SdkResult
{ {
public new bool Success { get => base.Success; set => base.Success = value; } public MockResult(bool success, string path, string version, IEnumerable<string> warnings = null,
public string Version { get; set; } IEnumerable<string> errors = null)
public string Path { get; set; } {
public IEnumerable<string> Errors { get; set; } Success = success;
public IEnumerable<string> Warnings { get; set; } Path = path;
Version = version;
Warnings = warnings;
Errors = errors;
}
public new bool Success
{
get => base.Success;
private set => base.Success = value;
}
public override string Version { get; protected set; }
public override string Path { get; protected set; }
public IEnumerable<string> Errors { get; }
public IEnumerable<string> Warnings { get; }
} }
} }
} }

View file

@ -14,8 +14,4 @@
<ProjectReference Include="..\..\src\Microsoft.DotNet.Cli.Utils\Microsoft.DotNet.Cli.Utils.csproj" /> <ProjectReference Include="..\..\src\Microsoft.DotNet.Cli.Utils\Microsoft.DotNet.Cli.Utils.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="NETStandard.Library" Version="2.0.0" />
</ItemGroup>
</Project> </Project>