diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2021-01-02 19:00:16 -0600 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2021-01-03 15:49:32 -0600 |
| commit | b673734cce44dd28c1d4d1810da3069324466166 (patch) | |
| tree | ada7f6d994a1dbcf09e8b30b95f7b2c403a0a7f6 /src | |
| parent | 643a5c5db1da6fb68fdc353bbbdbecaa1964425e (diff) | |
| download | wix-b673734cce44dd28c1d4d1810da3069324466166.tar.gz wix-b673734cce44dd28c1d4d1810da3069324466166.tar.bz2 wix-b673734cce44dd28c1d4d1810da3069324466166.zip | |
Implement command line for SuppressAllWarnings and WarningsAsError.
Make WixRunner.Execute default to setting WarningsAsError to make sure tests are not accidentally causing warnings.
Diffstat (limited to 'src')
9 files changed, 150 insertions, 20 deletions
diff --git a/src/WixToolset.Core.TestPackage/WixRunner.cs b/src/WixToolset.Core.TestPackage/WixRunner.cs index a3883cd5..ed7c49b8 100644 --- a/src/WixToolset.Core.TestPackage/WixRunner.cs +++ b/src/WixToolset.Core.TestPackage/WixRunner.cs | |||
| @@ -21,23 +21,36 @@ namespace WixToolset.Core.TestPackage | |||
| 21 | /// </summary> | 21 | /// </summary> |
| 22 | /// <param name="args"></param> | 22 | /// <param name="args"></param> |
| 23 | /// <param name="messages"></param> | 23 | /// <param name="messages"></param> |
| 24 | /// <param name="warningsAsErrors"></param> | ||
| 24 | /// <returns></returns> | 25 | /// <returns></returns> |
| 25 | public static int Execute(string[] args, out List<Message> messages) | 26 | public static int Execute(string[] args, out List<Message> messages, bool warningsAsErrors = true) |
| 26 | { | 27 | { |
| 27 | var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider(); | 28 | var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider(); |
| 28 | var task = Execute(args, serviceProvider, out messages); | 29 | var task = Execute(args, serviceProvider, out messages, warningsAsErrors: warningsAsErrors); |
| 29 | return task.Result; | 30 | return task.Result; |
| 30 | } | 31 | } |
| 31 | 32 | ||
| 32 | /// <summary> | 33 | /// <summary> |
| 33 | /// Emulates calling wix.exe with standard backends. | 34 | /// Emulates calling wix.exe with standard backends. |
| 35 | /// This overload always treats warnings as errors. | ||
| 34 | /// </summary> | 36 | /// </summary> |
| 35 | /// <param name="args"></param> | 37 | /// <param name="args"></param> |
| 36 | /// <returns></returns> | 38 | /// <returns></returns> |
| 37 | public static WixRunnerResult Execute(params string[] args) | 39 | public static WixRunnerResult Execute(params string[] args) |
| 38 | { | 40 | { |
| 41 | return Execute(true, args); | ||
| 42 | } | ||
| 43 | |||
| 44 | /// <summary> | ||
| 45 | /// Emulates calling wix.exe with standard backends. | ||
| 46 | /// </summary> | ||
| 47 | /// <param name="warningsAsErrors"></param> | ||
| 48 | /// <param name="args"></param> | ||
| 49 | /// <returns></returns> | ||
| 50 | public static WixRunnerResult Execute(bool warningsAsErrors, params string[] args) | ||
| 51 | { | ||
| 39 | var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider(); | 52 | var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider(); |
| 40 | var exitCode = Execute(args, serviceProvider, out var messages); | 53 | var exitCode = Execute(args, serviceProvider, out var messages, warningsAsErrors: warningsAsErrors); |
| 41 | return new WixRunnerResult { ExitCode = exitCode.Result, Messages = messages.ToArray() }; | 54 | return new WixRunnerResult { ExitCode = exitCode.Result, Messages = messages.ToArray() }; |
| 42 | } | 55 | } |
| 43 | 56 | ||
| @@ -47,8 +60,9 @@ namespace WixToolset.Core.TestPackage | |||
| 47 | /// <param name="args"></param> | 60 | /// <param name="args"></param> |
| 48 | /// <param name="coreProvider"></param> | 61 | /// <param name="coreProvider"></param> |
| 49 | /// <param name="messages"></param> | 62 | /// <param name="messages"></param> |
| 63 | /// <param name="warningsAsErrors"></param> | ||
| 50 | /// <returns></returns> | 64 | /// <returns></returns> |
| 51 | public static Task<int> Execute(string[] args, IWixToolsetCoreServiceProvider coreProvider, out List<Message> messages) | 65 | public static Task<int> Execute(string[] args, IWixToolsetCoreServiceProvider coreProvider, out List<Message> messages, bool warningsAsErrors = true) |
| 52 | { | 66 | { |
| 53 | coreProvider.AddWindowsInstallerBackend() | 67 | coreProvider.AddWindowsInstallerBackend() |
| 54 | .AddBundleBackend(); | 68 | .AddBundleBackend(); |
| @@ -60,8 +74,14 @@ namespace WixToolset.Core.TestPackage | |||
| 60 | var messaging = coreProvider.GetService<IMessaging>(); | 74 | var messaging = coreProvider.GetService<IMessaging>(); |
| 61 | messaging.SetListener(listener); | 75 | messaging.SetListener(listener); |
| 62 | 76 | ||
| 77 | var arguments = new List<string>(args); | ||
| 78 | if (warningsAsErrors) | ||
| 79 | { | ||
| 80 | arguments.Add("-wx"); | ||
| 81 | } | ||
| 82 | |||
| 63 | var commandLine = coreProvider.GetService<ICommandLine>(); | 83 | var commandLine = coreProvider.GetService<ICommandLine>(); |
| 64 | var command = commandLine.CreateCommand(args); | 84 | var command = commandLine.CreateCommand(arguments.ToArray()); |
| 65 | return command?.ExecuteAsync(CancellationToken.None) ?? Task.FromResult(1); | 85 | return command?.ExecuteAsync(CancellationToken.None) ?? Task.FromResult(1); |
| 66 | } | 86 | } |
| 67 | } | 87 | } |
diff --git a/src/WixToolset.Core/CommandLine/BuildCommand.cs b/src/WixToolset.Core/CommandLine/BuildCommand.cs index 4064a23c..072accc3 100644 --- a/src/WixToolset.Core/CommandLine/BuildCommand.cs +++ b/src/WixToolset.Core/CommandLine/BuildCommand.cs | |||
| @@ -549,8 +549,8 @@ namespace WixToolset.Core.CommandLine | |||
| 549 | { | 549 | { |
| 550 | if (parser.IsSwitch(arg)) | 550 | if (parser.IsSwitch(arg)) |
| 551 | { | 551 | { |
| 552 | var parameter = arg.Substring(1); | 552 | var parameter = arg.Substring(1).ToLowerInvariant(); |
| 553 | switch (parameter.ToLowerInvariant()) | 553 | switch (parameter) |
| 554 | { | 554 | { |
| 555 | case "?": | 555 | case "?": |
| 556 | case "h": | 556 | case "h": |
| @@ -583,7 +583,7 @@ namespace WixToolset.Core.CommandLine | |||
| 583 | this.BindPaths.Add(bindPath); | 583 | this.BindPaths.Add(bindPath); |
| 584 | return true; | 584 | return true; |
| 585 | } | 585 | } |
| 586 | break; | 586 | return false; |
| 587 | } | 587 | } |
| 588 | 588 | ||
| 589 | case "cc": | 589 | case "cc": |
| @@ -649,7 +649,7 @@ namespace WixToolset.Core.CommandLine | |||
| 649 | this.PdbType = pdbType; | 649 | this.PdbType = pdbType; |
| 650 | return true; | 650 | return true; |
| 651 | } | 651 | } |
| 652 | break; | 652 | return false; |
| 653 | } | 653 | } |
| 654 | 654 | ||
| 655 | case "nologo": | 655 | case "nologo": |
| @@ -664,16 +664,22 @@ namespace WixToolset.Core.CommandLine | |||
| 664 | case "sval": | 664 | case "sval": |
| 665 | // todo: implement | 665 | // todo: implement |
| 666 | return true; | 666 | return true; |
| 667 | } | ||
| 667 | 668 | ||
| 668 | case "sw": | 669 | if (parameter.StartsWith("sw")) |
| 669 | case "suppresswarning": | 670 | { |
| 670 | var warning = parser.GetNextArgumentOrError(arg); | 671 | this.ParseSuppressWarning(parameter, "sw".Length, parser); |
| 671 | if (!String.IsNullOrEmpty(warning)) | 672 | return true; |
| 672 | { | 673 | } |
| 673 | var warningNumber = Convert.ToInt32(warning); | 674 | else if (parameter.StartsWith("suppresswarning")) |
| 674 | this.Messaging.SuppressWarningMessage(warningNumber); | 675 | { |
| 675 | } | 676 | this.ParseSuppressWarning(parameter, "suppresswarning".Length, parser); |
| 676 | return true; | 677 | return true; |
| 678 | } | ||
| 679 | else if (parameter.StartsWith("wx")) | ||
| 680 | { | ||
| 681 | this.ParseWarningAsError(parameter, "wx".Length, parser); | ||
| 682 | return true; | ||
| 677 | } | 683 | } |
| 678 | 684 | ||
| 679 | return false; | 685 | return false; |
| @@ -821,6 +827,42 @@ namespace WixToolset.Core.CommandLine | |||
| 821 | 827 | ||
| 822 | return true; | 828 | return true; |
| 823 | } | 829 | } |
| 830 | |||
| 831 | private void ParseSuppressWarning(string parameter, int offset, ICommandLineParser parser) | ||
| 832 | { | ||
| 833 | var paramArg = parameter.Substring(offset); | ||
| 834 | if (paramArg.Length == 0) | ||
| 835 | { | ||
| 836 | this.Messaging.SuppressAllWarnings = true; | ||
| 837 | } | ||
| 838 | else if (Int32.TryParse(paramArg, out var suppressWarning) && suppressWarning > 0) | ||
| 839 | { | ||
| 840 | this.Messaging.SuppressWarningMessage(suppressWarning); | ||
| 841 | } | ||
| 842 | else | ||
| 843 | { | ||
| 844 | this.Messaging.Write(ErrorMessages.IllegalSuppressWarningId(paramArg)); | ||
| 845 | parser.ErrorArgument = parameter; | ||
| 846 | } | ||
| 847 | } | ||
| 848 | |||
| 849 | private void ParseWarningAsError(string parameter, int offset, ICommandLineParser parser) | ||
| 850 | { | ||
| 851 | var paramArg = parameter.Substring(offset); | ||
| 852 | if (paramArg.Length == 0) | ||
| 853 | { | ||
| 854 | this.Messaging.WarningsAsError = true; | ||
| 855 | } | ||
| 856 | else if (Int32.TryParse(paramArg, out var elevateWarning) && elevateWarning > 0) | ||
| 857 | { | ||
| 858 | this.Messaging.SuppressWarningMessage(elevateWarning); | ||
| 859 | } | ||
| 860 | else | ||
| 861 | { | ||
| 862 | this.Messaging.Write(ErrorMessages.IllegalSuppressWarningId(paramArg)); | ||
| 863 | parser.ErrorArgument = parameter; | ||
| 864 | } | ||
| 865 | } | ||
| 824 | } | 866 | } |
| 825 | } | 867 | } |
| 826 | } | 868 | } |
diff --git a/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs b/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs index 5e08ca58..d85eb3bf 100644 --- a/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs | |||
| @@ -55,6 +55,7 @@ namespace WixToolsetTest.CoreIntegration | |||
| 55 | var result = WixRunner.Execute(new[] | 55 | var result = WixRunner.Execute(new[] |
| 56 | { | 56 | { |
| 57 | "build", | 57 | "build", |
| 58 | "-sw1008", // this is expected for this test | ||
| 58 | Path.Combine(folder, "Package.wxs"), | 59 | Path.Combine(folder, "Package.wxs"), |
| 59 | Path.Combine(folder, "PackageComponents.wxs"), | 60 | Path.Combine(folder, "PackageComponents.wxs"), |
| 60 | "-loc", Path.Combine(folder, "Package.en-us.wxl"), | 61 | "-loc", Path.Combine(folder, "Package.en-us.wxl"), |
diff --git a/src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs b/src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs index 740d58c7..e26e197f 100644 --- a/src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs | |||
| @@ -162,6 +162,7 @@ namespace WixToolsetTest.CoreIntegration | |||
| 162 | var result = WixRunner.Execute(new[] | 162 | var result = WixRunner.Execute(new[] |
| 163 | { | 163 | { |
| 164 | "build", | 164 | "build", |
| 165 | "-sw1079", // TODO: why does this test need to create a second cab which is empty? | ||
| 165 | Path.Combine(folder, "Package.wxs"), | 166 | Path.Combine(folder, "Package.wxs"), |
| 166 | Path.Combine(folder, "PackageComponents.wxs"), | 167 | Path.Combine(folder, "PackageComponents.wxs"), |
| 167 | "-loc", Path.Combine(folder, "Package.en-us.wxl"), | 168 | "-loc", Path.Combine(folder, "Package.en-us.wxl"), |
diff --git a/src/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs b/src/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs index 11b1703c..b71b62cb 100644 --- a/src/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs | |||
| @@ -357,6 +357,7 @@ namespace WixToolsetTest.CoreIntegration | |||
| 357 | var result = WixRunner.Execute(new[] | 357 | var result = WixRunner.Execute(new[] |
| 358 | { | 358 | { |
| 359 | "build", | 359 | "build", |
| 360 | "-sw1031", // this is expected for this test | ||
| 360 | Path.Combine(folder, "DefaultDir", "DefaultDir.wxs"), | 361 | Path.Combine(folder, "DefaultDir", "DefaultDir.wxs"), |
| 361 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | 362 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), |
| 362 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | 363 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), |
diff --git a/src/test/WixToolsetTest.CoreIntegration/MsiTransactionFixture.cs b/src/test/WixToolsetTest.CoreIntegration/MsiTransactionFixture.cs index 5a29eb9e..7ec0ea93 100644 --- a/src/test/WixToolsetTest.CoreIntegration/MsiTransactionFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/MsiTransactionFixture.cs | |||
| @@ -26,6 +26,7 @@ namespace WixToolsetTest.CoreIntegration | |||
| 26 | var result = WixRunner.Execute(new[] | 26 | var result = WixRunner.Execute(new[] |
| 27 | { | 27 | { |
| 28 | "build", | 28 | "build", |
| 29 | "-sw1151", // this is expected for this test | ||
| 29 | Path.Combine(folder, "MsiTransaction", "X64AfterX86Bundle.wxs"), | 30 | Path.Combine(folder, "MsiTransaction", "X64AfterX86Bundle.wxs"), |
| 30 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), | 31 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), |
| 31 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), | 32 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), |
| @@ -55,6 +56,7 @@ namespace WixToolsetTest.CoreIntegration | |||
| 55 | var result = WixRunner.Execute(new[] | 56 | var result = WixRunner.Execute(new[] |
| 56 | { | 57 | { |
| 57 | "build", | 58 | "build", |
| 59 | "-sw1151", // this is expected for this test | ||
| 58 | Path.Combine(folder, "MsiTransaction", "X86AfterX64Bundle.wxs"), | 60 | Path.Combine(folder, "MsiTransaction", "X86AfterX64Bundle.wxs"), |
| 59 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), | 61 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), |
| 60 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), | 62 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), |
diff --git a/src/test/WixToolsetTest.CoreIntegration/PayloadFixture.cs b/src/test/WixToolsetTest.CoreIntegration/PayloadFixture.cs index 4a9344b9..4fc57c76 100644 --- a/src/test/WixToolsetTest.CoreIntegration/PayloadFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/PayloadFixture.cs | |||
| @@ -61,7 +61,7 @@ namespace WixToolsetTest.CoreIntegration | |||
| 61 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | 61 | var intermediateFolder = Path.Combine(baseFolder, "obj"); |
| 62 | var wixlibPath = Path.Combine(intermediateFolder, @"test.wixlib"); | 62 | var wixlibPath = Path.Combine(intermediateFolder, @"test.wixlib"); |
| 63 | 63 | ||
| 64 | var result = WixRunner.Execute(new[] | 64 | var result = WixRunner.Execute(warningsAsErrors: false, new[] |
| 65 | { | 65 | { |
| 66 | "build", | 66 | "build", |
| 67 | Path.Combine(folder, "CanonicalizeName.wxs"), | 67 | Path.Combine(folder, "CanonicalizeName.wxs"), |
diff --git a/src/test/WixToolsetTest.CoreIntegration/PreprocessorFixture.cs b/src/test/WixToolsetTest.CoreIntegration/PreprocessorFixture.cs index e18990d3..a6504cb9 100644 --- a/src/test/WixToolsetTest.CoreIntegration/PreprocessorFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/PreprocessorFixture.cs | |||
| @@ -49,7 +49,7 @@ namespace WixToolsetTest.CoreIntegration | |||
| 49 | var baseFolder = fs.GetFolder(); | 49 | var baseFolder = fs.GetFolder(); |
| 50 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | 50 | var intermediateFolder = Path.Combine(baseFolder, "obj"); |
| 51 | 51 | ||
| 52 | var result = WixRunner.Execute(new[] | 52 | var result = WixRunner.Execute(warningsAsErrors: false, new[] |
| 53 | { | 53 | { |
| 54 | "build", | 54 | "build", |
| 55 | Path.Combine(folder, "Package.wxs"), | 55 | Path.Combine(folder, "Package.wxs"), |
diff --git a/src/test/WixToolsetTest.CoreIntegration/WarningFixture.cs b/src/test/WixToolsetTest.CoreIntegration/WarningFixture.cs new file mode 100644 index 00000000..c5b6c261 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/WarningFixture.cs | |||
| @@ -0,0 +1,63 @@ | |||
| 1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | ||
| 2 | |||
| 3 | namespace WixToolsetTest.CoreIntegration | ||
| 4 | { | ||
| 5 | using System.IO; | ||
| 6 | using WixBuildTools.TestSupport; | ||
| 7 | using WixToolset.Core.TestPackage; | ||
| 8 | using WixToolset.Data; | ||
| 9 | using Xunit; | ||
| 10 | |||
| 11 | public class WarningFixture | ||
| 12 | { | ||
| 13 | [Fact] | ||
| 14 | public void SuppressedWarningsWithWarningAsErrorsAreNotErrors() | ||
| 15 | { | ||
| 16 | var folder = TestData.Get(@"TestData\Payload"); | ||
| 17 | |||
| 18 | using (var fs = new DisposableFileSystem()) | ||
| 19 | { | ||
| 20 | var baseFolder = fs.GetFolder(); | ||
| 21 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
| 22 | var wixlibPath = Path.Combine(intermediateFolder, @"test.wixlib"); | ||
| 23 | |||
| 24 | var result = WixRunner.Execute(warningsAsErrors: true, new[] | ||
| 25 | { | ||
| 26 | "build", | ||
| 27 | "-sw1152", | ||
| 28 | Path.Combine(folder, "CanonicalizeName.wxs"), | ||
| 29 | "-intermediateFolder", intermediateFolder, | ||
| 30 | "-o", wixlibPath, | ||
| 31 | }); | ||
| 32 | |||
| 33 | result.AssertSuccess(); | ||
| 34 | } | ||
| 35 | } | ||
| 36 | |||
| 37 | [Fact] | ||
| 38 | public void WarningsAsErrorsTreatsWarningsAsErrors() | ||
| 39 | { | ||
| 40 | var folder = TestData.Get(@"TestData\Payload"); | ||
| 41 | |||
| 42 | using (var fs = new DisposableFileSystem()) | ||
| 43 | { | ||
| 44 | var baseFolder = fs.GetFolder(); | ||
| 45 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
| 46 | var wixlibPath = Path.Combine(intermediateFolder, @"test.wixlib"); | ||
| 47 | |||
| 48 | var result = WixRunner.Execute(warningsAsErrors: true, new[] | ||
| 49 | { | ||
| 50 | "build", | ||
| 51 | Path.Combine(folder, "CanonicalizeName.wxs"), | ||
| 52 | "-intermediateFolder", intermediateFolder, | ||
| 53 | "-o", wixlibPath, | ||
| 54 | }); | ||
| 55 | |||
| 56 | Assert.Equal((int)WarningMessages.Ids.PathCanonicalized, result.ExitCode); | ||
| 57 | |||
| 58 | var message = Assert.Single(result.Messages); | ||
| 59 | Assert.Equal(MessageLevel.Warning, message.Level); // TODO: is this right? | ||
| 60 | } | ||
| 61 | } | ||
| 62 | } | ||
| 63 | } | ||
