From db22d99a4d603caab18fd42cb40881431c353912 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Tue, 15 Mar 2022 18:09:12 -0500 Subject: Enhance bundle backend validation. --- .../test/WixToolsetTest.Bal/BalExtensionFixture.cs | 22 +++++++++++++++++---- .../TestData/Overridable/WrongCaseBundle.wxl | 4 ++++ .../TestData/Overridable/WrongCaseBundle.wxs | 2 ++ src/ext/Bal/wixext/BalBurnBackendExtension.cs | 23 +++++++++++++++++++++- 4 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/WrongCaseBundle.wxl (limited to 'src/ext') diff --git a/src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs b/src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs index ef4ee49a..9aea8c1d 100644 --- a/src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs +++ b/src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs @@ -2,6 +2,7 @@ namespace WixToolsetTest.Bal { + using System; using System.IO; using System.Linq; using System.Xml; @@ -138,20 +139,33 @@ namespace WixToolsetTest.Bal { var baseFolder = fs.GetFolder(); var bundleFile = Path.Combine(baseFolder, "bin", "test.exe"); - var bundleSourceFolder = TestData.Get(@"TestData\Overridable"); + var bundleSourceFolder = TestData.Get(@"TestData"); var intermediateFolder = Path.Combine(baseFolder, "obj"); var baFolderPath = Path.Combine(baseFolder, "ba"); var extractFolderPath = Path.Combine(baseFolder, "extract"); - var compileResult = WixRunner.Execute(new[] + var result = WixRunner.Execute(new[] { "build", - Path.Combine(bundleSourceFolder, "WrongCaseBundle.wxs"), + Path.Combine(bundleSourceFolder, "Overridable", "WrongCaseBundle.wxs"), + "-loc", Path.Combine(bundleSourceFolder, "Overridable", "WrongCaseBundle.wxl"), + "-bindpath", Path.Combine(bundleSourceFolder, "WixStdBa", "Data"), "-ext", TestData.Get(@"WixToolset.Bal.wixext.dll"), "-intermediateFolder", intermediateFolder, "-o", bundleFile, }); - Assert.Equal((int)BalErrors.Ids.NonUpperCaseOverridableVariable, compileResult.ExitCode); + + Assert.InRange(result.ExitCode, 2, Int32.MaxValue); + + var messages = result.Messages.Select(m => m.ToString()).ToList(); + messages.Sort(); + + WixAssert.CompareLineByLine(new[] + { + "bal:Condition/@Condition contains the built-in Variable 'WixBundleAction', which is not available when it is evaluated. (Unavailable Variables are: 'WixBundleAction'.). Rewrite the condition to avoid Variables that are never valid during its evaluation.", + "Overridable variable 'Test1' must be 'TEST1' with Bundle/@CommandLineVariables value 'upperCase'.", + "The *Package/@bal:DisplayInternalUICondition attribute's value '=' is not a valid bundle condition.", + }, messages.ToArray()); } } } diff --git a/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/WrongCaseBundle.wxl b/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/WrongCaseBundle.wxl new file mode 100644 index 00000000..223a7874 --- /dev/null +++ b/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/WrongCaseBundle.wxl @@ -0,0 +1,4 @@ + + WixBundleAction = 4 + = + diff --git a/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/WrongCaseBundle.wxs b/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/WrongCaseBundle.wxs index 91380c69..547af644 100644 --- a/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/WrongCaseBundle.wxs +++ b/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/WrongCaseBundle.wxs @@ -8,6 +8,8 @@ + + diff --git a/src/ext/Bal/wixext/BalBurnBackendExtension.cs b/src/ext/Bal/wixext/BalBurnBackendExtension.cs index 854b8b35..3b19ae78 100644 --- a/src/ext/Bal/wixext/BalBurnBackendExtension.cs +++ b/src/ext/Bal/wixext/BalBurnBackendExtension.cs @@ -10,6 +10,7 @@ namespace WixToolset.Bal using WixToolset.Data.Burn; using WixToolset.Data.Symbols; using WixToolset.Extensibility; + using WixToolset.Extensibility.Data; public class BalBurnBackendExtension : BaseBurnBackendBinderExtension { @@ -31,6 +32,8 @@ namespace WixToolset.Bal { base.SymbolsFinalized(section); + this.VerifyBalConditions(section); + this.VerifyBalPackageInfos(section); this.VerifyOverridableVariables(section); var baSymbol = section.Symbols.OfType().SingleOrDefault(); @@ -100,7 +103,7 @@ namespace WixToolset.Bal { foreach (var payloadPropertiesSymbol in payloadPropertiesSymbols) { - if (string.Equals(payloadPropertiesSymbol.Name, "bafunctions.dll", StringComparison.OrdinalIgnoreCase) && + if (String.Equals(payloadPropertiesSymbol.Name, "bafunctions.dll", StringComparison.OrdinalIgnoreCase) && BurnConstants.BurnUXContainerName == payloadPropertiesSymbol.ContainerRef) { this.Messaging.Write(BalWarnings.UnmarkedBAFunctionsDLL(payloadPropertiesSymbol.SourceLineNumbers)); @@ -120,6 +123,24 @@ namespace WixToolset.Bal } } + private void VerifyBalConditions(IntermediateSection section) + { + var balConditionSymbols = section.Symbols.OfType().ToList(); + foreach (var balConditionSymbol in balConditionSymbols) + { + this.BackendHelper.ValidateBundleCondition(balConditionSymbol.SourceLineNumbers, "bal:Condition", "Condition", balConditionSymbol.Condition, BundleConditionPhase.Detect); + } + } + + private void VerifyBalPackageInfos(IntermediateSection section) + { + var balPackageInfoSymbols = section.Symbols.OfType().ToList(); + foreach (var balPackageInfoSymbol in balPackageInfoSymbols) + { + this.BackendHelper.ValidateBundleCondition(balPackageInfoSymbol.SourceLineNumbers, "*Package", "bal:DisplayInternalUICondition", balPackageInfoSymbol.DisplayInternalUICondition, BundleConditionPhase.Plan); + } + } + private void VerifyOverridableVariables(IntermediateSection section) { var bundleSymbol = section.Symbols.OfType().Single(); -- cgit v1.2.3-55-g6feb