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 | |
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.
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 | } | ||