Fix bug when parsing bal prereq attributes.
7287
Sean Hall committed
Mar 20, 2023 at 18:16 UTC
f5bda6af2abbcf7e4792d299b86bfcec713fc6c2
3 files changed
+65
-1
src/ext/Bal/test/WixToolsetTest.Bal/InternalUIBAFixture.cs
+45
@@ -50,6 +50,51 @@ namespace WixToolsetTest.Bal
50
}
51
}
52
53
+ [Fact]
54
+ public void CanBuildUsingWixIuiBaWithUrlPrereqPackage()
55
+ {
56
+ using (var fs = new DisposableFileSystem())
57
+ {
58
+ var baseFolder = fs.GetFolder();
59
+ var bundleFile = Path.Combine(baseFolder, "bin", "test.exe");
60
+ var bundleSourceFolder = TestData.Get(@"TestData\WixIuiBa");
61
+ var intermediateFolder = Path.Combine(baseFolder, "obj");
62
+ var baFolderPath = Path.Combine(baseFolder, "ba");
63
+ var extractFolderPath = Path.Combine(baseFolder, "extract");
64
+
65
+ var compileResult = WixRunner.Execute(new[]
66
+ {
67
+ "build",
68
+ Path.Combine(bundleSourceFolder, "UrlPrereqPackage.wxs"),
69
+ "-ext", TestData.Get(@"WixToolset.Bal.wixext.dll"),
70
+ "-intermediateFolder", intermediateFolder,
71
+ "-bindpath", TestData.Get(@"TestData\WixStdBa\Data"),
72
+ "-o", bundleFile,
73
+ });
74
+ compileResult.AssertSuccess();
75
+
76
+ Assert.True(File.Exists(bundleFile));
77
+
78
+ var extractResult = BundleExtractor.ExtractBAContainer(null, bundleFile, baFolderPath, extractFolderPath);
79
+ extractResult.AssertSuccess();
80
+
81
+ var balPackageInfos = extractResult.GetBADataTestXmlLines("/ba:BootstrapperApplicationData/ba:WixBalPackageInfo");
82
+ WixAssert.CompareLineByLine(new string[]
83
+ {
84
+ "<WixBalPackageInfo PackageId='test.msi' PrimaryPackageType='default' />",
85
+ }, balPackageInfos);
86
+
87
+ var mbaPrereqInfos = extractResult.GetBADataTestXmlLines("/ba:BootstrapperApplicationData/ba:WixMbaPrereqInformation");
88
+ WixAssert.CompareLineByLine(new[]
89
+ {
90
+ "<WixMbaPrereqInformation PackageId='wixnative.exe' LicenseUrl='https://www.mysite.com/prereqterms' />",
91
+ }, mbaPrereqInfos);
92
+
93
+ Assert.True(File.Exists(Path.Combine(baFolderPath, "mbapreq.thm")));
94
+ Assert.True(File.Exists(Path.Combine(baFolderPath, "mbapreq.wxl")));
95
+ }
96
+ }
97
+
98
[Fact]
99
public void CanBuildUsingWixIuiBaWithImplicitPrimaryPackage()
100
{
src/ext/Bal/test/WixToolsetTest.Bal/TestData/WixIuiBa/UrlPrereqPackage.wxs
new
+19
@@ -0,0 +1,19 @@
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="WixIuiBa" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="{5C7B7C41-B3A9-4FFF-952A-B6D68320B9B4}">
5
+ <BootstrapperApplication>
6
+ <bal:WixInternalUIBootstrapperApplication />
7
+ </BootstrapperApplication>
8
+ <Chain>
9
+ <ExePackage
10
+ Permanent="yes"
11
+ DetectCondition="none"
12
+ SourceFile="runtimes\win-x86\native\wixnative.exe"
13
+ bal:PrereqPackage="yes"
14
+ bal:PrereqLicenseUrl="https://www.mysite.com/prereqterms"
15
+ />
16
+ <MsiPackage SourceFile="test.msi" bal:PrimaryPackageType="default" />
17
+ </Chain>
18
+ </Bundle>
19
+</Wix>
src/ext/Bal/wixext/BalCompiler.cs
+1
-1
@@ -358,7 +358,7 @@ namespace WixToolset.Bal
358
359
if (prereqAttribute != null && YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, prereqAttribute))
360
{
361
- if (!this.prereqInfoSymbolsByPackageId.TryGetValue(packageId, out _))
361
+ if (!this.prereqInfoSymbolsByPackageId.TryGetValue(packageId, out prereqInfo))
362
{
363
prereqInfo = section.AddSymbol(new WixMbaPrereqInformationSymbol(sourceLineNumbers, new Identifier(AccessModifier.Global, packageId))
364
{