dotnet-installer/test/EndToEnd/GivenDotNetUsesMSBuild.cs

237 lines
8.7 KiB
C#
Raw Normal View History

2016-07-21 20:04:05 +00:00
// 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.
using System;
using System.IO;
2018-07-07 00:58:44 +00:00
using System.Linq;
using System.Xml.Linq;
2018-10-29 18:26:53 +00:00
using Microsoft.DotNet.TestFramework;
2016-07-21 20:04:05 +00:00
using Microsoft.DotNet.Tools.Test.Utilities;
using Xunit;
[assembly: CollectionBehavior(DisableTestParallelization = true)]
2016-07-21 20:04:05 +00:00
namespace Microsoft.DotNet.Tests.EndToEnd
{
public class GivenDotNetUsesMSBuild : TestBase
{
2018-10-29 18:26:53 +00:00
private string _testPackagesDirectory;
private string _testNuGetCache;
public GivenDotNetUsesMSBuild()
2016-07-21 20:04:05 +00:00
{
2018-10-29 18:26:53 +00:00
_testPackagesDirectory = SetupTestPackages();
2016-07-21 20:04:05 +00:00
2018-10-29 18:26:53 +00:00
_testNuGetCache = TestAssets.CreateTestDirectory(testProjectName: string.Empty,
callingMethod: "packages",
identifier: string.Empty)
.FullName;
}
2016-07-21 20:04:05 +00:00
2018-10-29 18:26:53 +00:00
[Fact]
public void ItCanNewRestoreBuildRunCleanMSBuildProject()
{
var directory = TestAssets.CreateTestDirectory();
string projectDirectory = directory.FullName;
string newArgs = "console --debug:ephemeral-hive --no-restore";
new NewCommandShim()
.WithWorkingDirectory(projectDirectory)
.Execute(newArgs)
.Should().Pass();
new RestoreCommand()
.WithWorkingDirectory(projectDirectory)
.Execute("/p:SkipInvalidConfigurations=true")
.Should().Pass();
2016-07-21 20:04:05 +00:00
2018-10-29 18:26:53 +00:00
new BuildCommand()
.WithWorkingDirectory(projectDirectory)
.Execute()
.Should().Pass();
2016-07-21 20:04:05 +00:00
2018-10-29 18:26:53 +00:00
var runCommand = new RunCommand()
.WithWorkingDirectory(projectDirectory);
2018-10-29 18:26:53 +00:00
// Set DOTNET_ROOT as workaround for https://github.com/dotnet/cli/issues/10196
var dotnetRoot = Path.GetDirectoryName(RepoDirectoriesProvider.DotnetUnderTest);
if (!string.IsNullOrEmpty(dotnetRoot))
{
runCommand = runCommand.WithEnvironmentVariable(Environment.Is64BitProcess ? "DOTNET_ROOT" : "DOTNET_ROOT(x86)",
dotnetRoot);
}
2018-10-29 18:26:53 +00:00
runCommand.ExecuteWithCapturedOutput()
.Should().Pass()
.And.HaveStdOutContaining("Hello World!");
2018-10-29 18:26:53 +00:00
var binDirectory = new DirectoryInfo(projectDirectory).Sub("bin");
binDirectory.Should().HaveFilesMatching("*.dll", SearchOption.AllDirectories);
2018-10-29 18:26:53 +00:00
new CleanCommand()
.WithWorkingDirectory(projectDirectory)
.Execute()
.Should().Pass();
2018-10-29 18:26:53 +00:00
binDirectory.Should().NotHaveFilesMatching("*.dll", SearchOption.AllDirectories);
2016-07-21 20:04:05 +00:00
}
[Fact]
public void ItCanRunToolsInACSProj()
{
var testInstance = TestAssets.Get("MSBuildTestApp")
.CreateInstance()
2018-10-29 18:26:53 +00:00
.WithSourceFiles();
var testProjectDirectory = testInstance.Root;
2018-10-29 18:26:53 +00:00
new RestoreCommand()
.WithWorkingDirectory(testProjectDirectory)
.WithEnvironmentVariable("NUGET_PACKAGES", _testNuGetCache)
.WithEnvironmentVariable("TEST_PACKAGES", _testPackagesDirectory)
.Execute()
.Should()
.Pass();
new DotnetCommand()
.WithWorkingDirectory(testInstance.Root)
2018-10-29 18:26:53 +00:00
.WithEnvironmentVariable("NUGET_PACKAGES", _testNuGetCache)
.WithEnvironmentVariable("TEST_PACKAGES", _testPackagesDirectory)
2018-07-07 00:58:44 +00:00
.ExecuteWithCapturedOutput("-d portable")
.Should()
2016-10-05 18:51:59 +00:00
.Pass()
.And
.HaveStdOutContaining("Hello Portable World!");;
}
2018-10-29 18:26:53 +00:00
[Fact]
2016-11-23 18:19:00 +00:00
public void ItCanRunToolsThatPrefersTheCliRuntimeEvenWhenTheToolItselfDeclaresADifferentRuntime()
{
var testInstance = TestAssets.Get("MSBuildTestApp")
.CreateInstance()
2018-10-29 18:26:53 +00:00
.WithSourceFiles();
var testProjectDirectory = testInstance.Root;
2018-10-29 18:26:53 +00:00
new RestoreCommand()
.WithWorkingDirectory(testProjectDirectory)
.WithEnvironmentVariable("NUGET_PACKAGES", _testNuGetCache)
.WithEnvironmentVariable("TEST_PACKAGES", _testPackagesDirectory)
.Execute()
.Should()
.Pass();
new DotnetCommand()
.WithWorkingDirectory(testInstance.Root)
2018-10-29 18:26:53 +00:00
.WithEnvironmentVariable("NUGET_PACKAGES", _testNuGetCache)
.WithEnvironmentVariable("TEST_PACKAGES", _testPackagesDirectory)
2018-07-07 00:58:44 +00:00
.ExecuteWithCapturedOutput("-d prefercliruntime")
2016-11-23 18:19:00 +00:00
.Should().Pass()
.And.HaveStdOutContaining("Hello I prefer the cli runtime World!");;
}
2018-10-29 18:26:53 +00:00
[Fact]
public void ItCanRunAToolThatInvokesADependencyToolInACSProj()
{
var repoDirectoriesProvider = new RepoDirectoriesProvider();
var testInstance = TestAssets.Get("TestAppWithProjDepTool")
.CreateInstance()
2018-10-29 18:26:53 +00:00
.WithSourceFiles();
var configuration = "Debug";
var testProjectDirectory = testInstance.Root;
2018-10-29 18:26:53 +00:00
new RestoreCommand()
.WithWorkingDirectory(testProjectDirectory)
.WithEnvironmentVariable("NUGET_PACKAGES", _testNuGetCache)
.WithEnvironmentVariable("TEST_PACKAGES", _testPackagesDirectory)
.Execute()
.Should()
.Pass();
new BuildCommand()
.WithWorkingDirectory(testProjectDirectory)
2018-10-29 18:26:53 +00:00
.WithEnvironmentVariable("NUGET_PACKAGES", _testNuGetCache)
.WithEnvironmentVariable("TEST_PACKAGES", _testPackagesDirectory)
.Execute($"-c {configuration} ")
.Should()
.Pass();
new DotnetCommand()
.WithWorkingDirectory(testProjectDirectory)
2018-10-29 18:26:53 +00:00
.WithEnvironmentVariable("NUGET_PACKAGES", _testNuGetCache)
.WithEnvironmentVariable("TEST_PACKAGES", _testPackagesDirectory)
.ExecuteWithCapturedOutput(
2018-07-09 17:25:13 +00:00
$"-d dependency-tool-invoker -c {configuration} -f netcoreapp3.0 portable")
.Should().Pass()
2018-10-29 18:26:53 +00:00
.And.HaveStdOutContaining("Hello Portable World!");
}
[Fact]
public void BuildTestPackages()
{
}
private string SetupTestPackages()
{
var directory = TestAssets.CreateTestDirectory(
testProjectName: string.Empty,
callingMethod: "TestPackages",
identifier: string.Empty);
string testPackagesDirectory = Path.Combine(directory.FullName, "testPackages");
if (!Directory.Exists(testPackagesDirectory))
{
new DirectoryInfo(testPackagesDirectory).Create();
//Directory.CreateDirectory(testPackagesDirectory);
}
var testPackageNames = new[]
{
"dotnet-portable",
"dotnet-prefercliruntime",
"dotnet-dependency-tool-invoker"
};
foreach (var testPackageName in testPackageNames)
{
var assetInfo = TestAssets.Get(TestAssetKinds.TestPackages, testPackageName);
var testProjectDirectory = new DirectoryInfo(Path.Combine(directory.FullName, testPackageName));
if (!testProjectDirectory.Exists)
{
testProjectDirectory.Create();
}
var testInstance = new TestAssetInstance(assetInfo, testProjectDirectory)
.WithSourceFiles()
.WithRestoreFiles();
new PackCommand()
.WithWorkingDirectory(testProjectDirectory)
.Execute()
.Should()
.Pass();
string nupkgFilePathInOutput = Directory.GetFiles(Path.Combine(testProjectDirectory.FullName, "bin", "Debug"), "*.nupkg")
.Single();
string nupkgFile = Path.Combine(testPackagesDirectory, Path.GetFileName(nupkgFilePathInOutput));
File.Copy(nupkgFilePathInOutput, nupkgFile);
}
return testPackagesDirectory;
}
2016-07-21 20:04:05 +00:00
}
}