aboutsummaryrefslogtreecommitdiff
path: root/src/ext/Bal
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-07-01 09:30:10 -0500
committerSean Hall <r.sean.hall@gmail.com>2021-07-02 12:50:09 -0500
commit9bdf3730cd43e1af8a4ea9be6cf2fba77fcff2d2 (patch)
treeea2a05de5a8a1dfcb2af8e9e3805fe015729f66a /src/ext/Bal
parent8cbfc326cccf8d9b3b63cb6f752fc770f7dee0fc (diff)
downloadwix-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')
-rw-r--r--src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs27
-rw-r--r--src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/Bundle.wxs2
-rw-r--r--src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/WrongCaseBundle.wxs13
-rw-r--r--src/ext/Bal/test/WixToolsetTest.Bal/WixToolsetTest.Bal.csproj6
-rw-r--r--src/ext/Bal/wixext/BalBurnBackendExtension.cs21
-rw-r--r--src/ext/Bal/wixext/BalErrors.cs6
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}