From be9b04d2272ef9a9e811d2d5486593b628a68993 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Wed, 3 Jun 2020 12:31:23 +1000 Subject: Never run in-proc on .NET Core. --- src/test/WixToolsetTest.MSBuild/MsbuildFixture.cs | 30 ++++++++------ .../WixToolsetTest.MSBuild/MsbuildHeatFixture.cs | 11 +++--- .../WixToolsetTest.MSBuild/MsbuildUtilities.cs | 46 +++++++++++++++++++++- 3 files changed, 67 insertions(+), 20 deletions(-) (limited to 'src/test/WixToolsetTest.MSBuild') diff --git a/src/test/WixToolsetTest.MSBuild/MsbuildFixture.cs b/src/test/WixToolsetTest.MSBuild/MsbuildFixture.cs index 6862f2a8..71255165 100644 --- a/src/test/WixToolsetTest.MSBuild/MsbuildFixture.cs +++ b/src/test/WixToolsetTest.MSBuild/MsbuildFixture.cs @@ -12,6 +12,7 @@ namespace WixToolsetTest.MSBuild public class MsbuildFixture { [Theory] + [InlineData(BuildSystem.DotNetCoreSdk)] [InlineData(BuildSystem.MSBuild)] [InlineData(BuildSystem.MSBuild64)] public void CanBuildSimpleBundle(BuildSystem buildSystem) @@ -44,6 +45,7 @@ namespace WixToolsetTest.MSBuild } [Theory] + [InlineData(BuildSystem.DotNetCoreSdk)] [InlineData(BuildSystem.MSBuild)] [InlineData(BuildSystem.MSBuild64)] public void CanBuildSimpleMergeModule(BuildSystem buildSystem) @@ -76,6 +78,7 @@ namespace WixToolsetTest.MSBuild } [Theory] + [InlineData(BuildSystem.DotNetCoreSdk)] [InlineData(BuildSystem.MSBuild)] [InlineData(BuildSystem.MSBuild64)] public void CanBuildSimpleMsiPackage(BuildSystem buildSystem) @@ -112,6 +115,7 @@ namespace WixToolsetTest.MSBuild } [Theory] + [InlineData(BuildSystem.DotNetCoreSdk)] [InlineData(BuildSystem.MSBuild)] [InlineData(BuildSystem.MSBuild64)] public void CanBuildSimpleMsiPackageWithMergeModule(BuildSystem buildSystem) @@ -145,6 +149,7 @@ namespace WixToolsetTest.MSBuild } [Theory] + [InlineData(BuildSystem.DotNetCoreSdk)] [InlineData(BuildSystem.MSBuild)] [InlineData(BuildSystem.MSBuild64)] public void CanBuildWithDefaultAndExplicitlyFullWixpdbs(BuildSystem buildSystem) @@ -161,6 +166,7 @@ namespace WixToolsetTest.MSBuild } [Theory] + [InlineData(BuildSystem.DotNetCoreSdk)] [InlineData(BuildSystem.MSBuild)] [InlineData(BuildSystem.MSBuild64)] public void CanBuildWithNoWixpdb(BuildSystem buildSystem) @@ -198,6 +204,7 @@ namespace WixToolsetTest.MSBuild } [Theory] + [InlineData(BuildSystem.DotNetCoreSdk)] [InlineData(BuildSystem.MSBuild)] [InlineData(BuildSystem.MSBuild64)] public void CanBuild64BitMsiPackage(BuildSystem buildSystem) @@ -234,6 +241,7 @@ namespace WixToolsetTest.MSBuild } [Theory(Skip = "Currently fails")] + [InlineData(BuildSystem.DotNetCoreSdk)] [InlineData(BuildSystem.MSBuild)] [InlineData(BuildSystem.MSBuild64)] public void CanBuildSimpleMsiPackageWithIceSuppressions(BuildSystem buildSystem) @@ -249,13 +257,14 @@ namespace WixToolsetTest.MSBuild var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] { - "-p:SuppressIces=\"ICE45;ICE46\"", + MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "SuppressIces", "ICE45;ICE46"), }); result.AssertSuccess(); } } [Theory] + [InlineData(BuildSystem.DotNetCoreSdk)] [InlineData(BuildSystem.MSBuild)] [InlineData(BuildSystem.MSBuild64)] public void CanBuildSimpleMsiPackageWithWarningSuppressions(BuildSystem buildSystem) @@ -271,7 +280,7 @@ namespace WixToolsetTest.MSBuild var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] { - "-p:SuppressSpecificWarnings=\"1118;1102\"", + MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "SuppressSpecificWarnings", "1118;1102"), }); result.AssertSuccess(); @@ -281,6 +290,8 @@ namespace WixToolsetTest.MSBuild } [Theory] + [InlineData(BuildSystem.DotNetCoreSdk, null)] + [InlineData(BuildSystem.DotNetCoreSdk, true)] [InlineData(BuildSystem.MSBuild, null)] [InlineData(BuildSystem.MSBuild, true)] [InlineData(BuildSystem.MSBuild64, null)] @@ -302,10 +313,8 @@ namespace WixToolsetTest.MSBuild }, outOfProc: outOfProc); result.AssertSuccess(); - var expectedOutOfProc = outOfProc.HasValue && outOfProc.Value; - var expectedWixCommand = $"{(expectedOutOfProc ? "wix.exe" : "(wix.exe)")} build"; - var buildCommands = result.Output.Where(line => line.TrimStart().Contains(expectedWixCommand)); - Assert.Single(buildCommands); + var wixBuildCommands = MsbuildUtilities.GetToolCommandLines(result, "wix", "build", buildSystem, outOfProc); + Assert.Single(wixBuildCommands); var path = Directory.EnumerateFiles(binFolder, @"*.*", SearchOption.AllDirectories) .Select(s => s.Substring(baseFolder.Length + 1)) @@ -315,6 +324,7 @@ namespace WixToolsetTest.MSBuild } [Theory] + [InlineData(BuildSystem.DotNetCoreSdk)] [InlineData(BuildSystem.MSBuild)] [InlineData(BuildSystem.MSBuild64)] public void CanBuildAndCleanSimpleMsiPackage(BuildSystem buildSystem) @@ -328,10 +338,7 @@ namespace WixToolsetTest.MSBuild var projectPath = Path.Combine(baseFolder, "MsiPackage.wixproj"); // Build - var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] - { - "-v:diag", - }); + var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, verbosityLevel: "diag"); result.AssertSuccess(); var buildOutput = String.Join("\r\n", result.Output); @@ -346,8 +353,7 @@ namespace WixToolsetTest.MSBuild result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] { "-t:Clean", - "-v:diag", - }); + }, verbosityLevel: "diag"); result.AssertSuccess(); var cleanOutput = String.Join("\r\n", result.Output); diff --git a/src/test/WixToolsetTest.MSBuild/MsbuildHeatFixture.cs b/src/test/WixToolsetTest.MSBuild/MsbuildHeatFixture.cs index b5c71f86..f5f03be0 100644 --- a/src/test/WixToolsetTest.MSBuild/MsbuildHeatFixture.cs +++ b/src/test/WixToolsetTest.MSBuild/MsbuildHeatFixture.cs @@ -3,6 +3,7 @@ namespace WixToolsetTest.MSBuild { using System; + using System.Collections.Generic; using System.IO; using System.Linq; using WixBuildTools.TestSupport; @@ -14,6 +15,7 @@ namespace WixToolsetTest.MSBuild public class MsbuildHeatFixture { [Theory] + [InlineData(BuildSystem.DotNetCoreSdk)] [InlineData(BuildSystem.MSBuild)] [InlineData(BuildSystem.MSBuild64)] public void CanBuildHeatFilePackage(BuildSystem buildSystem) @@ -31,9 +33,7 @@ namespace WixToolsetTest.MSBuild var result = MsbuildUtilities.BuildProject(buildSystem, projectPath); result.AssertSuccess(); - var expectedOutOfProc = false; - var expectedHeatCommand = $"{(expectedOutOfProc ? "heat.exe" : "(heat.exe)")} file"; - var heatCommandLines = result.Output.Where(line => line.Contains(expectedHeatCommand)); + var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "file", buildSystem); Assert.Single(heatCommandLines); var warnings = result.Output.Where(line => line.Contains(": warning")); @@ -71,6 +71,7 @@ namespace WixToolsetTest.MSBuild } [Theory] + [InlineData(BuildSystem.DotNetCoreSdk)] [InlineData(BuildSystem.MSBuild)] [InlineData(BuildSystem.MSBuild64)] public void CanBuildHeatFileWithMultipleFilesPackage(BuildSystem buildSystem) @@ -88,9 +89,7 @@ namespace WixToolsetTest.MSBuild var result = MsbuildUtilities.BuildProject(buildSystem, projectPath); result.AssertSuccess(); - var expectedOutOfProc = false; - var expectedHeatCommand = $"{(expectedOutOfProc ? "heat.exe" : "(heat.exe)")} file"; - var heatCommandLines = result.Output.Where(line => line.Contains(expectedHeatCommand)); + var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "file", buildSystem); Assert.Equal(2, heatCommandLines.Count()); var warnings = result.Output.Where(line => line.Contains(": warning")); diff --git a/src/test/WixToolsetTest.MSBuild/MsbuildUtilities.cs b/src/test/WixToolsetTest.MSBuild/MsbuildUtilities.cs index 6a6f32e0..90c3194b 100644 --- a/src/test/WixToolsetTest.MSBuild/MsbuildUtilities.cs +++ b/src/test/WixToolsetTest.MSBuild/MsbuildUtilities.cs @@ -5,10 +5,12 @@ namespace WixToolsetTest.MSBuild using System; using System.Collections.Generic; using System.IO; + using System.Linq; using WixBuildTools.TestSupport; public enum BuildSystem { + DotNetCoreSdk, MSBuild, MSBuild64, } @@ -17,12 +19,13 @@ namespace WixToolsetTest.MSBuild { public static readonly string WixPropsPath = Path.Combine(new Uri(typeof(MsbuildUtilities).Assembly.CodeBase).AbsolutePath, "..", "..", "publish", "WixToolset.MSBuild", "build", "WixToolset.MSBuild.props"); - public static MsbuildRunnerResult BuildProject(BuildSystem buildSystem, string projectPath, string[] arguments = null, string configuration = "Release", bool? outOfProc = null) + public static MsbuildRunnerResult BuildProject(BuildSystem buildSystem, string projectPath, string[] arguments = null, string configuration = "Release", bool? outOfProc = null, string verbosityLevel = "normal") { var allArgs = new List { + $"-verbosity:{verbosityLevel}", $"-p:Configuration={configuration}", - $"-p:WixMSBuildProps={MsbuildUtilities.WixPropsPath}", + GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildUtilities.WixPropsPath), // Node reuse means that child msbuild processes can stay around after the build completes. // Under that scenario, the root msbuild does not reliably close its streams which causes us to hang. "-nr:false", @@ -40,6 +43,16 @@ namespace WixToolsetTest.MSBuild switch (buildSystem) { + case BuildSystem.DotNetCoreSdk: + { + allArgs.Add(projectPath); + var result = DotnetRunner.Execute("msbuild", allArgs.ToArray()); + return new MsbuildRunnerResult + { + ExitCode = result.ExitCode, + Output = result.StandardOutput, + }; + } case BuildSystem.MSBuild: case BuildSystem.MSBuild64: { @@ -51,5 +64,34 @@ namespace WixToolsetTest.MSBuild } } } + + public static string GetQuotedPropertySwitch(BuildSystem buildSystem, string propertyName, string valueToQuote) + { + switch (buildSystem) + { + case BuildSystem.DotNetCoreSdk: + { + return $"-p:{propertyName}=\\\"{valueToQuote}\\\""; + } + case BuildSystem.MSBuild: + case BuildSystem.MSBuild64: + { + return $"-p:{propertyName}=\"{valueToQuote}\""; + } + default: + { + throw new NotImplementedException(); + } + } + } + + public static IEnumerable GetToolCommandLines(MsbuildRunnerResult result, string toolName, string operation, BuildSystem buildSystem, bool? outOfProc = null) + { + var expectedOutOfProc = buildSystem == BuildSystem.DotNetCoreSdk || outOfProc.HasValue && outOfProc.Value; + var expectedToolExe = !expectedOutOfProc ? $"({toolName}.exe)" : + buildSystem == BuildSystem.DotNetCoreSdk ? $"{toolName}.dll\"" : $"{toolName}.exe"; + var expectedToolCommand = $"{expectedToolExe} {operation}"; + return result.Output.Where(line => line.Contains(expectedToolCommand)); + } } } -- cgit v1.2.3-55-g6feb