diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2021-07-01 09:30:10 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2021-07-02 12:50:09 -0500 |
| commit | 9bdf3730cd43e1af8a4ea9be6cf2fba77fcff2d2 (patch) | |
| tree | ea2a05de5a8a1dfcb2af8e9e3805fe015729f66a /src/ext/Bal | |
| parent | 8cbfc326cccf8d9b3b63cb6f752fc770f7dee0fc (diff) | |
| download | wix-9bdf3730cd43e1af8a4ea9be6cf2fba77fcff2d2.tar.gz wix-9bdf3730cd43e1af8a4ea9be6cf2fba77fcff2d2.tar.bz2 wix-9bdf3730cd43e1af8a4ea9be6cf2fba77fcff2d2.zip | |
Add bundle option for command line variables to always be uppercase.
Fixes #3777
Diffstat (limited to 'src/ext/Bal')
6 files changed, 68 insertions, 7 deletions
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 | |||
| 6 | using System.Linq; | 6 | using System.Linq; |
| 7 | using System.Xml; | 7 | using System.Xml; |
| 8 | using WixBuildTools.TestSupport; | 8 | using WixBuildTools.TestSupport; |
| 9 | using WixToolset.Bal; | ||
| 9 | using WixToolset.Core.TestPackage; | 10 | using WixToolset.Core.TestPackage; |
| 10 | using Xunit; | 11 | using Xunit; |
| 11 | 12 | ||
| @@ -76,7 +77,7 @@ namespace WixToolsetTest.Bal | |||
| 76 | 77 | ||
| 77 | var balOverridableVariables = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:WixStdbaOverridableVariable"); | 78 | var balOverridableVariables = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:WixStdbaOverridableVariable"); |
| 78 | var balOverridableVariable = (XmlNode)Assert.Single(balOverridableVariables); | 79 | var balOverridableVariable = (XmlNode)Assert.Single(balOverridableVariables); |
| 79 | Assert.Equal("<WixStdbaOverridableVariable Name='Test1' />", balOverridableVariable.GetTestXml()); | 80 | Assert.Equal("<WixStdbaOverridableVariable Name='TEST1' />", balOverridableVariable.GetTestXml()); |
| 80 | } | 81 | } |
| 81 | } | 82 | } |
| 82 | 83 | ||
| @@ -129,5 +130,29 @@ namespace WixToolsetTest.Bal | |||
| 129 | Assert.False(File.Exists(Path.Combine(intermediateFolder, "test.exe"))); | 130 | Assert.False(File.Exists(Path.Combine(intermediateFolder, "test.exe"))); |
| 130 | } | 131 | } |
| 131 | } | 132 | } |
| 133 | |||
| 134 | [Fact] | ||
| 135 | public void CantBuildUsingOverridableWrongCase() | ||
| 136 | { | ||
| 137 | using (var fs = new DisposableFileSystem()) | ||
| 138 | { | ||
| 139 | var baseFolder = fs.GetFolder(); | ||
| 140 | var bundleFile = Path.Combine(baseFolder, "bin", "test.exe"); | ||
| 141 | var bundleSourceFolder = TestData.Get(@"TestData\Overridable"); | ||
| 142 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
| 143 | var baFolderPath = Path.Combine(baseFolder, "ba"); | ||
| 144 | var extractFolderPath = Path.Combine(baseFolder, "extract"); | ||
| 145 | |||
| 146 | var compileResult = WixRunner.Execute(new[] | ||
| 147 | { | ||
| 148 | "build", | ||
| 149 | Path.Combine(bundleSourceFolder, "WrongCaseBundle.wxs"), | ||
| 150 | "-ext", TestData.Get(@"WixToolset.Bal.wixext.dll"), | ||
| 151 | "-intermediateFolder", intermediateFolder, | ||
| 152 | "-o", bundleFile, | ||
| 153 | }); | ||
| 154 | Assert.Equal((int)BalErrors.Ids.NonUpperCaseOverridableVariable, compileResult.ExitCode); | ||
| 155 | } | ||
| 156 | } | ||
| 132 | } | 157 | } |
| 133 | } | 158 | } |
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 @@ | |||
| 5 | <BootstrapperApplication> | 5 | <BootstrapperApplication> |
| 6 | <bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" /> | 6 | <bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" /> |
| 7 | </BootstrapperApplication> | 7 | </BootstrapperApplication> |
| 8 | <Variable Name="Test1" bal:Overridable="yes" /> | 8 | <Variable Name="TEST1" bal:Overridable="yes" /> |
| 9 | <Chain> | 9 | <Chain> |
| 10 | <ExePackage Permanent="yes" DetectCondition="none" SourceFile="runtimes\win-x86\native\wixnative.exe" /> | 10 | <ExePackage Permanent="yes" DetectCondition="none" SourceFile="runtimes\win-x86\native\wixnative.exe" /> |
| 11 | </Chain> | 11 | </Chain> |
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 @@ | |||
| 1 | <?xml version="1.0" encoding="utf-8"?> | ||
| 2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" | ||
| 3 | xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal"> | ||
| 4 | <Bundle Name="WixStdBa" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="75D5D534-E177-4689-AAE9-CAC1C39002C2"> | ||
| 5 | <BootstrapperApplication> | ||
| 6 | <bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" /> | ||
| 7 | </BootstrapperApplication> | ||
| 8 | <Variable Name="Test1" bal:Overridable="yes" /> | ||
| 9 | <Chain> | ||
| 10 | <ExePackage Permanent="yes" DetectCondition="none" SourceFile="runtimes\win-x86\native\wixnative.exe" /> | ||
| 11 | </Chain> | ||
| 12 | </Bundle> | ||
| 13 | </Wix> | ||
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 @@ | |||
| 9 | </PropertyGroup> | 9 | </PropertyGroup> |
| 10 | 10 | ||
| 11 | <ItemGroup> | 11 | <ItemGroup> |
| 12 | <Content Include="TestData\MBA\Bundle.wxs" CopyToOutputDirectory="PreserveNewest" /> | 12 | <Content Include="TestData\**" CopyToOutputDirectory="PreserveNewest" /> |
| 13 | <Content Include="TestData\Overridable\Bundle.wxs" CopyToOutputDirectory="PreserveNewest" /> | ||
| 14 | <Content Include="TestData\WixStdBa\Bundle.wxs" CopyToOutputDirectory="PreserveNewest" /> | ||
| 15 | <Content Include="TestData\WixStdBa\Data\test.msi" CopyToOutputDirectory="PreserveNewest" /> | ||
| 16 | <Content Include="TestData\WixStdBa\DisplayInternalUIConditionBundle.wxs" CopyToOutputDirectory="PreserveNewest" /> | ||
| 17 | </ItemGroup> | 13 | </ItemGroup> |
| 18 | 14 | ||
| 19 | <Target Name="CopyExtensions" AfterTargets="Build"> | 15 | <Target Name="CopyExtensions" AfterTargets="Build"> |
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 | |||
| 31 | { | 31 | { |
| 32 | base.SymbolsFinalized(section); | 32 | base.SymbolsFinalized(section); |
| 33 | 33 | ||
| 34 | this.VerifyOverridableVariables(section); | ||
| 35 | |||
| 34 | var baSymbol = section.Symbols.OfType<WixBootstrapperApplicationDllSymbol>().SingleOrDefault(); | 36 | var baSymbol = section.Symbols.OfType<WixBootstrapperApplicationDllSymbol>().SingleOrDefault(); |
| 35 | var baId = baSymbol?.Id?.Id; | 37 | var baId = baSymbol?.Id?.Id; |
| 36 | if (null == baId) | 38 | if (null == baId) |
| @@ -118,6 +120,25 @@ namespace WixToolset.Bal | |||
| 118 | } | 120 | } |
| 119 | } | 121 | } |
| 120 | 122 | ||
| 123 | private void VerifyOverridableVariables(IntermediateSection section) | ||
| 124 | { | ||
| 125 | var bundleSymbol = section.Symbols.OfType<WixBundleSymbol>().Single(); | ||
| 126 | if (bundleSymbol.CommandLineVariables != WixBundleCommandLineVariables.UpperCase) | ||
| 127 | { | ||
| 128 | return; | ||
| 129 | } | ||
| 130 | |||
| 131 | var overridableVariableSymbols = section.Symbols.OfType<WixStdbaOverridableVariableSymbol>().ToList(); | ||
| 132 | foreach (var overridableVariableSymbol in overridableVariableSymbols) | ||
| 133 | { | ||
| 134 | var upperName = overridableVariableSymbol.Name.ToUpperInvariant(); | ||
| 135 | if (upperName != overridableVariableSymbol.Name) | ||
| 136 | { | ||
| 137 | this.Messaging.Write(BalErrors.NonUpperCaseOverridableVariable(overridableVariableSymbol.SourceLineNumbers, overridableVariableSymbol.Name, upperName)); | ||
| 138 | } | ||
| 139 | } | ||
| 140 | } | ||
| 141 | |||
| 121 | private void VerifyPrereqPackages(IntermediateSection section, bool isDNC) | 142 | private void VerifyPrereqPackages(IntermediateSection section, bool isDNC) |
| 122 | { | 143 | { |
| 123 | var prereqInfoSymbols = section.Symbols.OfType<WixMbaPrereqInformationSymbol>().ToList(); | 144 | var prereqInfoSymbols = section.Symbols.OfType<WixMbaPrereqInformationSymbol>().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 | |||
| 38 | return Message(sourceLineNumbers, Ids.MultiplePrereqLicenses, "There may only be one package in the bundle that has either the PrereqLicenseFile attribute or the PrereqLicenseUrl attribute."); | 38 | return Message(sourceLineNumbers, Ids.MultiplePrereqLicenses, "There may only be one package in the bundle that has either the PrereqLicenseFile attribute or the PrereqLicenseUrl attribute."); |
| 39 | } | 39 | } |
| 40 | 40 | ||
| 41 | public static Message NonUpperCaseOverridableVariable(SourceLineNumber sourceLineNumbers, string name, string expectedName) | ||
| 42 | { | ||
| 43 | return Message(sourceLineNumbers, Ids.NonUpperCaseOverridableVariable, "Overridable variable '{0}' must be '{1}' with Bundle/@CommandLineVariables value 'upperCase'.", name, expectedName); | ||
| 44 | } | ||
| 45 | |||
| 41 | private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args) | 46 | private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args) |
| 42 | { | 47 | { |
| 43 | return new Message(sourceLineNumber, MessageLevel.Error, (int)id, format, args); | 48 | return new Message(sourceLineNumber, MessageLevel.Error, (int)id, format, args); |
| @@ -56,6 +61,7 @@ namespace WixToolset.Bal | |||
| 56 | MultipleBAFunctions = 6804, | 61 | MultipleBAFunctions = 6804, |
| 57 | BAFunctionsPayloadRequiredInUXContainer = 6805, | 62 | BAFunctionsPayloadRequiredInUXContainer = 6805, |
| 58 | MissingDNCPrereq = 6806, | 63 | MissingDNCPrereq = 6806, |
| 64 | NonUpperCaseOverridableVariable = 6807, | ||
| 59 | } | 65 | } |
| 60 | } | 66 | } |
| 61 | } | 67 | } |
