From 6bb2c3d5a2082c377a31bffe1bbdb950b5e15781 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Wed, 3 Jun 2020 14:01:28 +1000 Subject: Get the inner exception test working in the MSBuild test project. --- src/WixToolset.BuildTasks/ToolsetTask.cs | 18 +++++++-- .../WixBuildTaskFixture.cs | 43 ---------------------- .../WixToolsetTest.BuildTasks.csproj | 6 --- src/test/WixToolsetTest.MSBuild/MsbuildFixture.cs | 26 +++++++++++++ .../WixToolsetTest.MSBuild/MsbuildUtilities.cs | 3 +- 5 files changed, 43 insertions(+), 53 deletions(-) (limited to 'src') diff --git a/src/WixToolset.BuildTasks/ToolsetTask.cs b/src/WixToolset.BuildTasks/ToolsetTask.cs index 94d007f0..ae11254a 100644 --- a/src/WixToolset.BuildTasks/ToolsetTask.cs +++ b/src/WixToolset.BuildTasks/ToolsetTask.cs @@ -56,7 +56,19 @@ namespace WixToolset.BuildTasks /// public bool VerboseOutput { get; set; } - private string ToolFullPath => Path.Combine(Path.GetDirectoryName(ThisDllPath), this.ToolExe); + private string DefaultToolFullPath => Path.Combine(Path.GetDirectoryName(ThisDllPath), this.ToolExe); + + private string ToolFullPath + { + get + { + if (String.IsNullOrEmpty(this.ToolPath)) + { + return this.DefaultToolFullPath; + } + return Path.Combine(this.ToolPath, this.ToolExe); + } + } /// /// Get the path to the executable. @@ -74,9 +86,9 @@ namespace WixToolset.BuildTasks // We need to return a path that exists, so if we're not actually going to run the tool then just return this dll path. return ThisDllPath; } - return this.ToolFullPath; + return this.DefaultToolFullPath; #else - if (IsSelfExecutable(this.ToolFullPath, out var toolFullPath)) + if (IsSelfExecutable(this.DefaultToolFullPath, out var toolFullPath)) { return toolFullPath; } diff --git a/src/test/WixToolsetTest.BuildTasks/WixBuildTaskFixture.cs b/src/test/WixToolsetTest.BuildTasks/WixBuildTaskFixture.cs index 92033766..cd41f16e 100644 --- a/src/test/WixToolsetTest.BuildTasks/WixBuildTaskFixture.cs +++ b/src/test/WixToolsetTest.BuildTasks/WixBuildTaskFixture.cs @@ -62,48 +62,5 @@ namespace WixToolsetTest.BuildTasks Assert.Equal(@"test.txt", fileTuple[FileTupleFields.Source].PreviousValue.AsPath().Path); } } - - [Fact(Skip = "Requires deleting wixnative.exe from output folder after build but before running the test.")] - public void ReportsInnerExceptionForUnexpectedExceptions() - { - var folder = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage"); - - using (var fs = new DisposableFileSystem()) - { - var baseFolder = fs.GetFolder(); - var intermediateFolder = Path.Combine(baseFolder, "obj"); - var pdbPath = Path.Combine(baseFolder, @"bin\testpackage.wixpdb"); - var engine = new FakeBuildEngine(); - - var task = new WixBuild - { - BuildEngine = engine, - SourceFiles = new[] - { - new TaskItem(Path.Combine(folder, "Package.wxs")), - new TaskItem(Path.Combine(folder, "PackageComponents.wxs")), - }, - LocalizationFiles = new[] - { - new TaskItem(Path.Combine(folder, "Package.en-us.wxl")), - }, - BindInputPaths = new[] - { - new TaskItem(Path.Combine(folder, "data")), - }, - IntermediateDirectory = new TaskItem(intermediateFolder), - OutputFile = new TaskItem(Path.Combine(baseFolder, @"bin\test.msi")), - PdbType = "Full", - PdbFile = new TaskItem(pdbPath), - }; - - var result = task.Execute(); - Assert.False(result, $"MSBuild task succeeded unexpectedly. Output:\r\n{engine.Output}"); - - Assert.Contains( - "System.PlatformNotSupportedException: Could not find platform specific 'wixnative.exe' ---> System.IO.FileNotFoundException: Could not find internal piece of WiX Toolset from", - engine.Output); - } - } } } diff --git a/src/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj b/src/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj index 22d421de..bfcc10ad 100644 --- a/src/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj +++ b/src/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj @@ -16,12 +16,6 @@ - - - - - - diff --git a/src/test/WixToolsetTest.MSBuild/MsbuildFixture.cs b/src/test/WixToolsetTest.MSBuild/MsbuildFixture.cs index 71255165..163e8402 100644 --- a/src/test/WixToolsetTest.MSBuild/MsbuildFixture.cs +++ b/src/test/WixToolsetTest.MSBuild/MsbuildFixture.cs @@ -378,5 +378,31 @@ namespace WixToolsetTest.MSBuild Assert.Empty(remainingPaths); } } + + [Theory] + [InlineData(BuildSystem.DotNetCoreSdk)] + [InlineData(BuildSystem.MSBuild)] + [InlineData(BuildSystem.MSBuild64)] + public void ReportsInnerExceptionForUnexpectedExceptions(BuildSystem buildSystem) + { + var sourceFolder = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage"); + + using (var fs = new TestDataFolderFileSystem()) + { + fs.Initialize(sourceFolder); + var baseFolder = fs.BaseFolder; + var binFolder = Path.Combine(baseFolder, @"bin\"); + var projectPath = Path.Combine(baseFolder, "MsiPackage.wixproj"); + + var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] + { + MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixToolDir", Path.Combine(MsbuildUtilities.WixMsbuildPath, "broken", "net461")), + }, outOfProc: true); + Assert.Equal(1, result.ExitCode); + + var expectedMessage = "System.PlatformNotSupportedException: Could not find platform specific 'wixnative.exe' ---> System.IO.FileNotFoundException: Could not find internal piece of WiX Toolset from"; + Assert.Contains(result.Output, m => m.Contains(expectedMessage)); + } + } } } diff --git a/src/test/WixToolsetTest.MSBuild/MsbuildUtilities.cs b/src/test/WixToolsetTest.MSBuild/MsbuildUtilities.cs index 90c3194b..fead4915 100644 --- a/src/test/WixToolsetTest.MSBuild/MsbuildUtilities.cs +++ b/src/test/WixToolsetTest.MSBuild/MsbuildUtilities.cs @@ -17,7 +17,8 @@ namespace WixToolsetTest.MSBuild public static class MsbuildUtilities { - public static readonly string WixPropsPath = Path.Combine(new Uri(typeof(MsbuildUtilities).Assembly.CodeBase).AbsolutePath, "..", "..", "publish", "WixToolset.MSBuild", "build", "WixToolset.MSBuild.props"); + public static readonly string WixMsbuildPath = Path.Combine(new Uri(typeof(MsbuildUtilities).Assembly.CodeBase).AbsolutePath, "..", "..", "publish", "WixToolset.MSBuild"); + public static readonly string WixPropsPath = Path.Combine(WixMsbuildPath, "build", "WixToolset.MSBuild.props"); public static MsbuildRunnerResult BuildProject(BuildSystem buildSystem, string projectPath, string[] arguments = null, string configuration = "Release", bool? outOfProc = null, string verbosityLevel = "normal") { -- cgit v1.2.3-55-g6feb