From 9bdf3730cd43e1af8a4ea9be6cf2fba77fcff2d2 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Thu, 1 Jul 2021 09:30:10 -0500 Subject: Add bundle option for command line variables to always be uppercase. Fixes #3777 --- .../test/WixToolsetTest.Bal/BalExtensionFixture.cs | 27 +++++++++++++++++++++- .../TestData/Overridable/Bundle.wxs | 2 +- .../TestData/Overridable/WrongCaseBundle.wxs | 13 +++++++++++ .../WixToolsetTest.Bal/WixToolsetTest.Bal.csproj | 6 +---- src/ext/Bal/wixext/BalBurnBackendExtension.cs | 21 +++++++++++++++++ src/ext/Bal/wixext/BalErrors.cs | 6 +++++ 6 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/WrongCaseBundle.wxs (limited to 'src/ext/Bal') diff --git a/src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs b/src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs index 2ff57c55..ef4ee49a 100644 --- a/src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs +++ b/src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs @@ -6,6 +6,7 @@ namespace WixToolsetTest.Bal using System.Linq; using System.Xml; using WixBuildTools.TestSupport; + using WixToolset.Bal; using WixToolset.Core.TestPackage; using Xunit; @@ -76,7 +77,7 @@ namespace WixToolsetTest.Bal var balOverridableVariables = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:WixStdbaOverridableVariable"); var balOverridableVariable = (XmlNode)Assert.Single(balOverridableVariables); - Assert.Equal("", balOverridableVariable.GetTestXml()); + Assert.Equal("", balOverridableVariable.GetTestXml()); } } @@ -129,5 +130,29 @@ namespace WixToolsetTest.Bal Assert.False(File.Exists(Path.Combine(intermediateFolder, "test.exe"))); } } + + [Fact] + public void CantBuildUsingOverridableWrongCase() + { + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var bundleFile = Path.Combine(baseFolder, "bin", "test.exe"); + var bundleSourceFolder = TestData.Get(@"TestData\Overridable"); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var baFolderPath = Path.Combine(baseFolder, "ba"); + var extractFolderPath = Path.Combine(baseFolder, "extract"); + + var compileResult = WixRunner.Execute(new[] + { + "build", + Path.Combine(bundleSourceFolder, "WrongCaseBundle.wxs"), + "-ext", TestData.Get(@"WixToolset.Bal.wixext.dll"), + "-intermediateFolder", intermediateFolder, + "-o", bundleFile, + }); + Assert.Equal((int)BalErrors.Ids.NonUpperCaseOverridableVariable, compileResult.ExitCode); + } + } } } diff --git a/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/Bundle.wxs b/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/Bundle.wxs index 91380c69..83e0d5b0 100644 --- a/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/Bundle.wxs +++ b/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/Bundle.wxs @@ -5,7 +5,7 @@ - + diff --git a/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/WrongCaseBundle.wxs b/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/WrongCaseBundle.wxs new file mode 100644 index 00000000..91380c69 --- /dev/null +++ b/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/WrongCaseBundle.wxs @@ -0,0 +1,13 @@ + + + + + + + + + + + + diff --git a/src/ext/Bal/test/WixToolsetTest.Bal/WixToolsetTest.Bal.csproj b/src/ext/Bal/test/WixToolsetTest.Bal/WixToolsetTest.Bal.csproj index f00a8eff..a59a4707 100644 --- a/src/ext/Bal/test/WixToolsetTest.Bal/WixToolsetTest.Bal.csproj +++ b/src/ext/Bal/test/WixToolsetTest.Bal/WixToolsetTest.Bal.csproj @@ -9,11 +9,7 @@ - - - - - + diff --git a/src/ext/Bal/wixext/BalBurnBackendExtension.cs b/src/ext/Bal/wixext/BalBurnBackendExtension.cs index c6a1e0c1..854b8b35 100644 --- a/src/ext/Bal/wixext/BalBurnBackendExtension.cs +++ b/src/ext/Bal/wixext/BalBurnBackendExtension.cs @@ -31,6 +31,8 @@ namespace WixToolset.Bal { base.SymbolsFinalized(section); + this.VerifyOverridableVariables(section); + var baSymbol = section.Symbols.OfType().SingleOrDefault(); var baId = baSymbol?.Id?.Id; if (null == baId) @@ -118,6 +120,25 @@ namespace WixToolset.Bal } } + private void VerifyOverridableVariables(IntermediateSection section) + { + var bundleSymbol = section.Symbols.OfType().Single(); + if (bundleSymbol.CommandLineVariables != WixBundleCommandLineVariables.UpperCase) + { + return; + } + + var overridableVariableSymbols = section.Symbols.OfType().ToList(); + foreach (var overridableVariableSymbol in overridableVariableSymbols) + { + var upperName = overridableVariableSymbol.Name.ToUpperInvariant(); + if (upperName != overridableVariableSymbol.Name) + { + this.Messaging.Write(BalErrors.NonUpperCaseOverridableVariable(overridableVariableSymbol.SourceLineNumbers, overridableVariableSymbol.Name, upperName)); + } + } + } + private void VerifyPrereqPackages(IntermediateSection section, bool isDNC) { var prereqInfoSymbols = section.Symbols.OfType().ToList(); diff --git a/src/ext/Bal/wixext/BalErrors.cs b/src/ext/Bal/wixext/BalErrors.cs index bc0186c1..e9f68b24 100644 --- a/src/ext/Bal/wixext/BalErrors.cs +++ b/src/ext/Bal/wixext/BalErrors.cs @@ -38,6 +38,11 @@ namespace WixToolset.Bal return Message(sourceLineNumbers, Ids.MultiplePrereqLicenses, "There may only be one package in the bundle that has either the PrereqLicenseFile attribute or the PrereqLicenseUrl attribute."); } + public static Message NonUpperCaseOverridableVariable(SourceLineNumber sourceLineNumbers, string name, string expectedName) + { + return Message(sourceLineNumbers, Ids.NonUpperCaseOverridableVariable, "Overridable variable '{0}' must be '{1}' with Bundle/@CommandLineVariables value 'upperCase'.", name, expectedName); + } + private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args) { return new Message(sourceLineNumber, MessageLevel.Error, (int)id, format, args); @@ -56,6 +61,7 @@ namespace WixToolset.Bal MultipleBAFunctions = 6804, BAFunctionsPayloadRequiredInUXContainer = 6805, MissingDNCPrereq = 6806, + NonUpperCaseOverridableVariable = 6807, } } } -- cgit v1.2.3-55-g6feb