diff options
Diffstat (limited to 'src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs')
-rw-r--r-- | src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs | 478 |
1 files changed, 0 insertions, 478 deletions
diff --git a/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs b/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs deleted file mode 100644 index ab644080..00000000 --- a/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs +++ /dev/null | |||
@@ -1,478 +0,0 @@ | |||
1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | ||
2 | |||
3 | namespace WixToolsetTest.CoreIntegration | ||
4 | { | ||
5 | using System; | ||
6 | using System.Collections.Generic; | ||
7 | using System.IO; | ||
8 | using System.Linq; | ||
9 | using System.Text; | ||
10 | using System.Xml; | ||
11 | using Example.Extension; | ||
12 | using WixBuildTools.TestSupport; | ||
13 | using WixToolset.Core; | ||
14 | using WixToolset.Core.Burn; | ||
15 | using WixToolset.Core.TestPackage; | ||
16 | using WixToolset.Data; | ||
17 | using WixToolset.Data.Burn; | ||
18 | using WixToolset.Data.Symbols; | ||
19 | using WixToolset.Dtf.Resources; | ||
20 | using Xunit; | ||
21 | |||
22 | public class BundleFixture | ||
23 | { | ||
24 | [Fact] | ||
25 | public void CanBuildMultiFileBundle() | ||
26 | { | ||
27 | var folder = TestData.Get(@"TestData\SimpleBundle"); | ||
28 | |||
29 | using (var fs = new DisposableFileSystem()) | ||
30 | { | ||
31 | var baseFolder = fs.GetFolder(); | ||
32 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
33 | |||
34 | var result = WixRunner.Execute(new[] | ||
35 | { | ||
36 | "build", | ||
37 | Path.Combine(folder, "MultiFileBootstrapperApplication.wxs"), | ||
38 | Path.Combine(folder, "MultiFileBundle.wxs"), | ||
39 | "-loc", Path.Combine(folder, "Bundle.en-us.wxl"), | ||
40 | "-bindpath", Path.Combine(folder, "data"), | ||
41 | "-intermediateFolder", intermediateFolder, | ||
42 | "-o", Path.Combine(baseFolder, @"bin\test.exe") | ||
43 | }); | ||
44 | |||
45 | result.AssertSuccess(); | ||
46 | |||
47 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.exe"))); | ||
48 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.wixpdb"))); | ||
49 | } | ||
50 | } | ||
51 | |||
52 | [Fact] | ||
53 | public void CanBuildSimpleBundle() | ||
54 | { | ||
55 | var folder = TestData.Get(@"TestData\SimpleBundle"); | ||
56 | |||
57 | using (var fs = new DisposableFileSystem()) | ||
58 | { | ||
59 | var baseFolder = fs.GetFolder(); | ||
60 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
61 | var exePath = Path.Combine(baseFolder, @"bin\test.exe"); | ||
62 | var pdbPath = Path.Combine(baseFolder, @"bin\test.wixpdb"); | ||
63 | var baFolderPath = Path.Combine(baseFolder, "ba"); | ||
64 | var extractFolderPath = Path.Combine(baseFolder, "extract"); | ||
65 | |||
66 | var result = WixRunner.Execute(new[] | ||
67 | { | ||
68 | "build", | ||
69 | Path.Combine(folder, "Bundle.wxs"), | ||
70 | "-loc", Path.Combine(folder, "Bundle.en-us.wxl"), | ||
71 | "-bindpath", Path.Combine(folder, "data"), | ||
72 | "-intermediateFolder", intermediateFolder, | ||
73 | "-o", exePath, | ||
74 | }); | ||
75 | |||
76 | result.AssertSuccess(); | ||
77 | Assert.Empty(result.Messages.Where(m => m.Level == MessageLevel.Warning)); | ||
78 | |||
79 | Assert.True(File.Exists(exePath)); | ||
80 | Assert.True(File.Exists(pdbPath)); | ||
81 | |||
82 | using (var wixOutput = WixOutput.Read(pdbPath)) | ||
83 | { | ||
84 | |||
85 | var intermediate = Intermediate.Load(wixOutput); | ||
86 | var section = intermediate.Sections.Single(); | ||
87 | |||
88 | var bundleSymbol = section.Symbols.OfType<WixBundleSymbol>().Single(); | ||
89 | Assert.Equal("1.0.0.0", bundleSymbol.Version); | ||
90 | |||
91 | var previousVersion = bundleSymbol.Fields[(int)WixBundleSymbolFields.Version].PreviousValue; | ||
92 | Assert.Equal("!(bind.packageVersion.test.msi)", previousVersion.AsString()); | ||
93 | |||
94 | var msiSymbol = section.Symbols.OfType<WixBundlePackageSymbol>().Single(); | ||
95 | Assert.Equal("test.msi", msiSymbol.Id.Id); | ||
96 | |||
97 | var extractResult = BundleExtractor.ExtractBAContainer(null, exePath, baFolderPath, extractFolderPath); | ||
98 | extractResult.AssertSuccess(); | ||
99 | |||
100 | var burnManifestData = wixOutput.GetData(BurnConstants.BurnManifestWixOutputStreamName); | ||
101 | var extractedBurnManifestData = File.ReadAllText(Path.Combine(baFolderPath, "manifest.xml"), Encoding.UTF8); | ||
102 | Assert.Equal(extractedBurnManifestData, burnManifestData); | ||
103 | |||
104 | var baManifestData = wixOutput.GetData(BurnConstants.BootstrapperApplicationDataWixOutputStreamName); | ||
105 | var extractedBaManifestData = File.ReadAllText(Path.Combine(baFolderPath, "BootstrapperApplicationData.xml"), Encoding.UTF8); | ||
106 | Assert.Equal(extractedBaManifestData, baManifestData); | ||
107 | |||
108 | var bextManifestData = wixOutput.GetData(BurnConstants.BundleExtensionDataWixOutputStreamName); | ||
109 | var extractedBextManifestData = File.ReadAllText(Path.Combine(baFolderPath, "BundleExtensionData.xml"), Encoding.UTF8); | ||
110 | Assert.Equal(extractedBextManifestData, bextManifestData); | ||
111 | |||
112 | var logElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Log"); | ||
113 | var logElement = (XmlNode)Assert.Single(logElements); | ||
114 | Assert.Equal("<Log PathVariable='WixBundleLog' Prefix='~TestBundle' Extension='log' />", logElement.GetTestXml()); | ||
115 | |||
116 | var registrationElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Registration"); | ||
117 | var registrationElement = (XmlNode)Assert.Single(registrationElements); | ||
118 | Assert.Equal($"<Registration Id='{bundleSymbol.BundleId}' ExecutableName='test.exe' PerMachine='yes' Tag='' Version='1.0.0.0' ProviderKey='{bundleSymbol.BundleId}'>" + | ||
119 | "<Arp Register='yes' DisplayName='~TestBundle' DisplayVersion='1.0.0.0' Publisher='Example Corporation' />" + | ||
120 | "</Registration>", registrationElement.GetTestXml()); | ||
121 | |||
122 | var msiPayloads = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Payload[@Id='test.msi']"); | ||
123 | var msiPayload = (XmlNode)Assert.Single(msiPayloads); | ||
124 | Assert.Equal("<Payload Id='test.msi' FilePath='test.msi' FileSize='*' Hash='*' Packaging='embedded' SourcePath='a0' Container='WixAttachedContainer' />", | ||
125 | msiPayload.GetTestXml(new Dictionary<string, List<string>>() { { "Payload", new List<string> { "FileSize", "Hash" } } })); | ||
126 | } | ||
127 | |||
128 | var manifestResource = new Resource(ResourceType.Manifest, "#1", 1033); | ||
129 | manifestResource.Load(exePath); | ||
130 | var actualManifestData = Encoding.UTF8.GetString(manifestResource.Data); | ||
131 | Assert.Equal("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + | ||
132 | "<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">" + | ||
133 | "<assemblyIdentity name=\"test.exe\" version=\"1.0.0.0\" processorArchitecture=\"x86\" type=\"win32\" />" + | ||
134 | "<description>~TestBundle</description>" + | ||
135 | "<dependency><dependentAssembly><assemblyIdentity name=\"Microsoft.Windows.Common-Controls\" version=\"6.0.0.0\" processorArchitecture=\"x86\" publicKeyToken=\"6595b64144ccf1df\" language=\"*\" type=\"win32\" /></dependentAssembly></dependency>" + | ||
136 | "<compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\"><application><supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" /><supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" /><supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" /><supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" /><supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" /></application></compatibility>" + | ||
137 | "<trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v3\"><security><requestedPrivileges><requestedExecutionLevel level=\"asInvoker\" uiAccess=\"false\" /></requestedPrivileges></security></trustInfo>" + | ||
138 | "<application xmlns=\"urn:schemas-microsoft-com:asm.v3\"><windowsSettings><dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware><dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">PerMonitorV2, PerMonitor</dpiAwareness></windowsSettings></application>" + | ||
139 | "</assembly>", actualManifestData); | ||
140 | } | ||
141 | } | ||
142 | |||
143 | [Fact] | ||
144 | public void CanBuildX64Bundle() | ||
145 | { | ||
146 | var folder = TestData.Get(@"TestData\SimpleBundle"); | ||
147 | |||
148 | using (var fs = new DisposableFileSystem()) | ||
149 | { | ||
150 | var baseFolder = fs.GetFolder(); | ||
151 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
152 | var exePath = Path.Combine(baseFolder, @"bin\test.exe"); | ||
153 | var pdbPath = Path.Combine(baseFolder, @"bin\test.wixpdb"); | ||
154 | var baFolderPath = Path.Combine(baseFolder, "ba"); | ||
155 | var extractFolderPath = Path.Combine(baseFolder, "extract"); | ||
156 | |||
157 | var result = WixRunner.Execute(false, new[] // TODO: go back to elevating warnings as errors. | ||
158 | { | ||
159 | "build", | ||
160 | "-arch", "x64", | ||
161 | Path.Combine(folder, "Bundle.wxs"), | ||
162 | "-loc", Path.Combine(folder, "Bundle.en-us.wxl"), | ||
163 | "-bindpath", Path.Combine(folder, "data"), | ||
164 | "-intermediateFolder", intermediateFolder, | ||
165 | "-o", exePath, | ||
166 | }); | ||
167 | |||
168 | result.AssertSuccess(); | ||
169 | var warning = Assert.Single(result.Messages.Where(m => m.Level == MessageLevel.Warning)); | ||
170 | Assert.Equal((int)WarningMessages.Ids.ExperimentalBundlePlatform, warning.Id); | ||
171 | |||
172 | Assert.True(File.Exists(exePath)); | ||
173 | Assert.True(File.Exists(pdbPath)); | ||
174 | |||
175 | var manifestResource = new Resource(ResourceType.Manifest, "#1", 1033); | ||
176 | manifestResource.Load(exePath); | ||
177 | var actualManifestData = Encoding.UTF8.GetString(manifestResource.Data); | ||
178 | Assert.Equal("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + | ||
179 | "<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">" + | ||
180 | "<assemblyIdentity name=\"test.exe\" version=\"1.0.0.0\" processorArchitecture=\"amd64\" type=\"win32\" />" + | ||
181 | "<description>~TestBundle</description>" + | ||
182 | "<dependency><dependentAssembly><assemblyIdentity name=\"Microsoft.Windows.Common-Controls\" version=\"6.0.0.0\" processorArchitecture=\"amd64\" publicKeyToken=\"6595b64144ccf1df\" language=\"*\" type=\"win32\" /></dependentAssembly></dependency>" + | ||
183 | "<compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\"><application><supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" /><supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" /><supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" /><supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" /><supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" /></application></compatibility>" + | ||
184 | "<trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v3\"><security><requestedPrivileges><requestedExecutionLevel level=\"asInvoker\" uiAccess=\"false\" /></requestedPrivileges></security></trustInfo>" + | ||
185 | "<application xmlns=\"urn:schemas-microsoft-com:asm.v3\"><windowsSettings><dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware><dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">PerMonitorV2, PerMonitor</dpiAwareness></windowsSettings></application>" + | ||
186 | "</assembly>", actualManifestData); | ||
187 | } | ||
188 | } | ||
189 | |||
190 | [Fact] | ||
191 | public void CanBuildSimpleBundleUsingExtensionBA() | ||
192 | { | ||
193 | var extensionPath = Path.GetFullPath(new Uri(typeof(ExampleExtensionFactory).Assembly.CodeBase).LocalPath); | ||
194 | var folder = TestData.Get(@"TestData\SimpleBundle"); | ||
195 | |||
196 | using (var fs = new DisposableFileSystem()) | ||
197 | { | ||
198 | var baseFolder = fs.GetFolder(); | ||
199 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
200 | |||
201 | var result = WixRunner.Execute(new[] | ||
202 | { | ||
203 | "build", | ||
204 | Path.Combine(folder, "MultiFileBundle.wxs"), | ||
205 | "-loc", Path.Combine(folder, "Bundle.en-us.wxl"), | ||
206 | "-ext", extensionPath, | ||
207 | "-bindpath", Path.Combine(folder, "data"), | ||
208 | "-intermediateFolder", intermediateFolder, | ||
209 | "-o", Path.Combine(baseFolder, @"bin\test.exe") | ||
210 | }); | ||
211 | |||
212 | result.AssertSuccess(); | ||
213 | |||
214 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.exe"))); | ||
215 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.wixpdb"))); | ||
216 | } | ||
217 | } | ||
218 | |||
219 | [Fact] | ||
220 | public void CanBuildSingleExeBundle() | ||
221 | { | ||
222 | var folder = TestData.Get(@"TestData"); | ||
223 | |||
224 | using (var fs = new DisposableFileSystem()) | ||
225 | { | ||
226 | var baseFolder = fs.GetFolder(); | ||
227 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
228 | var exePath = Path.Combine(baseFolder, @"bin\test.exe"); | ||
229 | |||
230 | var result = WixRunner.Execute(new[] | ||
231 | { | ||
232 | "build", | ||
233 | Path.Combine(folder, "SingleExeBundle", "SingleExePackageGroup.wxs"), | ||
234 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), | ||
235 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), | ||
236 | "-bindpath", Path.Combine(folder, ".Data"), | ||
237 | "-intermediateFolder", intermediateFolder, | ||
238 | "-o", exePath, | ||
239 | }); | ||
240 | |||
241 | result.AssertSuccess(); | ||
242 | |||
243 | Assert.True(File.Exists(exePath)); | ||
244 | } | ||
245 | } | ||
246 | |||
247 | [Fact] | ||
248 | public void CanBuildSingleExeRemotePayloadBundle() | ||
249 | { | ||
250 | var folder = TestData.Get(@"TestData"); | ||
251 | |||
252 | using (var fs = new DisposableFileSystem()) | ||
253 | { | ||
254 | var baseFolder = fs.GetFolder(); | ||
255 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
256 | var exePath = Path.Combine(baseFolder, @"bin\test.exe"); | ||
257 | var pdbPath = Path.Combine(baseFolder, @"bin\test.wixpdb"); | ||
258 | |||
259 | var result = WixRunner.Execute(new[] | ||
260 | { | ||
261 | "build", | ||
262 | Path.Combine(folder, "SingleExeBundle", "SingleExeRemotePayload.wxs"), | ||
263 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), | ||
264 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), | ||
265 | "-intermediateFolder", intermediateFolder, | ||
266 | "-o", exePath, | ||
267 | }); | ||
268 | |||
269 | result.AssertSuccess(); | ||
270 | |||
271 | Assert.True(File.Exists(exePath)); | ||
272 | Assert.True(File.Exists(pdbPath)); | ||
273 | |||
274 | using (var wixOutput = WixOutput.Read(pdbPath)) | ||
275 | { | ||
276 | var intermediate = Intermediate.Load(wixOutput); | ||
277 | var section = intermediate.Sections.Single(); | ||
278 | |||
279 | var payloadSymbol = section.Symbols.OfType<WixBundlePayloadSymbol>().Where(x => x.Id.Id == "NetFx462Web").Single(); | ||
280 | Assert.Equal(Int64.MaxValue, payloadSymbol.FileSize); | ||
281 | } | ||
282 | } | ||
283 | } | ||
284 | |||
285 | [Fact] | ||
286 | public void CantBuildWithDuplicateCacheIds() | ||
287 | { | ||
288 | var folder = TestData.Get(@"TestData"); | ||
289 | |||
290 | using (var fs = new DisposableFileSystem()) | ||
291 | { | ||
292 | var baseFolder = fs.GetFolder(); | ||
293 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
294 | var exePath = Path.Combine(baseFolder, @"bin\test.exe"); | ||
295 | |||
296 | var result = WixRunner.Execute(new[] | ||
297 | { | ||
298 | "build", | ||
299 | Path.Combine(folder, "BadInput", "DuplicateCacheIds.wxs"), | ||
300 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), | ||
301 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), | ||
302 | "-bindpath", Path.Combine(folder, ".Data"), | ||
303 | "-intermediateFolder", intermediateFolder, | ||
304 | "-o", exePath, | ||
305 | }); | ||
306 | |||
307 | Assert.Equal(8001, result.ExitCode); | ||
308 | } | ||
309 | } | ||
310 | |||
311 | [Fact] | ||
312 | public void CantBuildWithDuplicatePayloadNames() | ||
313 | { | ||
314 | var folder = TestData.Get(@"TestData"); | ||
315 | |||
316 | using (var fs = new DisposableFileSystem()) | ||
317 | { | ||
318 | var baseFolder = fs.GetFolder(); | ||
319 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
320 | var exePath = Path.Combine(baseFolder, @"bin\test.exe"); | ||
321 | |||
322 | var result = WixRunner.Execute(new[] | ||
323 | { | ||
324 | "build", | ||
325 | Path.Combine(folder, "BadInput", "DuplicatePayloadNames.wxs"), | ||
326 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), | ||
327 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), | ||
328 | "-bindpath", Path.Combine(folder, ".Data"), | ||
329 | "-intermediateFolder", intermediateFolder, | ||
330 | "-o", exePath, | ||
331 | }); | ||
332 | |||
333 | var attachedContainerWarnings = result.Messages.Where(m => m.Id == (int)BurnBackendWarnings.Ids.AttachedContainerPayloadCollision) | ||
334 | .Select(m => m.ToString()) | ||
335 | .ToArray(); | ||
336 | WixAssert.CompareLineByLine(new string[] | ||
337 | { | ||
338 | "The Payload 'Auto2' has a duplicate Name 'burn.exe' in the attached container. When extracting the bundle with dark.exe, the file will get overwritten.", | ||
339 | }, attachedContainerWarnings); | ||
340 | |||
341 | var baContainerErrors = result.Messages.Where(m => m.Id == (int)BurnBackendErrors.Ids.BAContainerPayloadCollision) | ||
342 | .Select(m => m.ToString()) | ||
343 | .ToArray(); | ||
344 | WixAssert.CompareLineByLine(new string[] | ||
345 | { | ||
346 | "The Payload 'DuplicatePayloadNames.wxs' has a duplicate Name 'fakeba.dll' in the BA container. When extracting the container at runtime, the file will get overwritten.", | ||
347 | "The Payload 'uxTxMXPVMXwQrPTMIGa5WGt93w0Ns' has a duplicate Name 'BootstrapperApplicationData.xml' in the BA container. When extracting the container at runtime, the file will get overwritten.", | ||
348 | "The Payload 'uxYRbgitOs0K878jn5L_z7LdJ21KI' has a duplicate Name 'BundleExtensionData.xml' in the BA container. When extracting the container at runtime, the file will get overwritten.", | ||
349 | }, baContainerErrors); | ||
350 | |||
351 | var externalErrors = result.Messages.Where(m => m.Id == (int)BurnBackendErrors.Ids.ExternalPayloadCollision) | ||
352 | .Select(m => m.ToString()) | ||
353 | .ToArray(); | ||
354 | WixAssert.CompareLineByLine(new string[] | ||
355 | { | ||
356 | "The external Payload 'HiddenPersistedBundleVariable.wxs' has a duplicate Name 'PayloadCollision'. When building the bundle or laying out the bundle, the file will get overwritten.", | ||
357 | "The external Container 'MsiPackagesContainer' has a duplicate Name 'ContainerCollision'. When building the bundle or laying out the bundle, the file will get overwritten.", | ||
358 | }, externalErrors); | ||
359 | |||
360 | var packageCacheErrors = result.Messages.Where(m => m.Id == (int)BurnBackendErrors.Ids.PackageCachePayloadCollision) | ||
361 | .Select(m => m.ToString()) | ||
362 | .ToArray(); | ||
363 | WixAssert.CompareLineByLine(new string[] | ||
364 | { | ||
365 | "The Payload 'test.msi' has a duplicate Name 'test.msi' in package 'test.msi'. When caching the package, the file will get overwritten.", | ||
366 | }, packageCacheErrors); | ||
367 | |||
368 | Assert.Equal(14, result.Messages.Length); | ||
369 | } | ||
370 | } | ||
371 | |||
372 | [Fact] | ||
373 | public void CantBuildWithOrphanPayload() | ||
374 | { | ||
375 | var folder = TestData.Get(@"TestData"); | ||
376 | |||
377 | using (var fs = new DisposableFileSystem()) | ||
378 | { | ||
379 | var baseFolder = fs.GetFolder(); | ||
380 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
381 | var exePath = Path.Combine(baseFolder, @"bin\test.exe"); | ||
382 | |||
383 | var result = WixRunner.Execute(new[] | ||
384 | { | ||
385 | "build", | ||
386 | Path.Combine(folder, "BadInput", "OrphanPayload.wxs"), | ||
387 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), | ||
388 | Path.Combine(folder, "BundleWithPackageGroupRef", "MinimalPackageGroup.wxs"), | ||
389 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), | ||
390 | "-bindpath", Path.Combine(folder, ".Data"), | ||
391 | "-intermediateFolder", intermediateFolder, | ||
392 | "-o", exePath, | ||
393 | }); | ||
394 | |||
395 | Assert.Equal((int)LinkerErrors.Ids.OrphanedPayload, result.ExitCode); | ||
396 | } | ||
397 | } | ||
398 | |||
399 | [Fact] | ||
400 | public void CantBuildWithPackageInMultipleContainers() | ||
401 | { | ||
402 | var folder = TestData.Get(@"TestData"); | ||
403 | |||
404 | using (var fs = new DisposableFileSystem()) | ||
405 | { | ||
406 | var baseFolder = fs.GetFolder(); | ||
407 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
408 | var exePath = Path.Combine(baseFolder, @"bin\test.exe"); | ||
409 | |||
410 | var result = WixRunner.Execute(new[] | ||
411 | { | ||
412 | "build", | ||
413 | Path.Combine(folder, "BadInput", "PackageInMultipleContainers.wxs"), | ||
414 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), | ||
415 | Path.Combine(folder, "BundleWithPackageGroupRef", "MinimalPackageGroup.wxs"), | ||
416 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), | ||
417 | "-bindpath", Path.Combine(folder, ".Data"), | ||
418 | "-intermediateFolder", intermediateFolder, | ||
419 | "-o", exePath, | ||
420 | }); | ||
421 | |||
422 | Assert.Equal((int)LinkerErrors.Ids.PackageInMultipleContainers, result.ExitCode); | ||
423 | } | ||
424 | } | ||
425 | |||
426 | [Fact] | ||
427 | public void CantBuildWithUnscheduledPackage() | ||
428 | { | ||
429 | var folder = TestData.Get(@"TestData"); | ||
430 | |||
431 | using (var fs = new DisposableFileSystem()) | ||
432 | { | ||
433 | var baseFolder = fs.GetFolder(); | ||
434 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
435 | var exePath = Path.Combine(baseFolder, @"bin\test.exe"); | ||
436 | |||
437 | var result = WixRunner.Execute(new[] | ||
438 | { | ||
439 | "build", | ||
440 | Path.Combine(folder, "BadInput", "UnscheduledPackage.wxs"), | ||
441 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), | ||
442 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), | ||
443 | "-bindpath", Path.Combine(folder, ".Data"), | ||
444 | "-intermediateFolder", intermediateFolder, | ||
445 | "-o", exePath, | ||
446 | }); | ||
447 | |||
448 | Assert.Equal((int)LinkerErrors.Ids.UnscheduledChainPackage, result.ExitCode); | ||
449 | } | ||
450 | } | ||
451 | |||
452 | [Fact] | ||
453 | public void CantBuildWithUnscheduledRollbackBoundary() | ||
454 | { | ||
455 | var folder = TestData.Get(@"TestData"); | ||
456 | |||
457 | using (var fs = new DisposableFileSystem()) | ||
458 | { | ||
459 | var baseFolder = fs.GetFolder(); | ||
460 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
461 | var exePath = Path.Combine(baseFolder, @"bin\test.exe"); | ||
462 | |||
463 | var result = WixRunner.Execute(new[] | ||
464 | { | ||
465 | "build", | ||
466 | Path.Combine(folder, "BadInput", "UnscheduledRollbackBoundary.wxs"), | ||
467 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), | ||
468 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), | ||
469 | "-bindpath", Path.Combine(folder, ".Data"), | ||
470 | "-intermediateFolder", intermediateFolder, | ||
471 | "-o", exePath, | ||
472 | }); | ||
473 | |||
474 | Assert.Equal((int)LinkerErrors.Ids.UnscheduledRollbackBoundary, result.ExitCode); | ||
475 | } | ||
476 | } | ||
477 | } | ||
478 | } | ||