aboutsummaryrefslogtreecommitdiff
path: root/src/test/WixToolsetTest.CoreIntegration/PatchFixture.cs
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-01-27 20:06:23 -0600
committerSean Hall <r.sean.hall@gmail.com>2021-01-27 20:45:17 -0600
commit9a6688a8d6ec05817451dc8706a0bc9db82b9d36 (patch)
treec3b8347c32a4b6986ace5da37866e3c47d175662 /src/test/WixToolsetTest.CoreIntegration/PatchFixture.cs
parent8eed3c02afb5883bc4e3bb45ab1f9b6da5a65476 (diff)
downloadwix-9a6688a8d6ec05817451dc8706a0bc9db82b9d36.tar.gz
wix-9a6688a8d6ec05817451dc8706a0bc9db82b9d36.tar.bz2
wix-9a6688a8d6ec05817451dc8706a0bc9db82b9d36.zip
Add patch test from old repo and get it passing.
Fixes #6341.
Diffstat (limited to 'src/test/WixToolsetTest.CoreIntegration/PatchFixture.cs')
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/PatchFixture.cs79
1 files changed, 77 insertions, 2 deletions
diff --git a/src/test/WixToolsetTest.CoreIntegration/PatchFixture.cs b/src/test/WixToolsetTest.CoreIntegration/PatchFixture.cs
index 3616bcab..f1d0ea58 100644
--- a/src/test/WixToolsetTest.CoreIntegration/PatchFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/PatchFixture.cs
@@ -2,14 +2,18 @@
2 2
3namespace WixToolsetTest.CoreIntegration 3namespace WixToolsetTest.CoreIntegration
4{ 4{
5 using System.Collections.Generic;
5 using System.ComponentModel; 6 using System.ComponentModel;
6 using System.IO; 7 using System.IO;
7 using System.Linq; 8 using System.Linq;
8 using System.Runtime.InteropServices; 9 using System.Runtime.InteropServices;
9 using System.Text; 10 using System.Text;
11 using System.Xml;
10 using System.Xml.Linq; 12 using System.Xml.Linq;
11 using WixBuildTools.TestSupport; 13 using WixBuildTools.TestSupport;
12 using WixToolset.Core.TestPackage; 14 using WixToolset.Core.TestPackage;
15 using WixToolset.Data;
16 using WixToolset.Data.Burn;
13 using Xunit; 17 using Xunit;
14 18
15 public class PatchFixture 19 public class PatchFixture
@@ -28,7 +32,6 @@ namespace WixToolsetTest.CoreIntegration
28 var baselinePdb = BuildMsi("Baseline.msi", folder, tempFolder, "1.0.0", "1.0.0", "1.0.0"); 32 var baselinePdb = BuildMsi("Baseline.msi", folder, tempFolder, "1.0.0", "1.0.0", "1.0.0");
29 var update1Pdb = BuildMsi("Update.msi", folder, tempFolder, "1.0.1", "1.0.1", "1.0.1"); 33 var update1Pdb = BuildMsi("Update.msi", folder, tempFolder, "1.0.1", "1.0.1", "1.0.1");
30 var patchPdb = BuildMsp("Patch1.msp", folder, tempFolder, "1.0.1"); 34 var patchPdb = BuildMsp("Patch1.msp", folder, tempFolder, "1.0.1");
31 var baselinePath = Path.ChangeExtension(baselinePdb, ".msp");
32 var patchPath = Path.ChangeExtension(patchPdb, ".msp"); 35 var patchPath = Path.ChangeExtension(patchPdb, ".msp");
33 36
34 Assert.True(File.Exists(baselinePdb)); 37 Assert.True(File.Exists(baselinePdb));
@@ -49,6 +52,57 @@ namespace WixToolsetTest.CoreIntegration
49 } 52 }
50 } 53 }
51 54
55 [Fact]
56 public void CanBuildBundleWithNonSpecificPatches()
57 {
58 var folder = TestData.Get(@"TestData\PatchNonSpecific");
59
60 using (var fs = new DisposableFileSystem())
61 {
62 var tempFolder = fs.GetFolder();
63
64 var baselinePdb = BuildMsi("Baseline.msi", Path.Combine(folder, "PackageA"), tempFolder, "1.0.0", "A", "B");
65 var updatePdb = BuildMsi("Update.msi", Path.Combine(folder, "PackageA"), tempFolder, "1.0.1", "A", "B");
66 var patchAPdb = BuildMsp("PatchA.msp", Path.Combine(folder, "PatchA"), tempFolder, "1.0.1", true);
67 var patchBPdb = BuildMsp("PatchB.msp", Path.Combine(folder, "PatchB"), tempFolder, "1.0.1", true);
68 var patchCPdb = BuildMsp("PatchC.msp", Path.Combine(folder, "PatchC"), tempFolder, "1.0.1", true);
69 var bundleAPdb = BuildBundle("BundleA.exe", Path.Combine(folder, "BundleA"), tempFolder);
70 var bundleBPdb = BuildBundle("BundleB.exe", Path.Combine(folder, "BundleB"), tempFolder);
71 var bundleCPdb = BuildBundle("BundleC.exe", Path.Combine(folder, "BundleC"), tempFolder);
72
73 VerifyPatchTargetCodes(bundleAPdb, new[]
74 {
75 "<PatchTargetCode TargetCode='{26309973-0A5E-4979-B142-98A6E064EDC0}' Product='yes' />",
76 });
77 VerifyPatchTargetCodes(bundleBPdb, new[]
78 {
79 "<PatchTargetCode TargetCode='{26309973-0A5E-4979-B142-98A6E064EDC0}' Product='yes' />",
80 "<PatchTargetCode TargetCode='{32B0396A-CE36-4570-B16E-F88FA42DC409}' Product='no' />",
81 });
82 VerifyPatchTargetCodes(bundleCPdb, new string[0]);
83 }
84 }
85
86 private static void VerifyPatchTargetCodes(string pdbPath, string[] expected)
87 {
88 using (var wixOutput = WixOutput.Read(pdbPath))
89 {
90 var manifestData = wixOutput.GetData(BurnConstants.BurnManifestWixOutputStreamName);
91 var doc = new XmlDocument();
92 doc.LoadXml(manifestData);
93 var nsmgr = BundleExtractor.GetBurnNamespaceManager(doc, "w");
94 var patchTargetCodes = doc.SelectNodes("/w:BurnManifest/w:PatchTargetCode", nsmgr);
95
96 var actual = new List<string>();
97 foreach (XmlNode patchTargetCodeNode in patchTargetCodes)
98 {
99 actual.Add(patchTargetCodeNode.GetTestXml());
100 }
101
102 WixAssert.CompareLineByLine(expected, actual.ToArray());
103 }
104 }
105
52 private static string BuildMsi(string outputName, string sourceFolder, string baseFolder, string defineV, string defineA, string defineB) 106 private static string BuildMsi(string outputName, string sourceFolder, string baseFolder, string defineV, string defineA, string defineB)
53 { 107 {
54 var outputPath = Path.Combine(baseFolder, Path.Combine("bin", outputName)); 108 var outputPath = Path.Combine(baseFolder, Path.Combine("bin", outputName));
@@ -70,13 +124,14 @@ namespace WixToolsetTest.CoreIntegration
70 return Path.ChangeExtension(outputPath, ".wixpdb"); 124 return Path.ChangeExtension(outputPath, ".wixpdb");
71 } 125 }
72 126
73 private static string BuildMsp(string outputName, string sourceFolder, string baseFolder, string defineV) 127 private static string BuildMsp(string outputName, string sourceFolder, string baseFolder, string defineV, bool hasNoFiles = false)
74 { 128 {
75 var outputPath = Path.Combine(baseFolder, Path.Combine("bin", outputName)); 129 var outputPath = Path.Combine(baseFolder, Path.Combine("bin", outputName));
76 130
77 var result = WixRunner.Execute(new[] 131 var result = WixRunner.Execute(new[]
78 { 132 {
79 "build", 133 "build",
134 hasNoFiles ? "-sw1079" : " ",
80 Path.Combine(sourceFolder, @"Patch.wxs"), 135 Path.Combine(sourceFolder, @"Patch.wxs"),
81 "-d", "V=" + defineV, 136 "-d", "V=" + defineV,
82 "-bindpath", Path.Combine(baseFolder, "bin"), 137 "-bindpath", Path.Combine(baseFolder, "bin"),
@@ -89,6 +144,26 @@ namespace WixToolsetTest.CoreIntegration
89 return Path.ChangeExtension(outputPath, ".wixpdb"); 144 return Path.ChangeExtension(outputPath, ".wixpdb");
90 } 145 }
91 146
147 private static string BuildBundle(string outputName, string sourceFolder, string baseFolder)
148 {
149 var outputPath = Path.Combine(baseFolder, Path.Combine("bin", outputName));
150
151 var result = WixRunner.Execute(new[]
152 {
153 "build",
154 Path.Combine(sourceFolder, @"Bundle.wxs"),
155 Path.Combine(sourceFolder, "..", "..", "BundleWithPackageGroupRef", "Bundle.wxs"),
156 "-bindpath", Path.Combine(sourceFolder, "..", "..", "SimpleBundle", "data"),
157 "-bindpath", Path.Combine(baseFolder, "bin"),
158 "-intermediateFolder", Path.Combine(baseFolder, "obj"),
159 "-o", outputPath
160 });
161
162 result.AssertSuccess();
163
164 return Path.ChangeExtension(outputPath, ".wixpdb");
165 }
166
92 private static XDocument GetExtractPatchXml(string path) 167 private static XDocument GetExtractPatchXml(string path)
93 { 168 {
94 var buffer = new StringBuilder(65535); 169 var buffer = new StringBuilder(65535);