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 | |
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')
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 | } |