aboutsummaryrefslogtreecommitdiff
path: root/src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs')
-rw-r--r--src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs389
1 files changed, 383 insertions, 6 deletions
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs
index 67f295e8..32c207f7 100644
--- a/src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs
+++ b/src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs
@@ -2,8 +2,10 @@
2 2
3namespace WixToolsetTest.CoreIntegration 3namespace WixToolsetTest.CoreIntegration
4{ 4{
5 using System.Collections.Generic;
5 using System.IO; 6 using System.IO;
6 using System.Linq; 7 using System.Linq;
8 using System.Xml;
7 using WixBuildTools.TestSupport; 9 using WixBuildTools.TestSupport;
8 using WixToolset.Core.TestPackage; 10 using WixToolset.Core.TestPackage;
9 using Xunit; 11 using Xunit;
@@ -11,7 +13,259 @@ namespace WixToolsetTest.CoreIntegration
11 public class ExePackageFixture 13 public class ExePackageFixture
12 { 14 {
13 [Fact] 15 [Fact]
14 public void ErrorWhenMissingDetectCondition() 16 public void CanBuildWithArpEntry()
17 {
18 var folder = TestData.Get(@"TestData");
19
20 using (var fs = new DisposableFileSystem())
21 {
22 var baseFolder = fs.GetFolder();
23 var intermediateFolder = Path.Combine(baseFolder, "obj");
24 var binFolder = Path.Combine(baseFolder, "bin");
25 var bundlePath = Path.Combine(binFolder, "test.exe");
26 var baFolderPath = Path.Combine(baseFolder, "ba");
27 var extractFolderPath = Path.Combine(baseFolder, "extract");
28
29 var result = WixRunner.Execute(new[]
30 {
31 "build",
32 Path.Combine(folder, "ExePackage", "ArpEntry.wxs"),
33 Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
34 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
35 "-bindpath", Path.Combine(folder, ".Data"),
36 "-intermediateFolder", intermediateFolder,
37 "-o", bundlePath,
38 });
39
40 result.AssertSuccess();
41
42 Assert.True(File.Exists(bundlePath));
43
44 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
45 extractResult.AssertSuccess();
46
47 var ignoreAttributes = new Dictionary<string, List<string>>
48 {
49 { "ExePackage", new List<string> { "CacheId", "Size" } },
50 };
51 var exePackages = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:ExePackage")
52 .Cast<XmlElement>()
53 .Select(e => e.GetTestXml(ignoreAttributes))
54 .ToArray();
55 WixAssert.CompareLineByLine(new string[]
56 {
57 "<ExePackage Id='burn.exe' Cache='keep' CacheId='*' InstallSize='463360' Size='*' PerMachine='yes' Permanent='no' Vital='yes' RollbackBoundaryForward='WixDefaultBoundary' RollbackBoundaryBackward='WixDefaultBoundary' LogPathVariable='WixBundleLog_burn.exe' RollbackLogPathVariable='WixBundleRollbackLog_burn.exe' InstallArguments='-install' RepairArguments='-repair' Repairable='yes' DetectionType='arp' ArpId='id' ArpDisplayVersion='1.0.0.0'>" +
58 "<PayloadRef Id='burn.exe' />" +
59 "</ExePackage>",
60 }, exePackages);
61 }
62 }
63
64 [Fact]
65 public void WarningWhenInvalidArpEntryVersion()
66 {
67 var folder = TestData.Get(@"TestData");
68
69 using (var fs = new DisposableFileSystem())
70 {
71 var baseFolder = fs.GetFolder();
72 var intermediateFolder = Path.Combine(baseFolder, "obj");
73 var binFolder = Path.Combine(baseFolder, "bin");
74 var bundlePath = Path.Combine(binFolder, "test.exe");
75 var baFolderPath = Path.Combine(baseFolder, "ba");
76 var extractFolderPath = Path.Combine(baseFolder, "extract");
77
78 var result = WixRunner.Execute(false, new[]
79 {
80 "build",
81 Path.Combine(folder, "ExePackage", "InvalidArpEntryVersion.wxs"),
82 Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
83 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
84 "-bindpath", Path.Combine(folder, ".Data"),
85 "-intermediateFolder", intermediateFolder,
86 "-o", bundlePath,
87 });
88
89 WixAssert.CompareLineByLine(new[]
90 {
91 "Invalid WixVersion '1.0.0.abc' in ArpEntry/@'Version'. Comparisons may yield unexpected results."
92 }, result.Messages.Select(m => m.ToString()).ToArray());
93 result.AssertSuccess();
94
95 Assert.True(File.Exists(bundlePath));
96
97 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
98 extractResult.AssertSuccess();
99
100 var ignoreAttributes = new Dictionary<string, List<string>>
101 {
102 { "ExePackage", new List<string> { "CacheId", "Size" } },
103 };
104 var exePackages = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:ExePackage")
105 .Cast<XmlElement>()
106 .Select(e => e.GetTestXml(ignoreAttributes))
107 .ToArray();
108 WixAssert.CompareLineByLine(new string[]
109 {
110 "<ExePackage Id='burn.exe' Cache='keep' CacheId='*' InstallSize='463360' Size='*' PerMachine='yes' Permanent='no' Vital='yes' RollbackBoundaryForward='WixDefaultBoundary' RollbackBoundaryBackward='WixDefaultBoundary' LogPathVariable='WixBundleLog_burn.exe' RollbackLogPathVariable='WixBundleRollbackLog_burn.exe' InstallArguments='-install' RepairArguments='' Repairable='no' DetectionType='arp' ArpId='id' ArpDisplayVersion='1.0.0.abc'>" +
111 "<PayloadRef Id='burn.exe' />" +
112 "</ExePackage>",
113 }, exePackages);
114 }
115 }
116
117 [Fact]
118 public void WarningWhenPermanentWithoutDetectConditionOrUninstallArgumentsOrArpEntry()
119 {
120 var folder = TestData.Get(@"TestData");
121
122 using (var fs = new DisposableFileSystem())
123 {
124 var baseFolder = fs.GetFolder();
125 var intermediateFolder = Path.Combine(baseFolder, "obj");
126 var binFolder = Path.Combine(baseFolder, "bin");
127 var bundlePath = Path.Combine(binFolder, "test.exe");
128 var baFolderPath = Path.Combine(baseFolder, "ba");
129 var extractFolderPath = Path.Combine(baseFolder, "extract");
130
131 var result = WixRunner.Execute(false, new[]
132 {
133 "build",
134 Path.Combine(folder, "ExePackage", "PermanentWithoutDetectConditionOrUninstallArgumentsOrArpEntry.wxs"),
135 Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
136 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
137 "-bindpath", Path.Combine(folder, ".Data"),
138 "-intermediateFolder", intermediateFolder,
139 "-o", bundlePath,
140 });
141
142 WixAssert.CompareLineByLine(new[]
143 {
144 "The ExePackage/@DetectCondition attribute or child element ArpEntry is recommended so the package is only installed when absent."
145 }, result.Messages.Select(m => m.ToString()).ToArray());
146 result.AssertSuccess();
147
148 Assert.True(File.Exists(bundlePath));
149
150 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
151 extractResult.AssertSuccess();
152
153 var ignoreAttributes = new Dictionary<string, List<string>>
154 {
155 { "ExePackage", new List<string> { "CacheId", "Size" } },
156 };
157 var exePackages = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:ExePackage")
158 .Cast<XmlElement>()
159 .Select(e => e.GetTestXml(ignoreAttributes))
160 .ToArray();
161 WixAssert.CompareLineByLine(new string[]
162 {
163 "<ExePackage Id='burn.exe' Cache='keep' CacheId='*' InstallSize='463360' Size='*' PerMachine='yes' Permanent='yes' Vital='yes' RollbackBoundaryForward='WixDefaultBoundary' RollbackBoundaryBackward='WixDefaultBoundary' LogPathVariable='WixBundleLog_burn.exe' RollbackLogPathVariable='WixBundleRollbackLog_burn.exe' InstallArguments='-install' RepairArguments='' Repairable='no' DetectionType='none'>" +
164 "<PayloadRef Id='burn.exe' />" +
165 "</ExePackage>",
166 }, exePackages);
167 }
168 }
169
170 [Fact]
171 public void NoWarningWhenPermanentWithEmptyDetectCondition()
172 {
173 var folder = TestData.Get(@"TestData");
174
175 using (var fs = new DisposableFileSystem())
176 {
177 var baseFolder = fs.GetFolder();
178 var intermediateFolder = Path.Combine(baseFolder, "obj");
179 var binFolder = Path.Combine(baseFolder, "bin");
180 var bundlePath = Path.Combine(binFolder, "test.exe");
181 var baFolderPath = Path.Combine(baseFolder, "ba");
182 var extractFolderPath = Path.Combine(baseFolder, "extract");
183
184 var result = WixRunner.Execute(new[]
185 {
186 "build",
187 Path.Combine(folder, "ExePackage", "PermanentWithEmptyDetectCondition.wxs"),
188 Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
189 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
190 "-bindpath", Path.Combine(folder, ".Data"),
191 "-intermediateFolder", intermediateFolder,
192 "-o", bundlePath,
193 });
194
195 result.AssertSuccess();
196
197 Assert.True(File.Exists(bundlePath));
198
199 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
200 extractResult.AssertSuccess();
201
202 var ignoreAttributes = new Dictionary<string, List<string>>
203 {
204 { "ExePackage", new List<string> { "CacheId", "Size" } },
205 };
206 var exePackages = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:ExePackage")
207 .Cast<XmlElement>()
208 .Select(e => e.GetTestXml(ignoreAttributes))
209 .ToArray();
210 WixAssert.CompareLineByLine(new string[]
211 {
212 "<ExePackage Id='burn.exe' Cache='keep' CacheId='*' InstallSize='463360' Size='*' PerMachine='yes' Permanent='yes' Vital='yes' RollbackBoundaryForward='WixDefaultBoundary' RollbackBoundaryBackward='WixDefaultBoundary' LogPathVariable='WixBundleLog_burn.exe' RollbackLogPathVariable='WixBundleRollbackLog_burn.exe' InstallArguments='-install' RepairArguments='' Repairable='no' DetectionType='none'>" +
213 "<PayloadRef Id='burn.exe' />" +
214 "</ExePackage>",
215 }, exePackages);
216 }
217 }
218
219 [Fact]
220 public void ErrorWhenArpEntryWithDetectCondition()
221 {
222 var folder = TestData.Get(@"TestData", "ExePackage");
223
224 using (var fs = new DisposableFileSystem())
225 {
226 var baseFolder = fs.GetFolder();
227
228 var result = WixRunner.Execute(new[]
229 {
230 "build",
231 Path.Combine(folder, "ArpEntryWithDetectCondition.wxs"),
232 "-o", Path.Combine(baseFolder, "test.wixlib")
233 });
234
235 WixAssert.CompareLineByLine(new[]
236 {
237 "The ExePackage element cannot have a child element 'ArpEntry' when attribute 'DetectCondition' is set.",
238 }, result.Messages.Select(m => m.ToString()).ToArray());
239 Assert.Equal(372, result.ExitCode);
240 }
241 }
242
243 [Fact]
244 public void ErrorWhenArpEntryWithUninstallArguments()
245 {
246 var folder = TestData.Get(@"TestData", "ExePackage");
247
248 using (var fs = new DisposableFileSystem())
249 {
250 var baseFolder = fs.GetFolder();
251
252 var result = WixRunner.Execute(new[]
253 {
254 "build",
255 Path.Combine(folder, "ArpEntryWithUninstallArguments.wxs"),
256 "-o", Path.Combine(baseFolder, "test.wixlib")
257 });
258
259 WixAssert.CompareLineByLine(new[]
260 {
261 "The ExePackage element cannot have a child element 'ArpEntry' when attribute 'UninstallArguments' is set.",
262 }, result.Messages.Select(m => m.ToString()).ToArray());
263 Assert.Equal(372, result.ExitCode);
264 }
265 }
266
267 [Fact]
268 public void ErrorWhenArpEntryWithInvalidId()
15 { 269 {
16 var folder = TestData.Get(@"TestData", "ExePackage"); 270 var folder = TestData.Get(@"TestData", "ExePackage");
17 271
@@ -22,16 +276,135 @@ namespace WixToolsetTest.CoreIntegration
22 var result = WixRunner.Execute(new[] 276 var result = WixRunner.Execute(new[]
23 { 277 {
24 "build", 278 "build",
25 Path.Combine(folder, "MissingDetectCondition.wxs"), 279 Path.Combine(folder, "InvalidArpEntryId.wxs"),
280 "-o", Path.Combine(baseFolder, "test.wixlib")
281 });
282
283 WixAssert.CompareLineByLine(new[]
284 {
285 "The ArpEntry/@Id attribute's value, '..\\id', is not a valid filename because it contains illegal characters. Legal filenames contain no more than 260 characters and must contain at least one non-period character. Any character except for the follow may be used: \\ ? | > < : / * \".",
286 }, result.Messages.Select(m => m.ToString()).ToArray());
287 Assert.Equal(27, result.ExitCode);
288 }
289 }
290
291 [Fact]
292 public void ErrorWhenNonPermanentWithOnlyDetectCondition()
293 {
294 var folder = TestData.Get(@"TestData", "ExePackage");
295
296 using (var fs = new DisposableFileSystem())
297 {
298 var baseFolder = fs.GetFolder();
299
300 var result = WixRunner.Execute(new[]
301 {
302 "build",
303 Path.Combine(folder, "NonPermanentWithOnlyDetectCondition.wxs"),
26 "-o", Path.Combine(baseFolder, "test.wixlib") 304 "-o", Path.Combine(baseFolder, "test.wixlib")
27 }); 305 });
28 306
29 WixAssert.CompareLineByLine(new[] 307 WixAssert.CompareLineByLine(new[]
30 { 308 {
31 "The ExePackage element's UninstallArguments attribute was not found; it is required without attribute Permanent present.", 309 "The ExePackage element's UninstallArguments attribute was not found; it is required without attribute Permanent present.",
32 "The ExePackage/@DetectCondition attribute is recommended so the package is only installed when absent."
33 }, result.Messages.Select(m => m.ToString()).ToArray()); 310 }, result.Messages.Select(m => m.ToString()).ToArray());
34 Assert.Equal(1153, result.ExitCode); 311 Assert.Equal(408, result.ExitCode);
312 }
313 }
314
315 [Fact]
316 public void ErrorWhenNonPermanentWithOnlyUninstallArguments()
317 {
318 var folder = TestData.Get(@"TestData", "ExePackage");
319
320 using (var fs = new DisposableFileSystem())
321 {
322 var baseFolder = fs.GetFolder();
323
324 var result = WixRunner.Execute(new[]
325 {
326 "build",
327 Path.Combine(folder, "NonPermanentWithOnlyUninstallArguments.wxs"),
328 "-o", Path.Combine(baseFolder, "test.wixlib")
329 });
330
331 WixAssert.CompareLineByLine(new[]
332 {
333 "The ExePackage element's DetectCondition attribute was not found; it is required without attribute Permanent present.",
334 }, result.Messages.Select(m => m.ToString()).ToArray());
335 Assert.Equal(408, result.ExitCode);
336 }
337 }
338
339 [Fact]
340 public void ErrorWhenRepairablePermanentWithoutDetectCondition()
341 {
342 var folder = TestData.Get(@"TestData", "ExePackage");
343
344 using (var fs = new DisposableFileSystem())
345 {
346 var baseFolder = fs.GetFolder();
347
348 var result = WixRunner.Execute(new[]
349 {
350 "build",
351 Path.Combine(folder, "RepairablePermanentWithoutDetectCondition.wxs"),
352 "-o", Path.Combine(baseFolder, "test.wixlib")
353 });
354
355 WixAssert.CompareLineByLine(new[]
356 {
357 "The ExePackage/@DetectCondition attribute is required to have a value when attribute RepairArguments is present.",
358 }, result.Messages.Select(m => m.ToString()).ToArray());
359 Assert.Equal(401, result.ExitCode);
360 }
361 }
362
363 [Fact]
364 public void ErrorWhenRepairablePermanentWithoutDetectConditionOrUninstallArgumentsOrArpEntry()
365 {
366 var folder = TestData.Get(@"TestData", "ExePackage");
367
368 using (var fs = new DisposableFileSystem())
369 {
370 var baseFolder = fs.GetFolder();
371
372 var result = WixRunner.Execute(new[]
373 {
374 "build",
375 Path.Combine(folder, "RepairablePermanentWithoutDetectConditionOrUninstallArgumentsOrArpEntry.wxs"),
376 "-o", Path.Combine(baseFolder, "test.wixlib")
377 });
378
379 WixAssert.CompareLineByLine(new[]
380 {
381 "Element 'ExePackage' missing attribute 'DetectCondition' or child element 'ArpEntry'. Exactly one of those is required when attribute 'RepairArguments' is specified.",
382 }, result.Messages.Select(m => m.ToString()).ToArray());
383 Assert.Equal(413, result.ExitCode);
384 }
385 }
386
387 [Fact]
388 public void ErrorWhenNonPermanentWithoutDetectConditionOrUninstallArgumentsOrArpEntry()
389 {
390 var folder = TestData.Get(@"TestData", "ExePackage");
391
392 using (var fs = new DisposableFileSystem())
393 {
394 var baseFolder = fs.GetFolder();
395
396 var result = WixRunner.Execute(new[]
397 {
398 "build",
399 Path.Combine(folder, "NonPermanentWithoutDetectConditionOrUninstallArgumentsOrArpEntry.wxs"),
400 "-o", Path.Combine(baseFolder, "test.wixlib")
401 });
402
403 WixAssert.CompareLineByLine(new[]
404 {
405 "Element 'ExePackage' missing attribute 'DetectCondition' or child element 'ArpEntry'. Exactly one of those is required when attribute 'Permanent' is not specified.",
406 }, result.Messages.Select(m => m.ToString()).ToArray());
407 Assert.Equal(414, result.ExitCode);
35 } 408 }
36 } 409 }
37 410
@@ -60,7 +433,7 @@ namespace WixToolsetTest.CoreIntegration
60 } 433 }
61 434
62 [Fact] 435 [Fact]
63 public void ErrorWhenRequireDetectCondition() 436 public void ErrorWhenUninstallArgumentsWithoutDetectCondition()
64 { 437 {
65 var folder = TestData.Get(@"TestData", "ExePackage"); 438 var folder = TestData.Get(@"TestData", "ExePackage");
66 439
@@ -71,10 +444,14 @@ namespace WixToolsetTest.CoreIntegration
71 var result = WixRunner.Execute(new[] 444 var result = WixRunner.Execute(new[]
72 { 445 {
73 "build", 446 "build",
74 Path.Combine(folder, "RequireDetectCondition.wxs"), 447 Path.Combine(folder, "UninstallArgumentsWithoutDetectCondition.wxs"),
75 "-o", Path.Combine(baseFolder, "test.wixlib") 448 "-o", Path.Combine(baseFolder, "test.wixlib")
76 }); 449 });
77 450
451 WixAssert.CompareLineByLine(new[]
452 {
453 "The ExePackage/@DetectCondition attribute is required to have a value when attribute UninstallArguments is present.",
454 }, result.Messages.Select(m => m.ToString()).ToArray());
78 Assert.Equal(401, result.ExitCode); 455 Assert.Equal(401, result.ExitCode);
79 } 456 }
80 } 457 }