aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-01-02 19:00:16 -0600
committerSean Hall <r.sean.hall@gmail.com>2021-01-03 15:49:32 -0600
commitb673734cce44dd28c1d4d1810da3069324466166 (patch)
treeada7f6d994a1dbcf09e8b30b95f7b2c403a0a7f6
parent643a5c5db1da6fb68fdc353bbbdbecaa1964425e (diff)
downloadwix-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.
-rw-r--r--src/WixToolset.Core.TestPackage/WixRunner.cs30
-rw-r--r--src/WixToolset.Core/CommandLine/BuildCommand.cs68
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs1
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs1
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs1
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/MsiTransactionFixture.cs2
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/PayloadFixture.cs2
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/PreprocessorFixture.cs2
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/WarningFixture.cs63
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
3namespace 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}