diff options
Diffstat (limited to 'src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs')
-rw-r--r-- | src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs | 389 |
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 | ||
3 | namespace WixToolsetTest.CoreIntegration | 3 | namespace 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 | } |