aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/WixToolset.Core/Compiler_Bundle.cs16
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs53
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/Dependency/CustomProviderKeyBundle.wxs10
3 files changed, 74 insertions, 5 deletions
diff --git a/src/WixToolset.Core/Compiler_Bundle.cs b/src/WixToolset.Core/Compiler_Bundle.cs
index 46b79484..89ca94ba 100644
--- a/src/WixToolset.Core/Compiler_Bundle.cs
+++ b/src/WixToolset.Core/Compiler_Bundle.cs
@@ -197,7 +197,7 @@ namespace WixToolset.Core
197 parentName = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 197 parentName = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
198 break; 198 break;
199 case "ProviderKey": 199 case "ProviderKey":
200 this.ParseBundleProviderKeyAttribute(sourceLineNumbers, node, attrib); 200 // This can't be processed until we create the section.
201 break; 201 break;
202 case "SplashScreenSourceFile": 202 case "SplashScreenSourceFile":
203 splashScreenSourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 203 splashScreenSourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
@@ -261,10 +261,20 @@ namespace WixToolset.Core
261 this.activeName = String.IsNullOrEmpty(name) ? Common.GenerateGuid() : name; 261 this.activeName = String.IsNullOrEmpty(name) ? Common.GenerateGuid() : name;
262 this.Core.CreateActiveSection(this.activeName, SectionType.Bundle, 0, this.Context.CompilationId); 262 this.Core.CreateActiveSection(this.activeName, SectionType.Bundle, 0, this.Context.CompilationId);
263 263
264 // Now that the active section is initialized, process only extension attributes. 264 // Now that the active section is initialized, process only extension attributes and the special ProviderKey attribute.
265 foreach (var attrib in node.Attributes()) 265 foreach (var attrib in node.Attributes())
266 { 266 {
267 if (!String.IsNullOrEmpty(attrib.Name.NamespaceName) && CompilerCore.WixNamespace != attrib.Name.Namespace) 267 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || CompilerCore.WixNamespace == attrib.Name.Namespace)
268 {
269 switch (attrib.Name.LocalName)
270 {
271 case "ProviderKey":
272 this.ParseBundleProviderKeyAttribute(sourceLineNumbers, node, attrib);
273 break;
274 // Unknown attributes were reported earlier.
275 }
276 }
277 else
268 { 278 {
269 this.Core.ParseExtensionAttribute(node, attrib); 279 this.Core.ParseExtensionAttribute(node, attrib);
270 } 280 }
diff --git a/src/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs b/src/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs
index de038bde..48270ce4 100644
--- a/src/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs
@@ -57,12 +57,61 @@ namespace WixToolsetTest.CoreIntegration
57 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); 57 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
58 extractResult.AssertSuccess(); 58 extractResult.AssertSuccess();
59 59
60 var provides = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:MsiPackage/burn:Provides"); 60 var provides = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:MsiPackage/burn:Provides")
61 .Cast<XmlElement>()
62 .Select(e => e.GetTestXml())
63 .ToArray();
61 WixAssert.CompareLineByLine(new string[] 64 WixAssert.CompareLineByLine(new string[]
62 { 65 {
63 "<Provides Key='UsingProvides' Imported='yes' />", 66 "<Provides Key='UsingProvides' Imported='yes' />",
64 "<Provides Key='{A81D50F9-B696-4F3D-ABE0-E64D61590E5F}' Version='1.0.0.0' DisplayName='MsiPackage' />", 67 "<Provides Key='{A81D50F9-B696-4F3D-ABE0-E64D61590E5F}' Version='1.0.0.0' DisplayName='MsiPackage' />",
65 }, provides.Cast<XmlElement>().Select(e => e.GetTestXml()).ToArray()); 68 }, provides);
69 }
70 }
71
72 [Fact]
73 public void CanBuildBundleWithCustomProviderKey()
74 {
75 var folder = TestData.Get(@"TestData");
76
77 using (var fs = new DisposableFileSystem())
78 {
79 var baseFolder = fs.GetFolder();
80 var intermediateFolder = Path.Combine(baseFolder, "obj");
81 var binFolder = Path.Combine(baseFolder, "bin");
82 var bundlePath = Path.Combine(binFolder, "test.exe");
83 var baFolderPath = Path.Combine(baseFolder, "ba");
84 var extractFolderPath = Path.Combine(baseFolder, "extract");
85
86 var result = WixRunner.Execute(new[]
87 {
88 "build",
89 Path.Combine(folder, "Dependency", "CustomProviderKeyBundle.wxs"),
90 Path.Combine(folder, "BundleWithPackageGroupRef", "MinimalPackageGroup.wxs"),
91 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
92 "-intermediateFolder", intermediateFolder,
93 "-o", bundlePath,
94 });
95
96 result.AssertSuccess();
97
98 Assert.True(File.Exists(bundlePath));
99
100 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
101 extractResult.AssertSuccess();
102
103 var ignoreAttributesByElementName = new Dictionary<string, List<string>>
104 {
105 { "Registration", new List<string> { "Id" } },
106 };
107 var registration = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Registration")
108 .Cast<XmlElement>()
109 .Select(e => e.GetTestXml(ignoreAttributesByElementName))
110 .ToArray();
111 WixAssert.CompareLineByLine(new string[]
112 {
113 "<Registration Id='*' ExecutableName='test.exe' PerMachine='yes' Tag='' Version='1.0.0.0' ProviderKey='MyProviderKey,v1.0'><Arp Register='yes' DisplayName='BurnBundle' DisplayVersion='1.0.0.0' Publisher='Example Corporation' /></Registration>",
114 }, registration);
66 } 115 }
67 } 116 }
68 117
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Dependency/CustomProviderKeyBundle.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/Dependency/CustomProviderKeyBundle.wxs
new file mode 100644
index 00000000..6df8a7c0
--- /dev/null
+++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Dependency/CustomProviderKeyBundle.wxs
@@ -0,0 +1,10 @@
1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2 <Bundle Name="BurnBundle" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="B94478B1-E1F3-4700-9CE8-6AA090854AEC" ProviderKey="MyProviderKey,v1.0">
3 <BootstrapperApplication>
4 <BootstrapperApplicationDll SourceFile="fakeba.dll" />
5 </BootstrapperApplication>
6 <Chain>
7 <PackageGroupRef Id="MinimalPackageGroup" />
8 </Chain>
9 </Bundle>
10</Wix>