@joebigelow / wix-1 / commits / f5bda6af

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 {