diff options
Diffstat (limited to 'src/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs')
-rw-r--r-- | src/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs | 1040 |
1 files changed, 0 insertions, 1040 deletions
diff --git a/src/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs b/src/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs deleted file mode 100644 index 71edddc6..00000000 --- a/src/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs +++ /dev/null | |||
@@ -1,1040 +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.IO; | ||
7 | using System.Linq; | ||
8 | using Example.Extension; | ||
9 | using WixBuildTools.TestSupport; | ||
10 | using WixToolset.Core.TestPackage; | ||
11 | using WixToolset.Data; | ||
12 | using WixToolset.Data.Symbols; | ||
13 | using WixToolset.Data.WindowsInstaller; | ||
14 | using Xunit; | ||
15 | |||
16 | public class MsiQueryFixture | ||
17 | { | ||
18 | [Fact] | ||
19 | public void PopulatesAppIdTableWhenAdvertised() | ||
20 | { | ||
21 | var folder = TestData.Get(@"TestData"); | ||
22 | |||
23 | using (var fs = new DisposableFileSystem()) | ||
24 | { | ||
25 | var baseFolder = fs.GetFolder(); | ||
26 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
27 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
28 | |||
29 | var result = WixRunner.Execute(new[] | ||
30 | { | ||
31 | "build", | ||
32 | Path.Combine(folder, "AppId", "Advertised.wxs"), | ||
33 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
34 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
35 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
36 | "-intermediateFolder", intermediateFolder, | ||
37 | "-o", msiPath | ||
38 | }); | ||
39 | |||
40 | result.AssertSuccess(); | ||
41 | |||
42 | Assert.True(File.Exists(msiPath)); | ||
43 | var results = Query.QueryDatabase(msiPath, new[] { "AppId" }); | ||
44 | WixAssert.CompareLineByLine(new[] | ||
45 | { | ||
46 | "AppId:{D6040299-B15C-4C94-AE26-0C9B60D14C35}\t\t\t\t\t\t", | ||
47 | }, results); | ||
48 | } | ||
49 | } | ||
50 | |||
51 | [Fact] | ||
52 | public void PopulatesAppSearchTablesFromComponentSearch() | ||
53 | { | ||
54 | var folder = TestData.Get(@"TestData"); | ||
55 | |||
56 | using (var fs = new DisposableFileSystem()) | ||
57 | { | ||
58 | var baseFolder = fs.GetFolder(); | ||
59 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
60 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
61 | |||
62 | var result = WixRunner.Execute(new[] | ||
63 | { | ||
64 | "build", | ||
65 | Path.Combine(folder, "AppSearch", "ComponentSearch.wxs"), | ||
66 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
67 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
68 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
69 | "-intermediateFolder", intermediateFolder, | ||
70 | "-o", msiPath | ||
71 | }); | ||
72 | |||
73 | result.AssertSuccess(); | ||
74 | |||
75 | Assert.True(File.Exists(msiPath)); | ||
76 | var results = Query.QueryDatabase(msiPath, new[] { "AppSearch", "CompLocator" }); | ||
77 | WixAssert.CompareLineByLine(new[] | ||
78 | { | ||
79 | "AppSearch:SAMPLECOMPFOUND\tSampleCompSearch", | ||
80 | "CompLocator:SampleCompSearch\t{4D9A0D20-D0CC-40DE-B580-EAD38B985217}\t1", | ||
81 | }, results); | ||
82 | } | ||
83 | } | ||
84 | |||
85 | [Fact] | ||
86 | public void PopulatesAppSearchTablesFromDirectorySearch() | ||
87 | { | ||
88 | var folder = TestData.Get(@"TestData"); | ||
89 | |||
90 | using (var fs = new DisposableFileSystem()) | ||
91 | { | ||
92 | var baseFolder = fs.GetFolder(); | ||
93 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
94 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
95 | |||
96 | var result = WixRunner.Execute(new[] | ||
97 | { | ||
98 | "build", | ||
99 | Path.Combine(folder, "AppSearch", "DirectorySearch.wxs"), | ||
100 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
101 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
102 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
103 | "-intermediateFolder", intermediateFolder, | ||
104 | "-o", msiPath | ||
105 | }); | ||
106 | |||
107 | result.AssertSuccess(); | ||
108 | |||
109 | Assert.True(File.Exists(msiPath)); | ||
110 | var results = Query.QueryDatabase(msiPath, new[] { "AppSearch", "DrLocator" }); | ||
111 | WixAssert.CompareLineByLine(new[] | ||
112 | { | ||
113 | "AppSearch:SAMPLEDIRFOUND\tSampleDirSearch", | ||
114 | "DrLocator:SampleDirSearch\t\tC:\\SampleDir\t", | ||
115 | }, results); | ||
116 | } | ||
117 | } | ||
118 | |||
119 | [Fact] | ||
120 | public void PopulatesAppSearchTablesFromFileSearch() | ||
121 | { | ||
122 | var folder = TestData.Get(@"TestData"); | ||
123 | |||
124 | using (var fs = new DisposableFileSystem()) | ||
125 | { | ||
126 | var baseFolder = fs.GetFolder(); | ||
127 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
128 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
129 | |||
130 | var result = WixRunner.Execute(new[] | ||
131 | { | ||
132 | "build", | ||
133 | Path.Combine(folder, "AppSearch", "FileSearch.wxs"), | ||
134 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
135 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
136 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
137 | "-intermediateFolder", intermediateFolder, | ||
138 | "-o", msiPath | ||
139 | }); | ||
140 | |||
141 | result.AssertSuccess(); | ||
142 | |||
143 | Assert.True(File.Exists(msiPath)); | ||
144 | var results = Query.QueryDatabase(msiPath, new[] { "AppSearch", "DrLocator", "IniLocator" }); | ||
145 | WixAssert.CompareLineByLine(new[] | ||
146 | { | ||
147 | "AppSearch:SAMPLEFILEFOUND\tSampleFileSearch", | ||
148 | "DrLocator:SampleFileSearch\tSampleIniFileSearch\t\t", | ||
149 | "IniLocator:SampleFileSearch\tsample.fil\tMySection\tMyKey\t\t1", | ||
150 | }, results); | ||
151 | } | ||
152 | } | ||
153 | |||
154 | [Fact] | ||
155 | public void PopulatesAppSearchTablesFromRegistrySearch() | ||
156 | { | ||
157 | var folder = TestData.Get(@"TestData"); | ||
158 | |||
159 | using (var fs = new DisposableFileSystem()) | ||
160 | { | ||
161 | var baseFolder = fs.GetFolder(); | ||
162 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
163 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
164 | |||
165 | var result = WixRunner.Execute(new[] | ||
166 | { | ||
167 | "build", | ||
168 | Path.Combine(folder, "AppSearch", "RegistrySearch.wxs"), | ||
169 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
170 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
171 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
172 | "-intermediateFolder", intermediateFolder, | ||
173 | "-o", msiPath | ||
174 | }); | ||
175 | |||
176 | result.AssertSuccess(); | ||
177 | |||
178 | Assert.True(File.Exists(msiPath)); | ||
179 | var results = Query.QueryDatabase(msiPath, new[] { "AppSearch", "RegLocator" }); | ||
180 | WixAssert.CompareLineByLine(new[] | ||
181 | { | ||
182 | "AppSearch:SAMPLEREGFOUND\tSampleRegSearch", | ||
183 | "RegLocator:SampleRegSearch\t2\tSampleReg\t\t2", | ||
184 | }, results); | ||
185 | } | ||
186 | } | ||
187 | |||
188 | [Fact] | ||
189 | public void PopulatesAppSearchTablesFromRegistrySearch64() | ||
190 | { | ||
191 | var folder = TestData.Get(@"TestData"); | ||
192 | |||
193 | using (var fs = new DisposableFileSystem()) | ||
194 | { | ||
195 | var baseFolder = fs.GetFolder(); | ||
196 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
197 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
198 | |||
199 | var result = WixRunner.Execute(new[] | ||
200 | { | ||
201 | "build", | ||
202 | Path.Combine(folder, "AppSearch", "RegistrySearch64.wxs"), | ||
203 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
204 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
205 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
206 | "-intermediateFolder", intermediateFolder, | ||
207 | "-o", msiPath | ||
208 | }); | ||
209 | |||
210 | result.AssertSuccess(); | ||
211 | |||
212 | Assert.True(File.Exists(msiPath)); | ||
213 | var results = Query.QueryDatabase(msiPath, new[] { "AppSearch", "RegLocator" }); | ||
214 | WixAssert.CompareLineByLine(new[] | ||
215 | { | ||
216 | "AppSearch:SAMPLEREGFOUND\tSampleRegSearch", | ||
217 | "RegLocator:SampleRegSearch\t2\tSampleReg\t\t18", | ||
218 | }, results); | ||
219 | } | ||
220 | } | ||
221 | |||
222 | [Fact] | ||
223 | public void PopulatesClassTablesWhenIconIndexIsZero() | ||
224 | { | ||
225 | var folder = TestData.Get(@"TestData"); | ||
226 | |||
227 | using (var fs = new DisposableFileSystem()) | ||
228 | { | ||
229 | var baseFolder = fs.GetFolder(); | ||
230 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
231 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
232 | |||
233 | var result = WixRunner.Execute(new[] | ||
234 | { | ||
235 | "build", | ||
236 | Path.Combine(folder, "Class", "IconIndex0.wxs"), | ||
237 | Path.Combine(folder, "Icon", "SampleIcon.wxs"), | ||
238 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
239 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
240 | "-bindpath", Path.Combine(folder, ".Data"), | ||
241 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
242 | "-intermediateFolder", intermediateFolder, | ||
243 | "-o", msiPath | ||
244 | }); | ||
245 | |||
246 | result.AssertSuccess(); | ||
247 | |||
248 | Assert.True(File.Exists(msiPath)); | ||
249 | var results = Query.QueryDatabase(msiPath, new[] { "Class" }); | ||
250 | WixAssert.CompareLineByLine(new[] | ||
251 | { | ||
252 | "Class:{3FAED4CC-C473-4B8A-BE8B-303871377A4A}\tLocalServer32\tClassComp\t\tFakeClass3FAE\t\t\tSampleIcon\t0\t\t\tProductFeature\t", | ||
253 | }, results); | ||
254 | } | ||
255 | } | ||
256 | |||
257 | [Fact] | ||
258 | public void PopulatesClassTablesWhenProgIdIsNestedUnderAdvertisedClass() | ||
259 | { | ||
260 | var folder = TestData.Get(@"TestData"); | ||
261 | |||
262 | using (var fs = new DisposableFileSystem()) | ||
263 | { | ||
264 | var baseFolder = fs.GetFolder(); | ||
265 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
266 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
267 | |||
268 | var result = WixRunner.Execute(new[] | ||
269 | { | ||
270 | "build", | ||
271 | Path.Combine(folder, "ProgId", "NestedUnderClass.wxs"), | ||
272 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
273 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
274 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
275 | "-intermediateFolder", intermediateFolder, | ||
276 | "-o", msiPath | ||
277 | }); | ||
278 | |||
279 | result.AssertSuccess(); | ||
280 | |||
281 | Assert.True(File.Exists(msiPath)); | ||
282 | var results = Query.QueryDatabase(msiPath, new[] { "Class", "ProgId", "Registry" }); | ||
283 | WixAssert.CompareLineByLine(new[] | ||
284 | { | ||
285 | "Class:{F12A6F69-117F-471F-AE73-F8E74218F498}\tLocalServer32\tProgIdComp\t73E7DF7E-EFAC-4E11-90E2-6EBAEB8DE58D\tFakeClassF12A\t\t\t\t\t\t\tProductFeature\t", | ||
286 | "ProgId:73E7DF7E-EFAC-4E11-90E2-6EBAEB8DE58D\t\t{F12A6F69-117F-471F-AE73-F8E74218F498}\tFakeClassF12A\t\t", | ||
287 | "Registry:regUIIK326nDZpkWHuexeF58EikQvA\t0\t73E7DF7E-EFAC-4E11-90E2-6EBAEB8DE58D\tNoOpen\tNoOpen73E7\tProgIdComp", | ||
288 | "Registry:regvrhMurMp98anbQJkpgA8yJCefdM\t0\tCLSID\\{F12A6F69-117F-471F-AE73-F8E74218F498}\\Version\t\t0.0.0.1\tProgIdComp", | ||
289 | "Registry:regY1F4E2lvu_Up6gV6c3jeN5ukn8s\t0\tCLSID\\{F12A6F69-117F-471F-AE73-F8E74218F498}\\LocalServer32\tThreadingModel\tApartment\tProgIdComp", | ||
290 | }, results); | ||
291 | } | ||
292 | } | ||
293 | |||
294 | [Fact] | ||
295 | public void PopulatesControlTables() | ||
296 | { | ||
297 | var folder = TestData.Get(@"TestData"); | ||
298 | |||
299 | using (var fs = new DisposableFileSystem()) | ||
300 | { | ||
301 | var baseFolder = fs.GetFolder(); | ||
302 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
303 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
304 | |||
305 | var result = WixRunner.Execute(new[] | ||
306 | { | ||
307 | "build", | ||
308 | Path.Combine(folder, "DialogsInInstallUISequence", "PackageComponents.wxs"), | ||
309 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
310 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
311 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
312 | "-intermediateFolder", intermediateFolder, | ||
313 | "-o", msiPath, | ||
314 | }); | ||
315 | |||
316 | result.AssertSuccess(); | ||
317 | |||
318 | Assert.True(File.Exists(msiPath)); | ||
319 | |||
320 | var results = Query.QueryDatabase(msiPath, new[] { "CheckBox", "Control", "ControlCondition", "InstallUISequence" }); | ||
321 | WixAssert.CompareLineByLine(new[] | ||
322 | { | ||
323 | "CheckBox:WIXUI_EXITDIALOGOPTIONALCHECKBOX\t1", | ||
324 | "Control:FirstDialog\tHeader\tText\t0\t13\t90\t13\t3\t\tFirstDialogHeader\tTitle\t", | ||
325 | "Control:FirstDialog\tTitle\tText\t0\t0\t90\t13\t3\t\tFirstDialogTitle\tHeader\t", | ||
326 | "Control:SecondDialog\tOptionalCheckBox\tCheckBox\t0\t13\t100\t40\t2\tWIXUI_EXITDIALOGOPTIONALCHECKBOX\t[WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT]\tTitle\tOptional checkbox|Check this box for fun", | ||
327 | "Control:SecondDialog\tTitle\tText\t0\t0\t90\t13\t3\t\tSecondDialogTitle\tOptionalCheckBox\t", | ||
328 | "ControlCondition:FirstDialog\tHeader\tDisable\tInstalled", | ||
329 | "ControlCondition:FirstDialog\tHeader\tHide\tInstalled", | ||
330 | "ControlCondition:SecondDialog\tOptionalCheckBox\tShow\tWIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT AND NOT Installed", | ||
331 | "InstallUISequence:CostFinalize\t\t1000", | ||
332 | "InstallUISequence:CostInitialize\t\t800", | ||
333 | "InstallUISequence:ExecuteAction\t\t1300", | ||
334 | "InstallUISequence:FileCost\t\t900", | ||
335 | "InstallUISequence:FindRelatedProducts\t\t25", | ||
336 | "InstallUISequence:FirstDialog\tInstalled AND PATCH\t1298", | ||
337 | "InstallUISequence:LaunchConditions\t\t100", | ||
338 | "InstallUISequence:MigrateFeatureStates\t\t1200", | ||
339 | "InstallUISequence:SecondDialog\tNOT Installed\t1299", | ||
340 | "InstallUISequence:ValidateProductID\t\t700", | ||
341 | }, results); | ||
342 | } | ||
343 | } | ||
344 | |||
345 | [Fact] | ||
346 | public void PopulatesCreateFolderTableForNullKeypathComponents() | ||
347 | { | ||
348 | var folder = TestData.Get(@"TestData\Components"); | ||
349 | |||
350 | using (var fs = new DisposableFileSystem()) | ||
351 | { | ||
352 | var baseFolder = fs.GetFolder(); | ||
353 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
354 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
355 | |||
356 | var result = WixRunner.Execute(new[] | ||
357 | { | ||
358 | "build", | ||
359 | Path.Combine(folder, "Package.wxs"), | ||
360 | Path.Combine(folder, "PackageComponents.wxs"), | ||
361 | "-loc", Path.Combine(folder, "Package.en-us.wxl"), | ||
362 | "-bindpath", Path.Combine(folder, "data"), | ||
363 | "-intermediateFolder", intermediateFolder, | ||
364 | "-o", msiPath | ||
365 | }); | ||
366 | |||
367 | result.AssertSuccess(); | ||
368 | |||
369 | Assert.True(File.Exists(msiPath)); | ||
370 | var results = Query.QueryDatabase(msiPath, new[] { "CreateFolder" }); | ||
371 | WixAssert.CompareLineByLine(new[] | ||
372 | { | ||
373 | "CreateFolder:INSTALLFOLDER\tNullKeypathComponent", | ||
374 | }, results); | ||
375 | } | ||
376 | } | ||
377 | |||
378 | [Fact] | ||
379 | public void PopulatesDirectoryTableWithValidDefaultDir() | ||
380 | { | ||
381 | var folder = TestData.Get(@"TestData"); | ||
382 | |||
383 | using (var fs = new DisposableFileSystem()) | ||
384 | { | ||
385 | var baseFolder = fs.GetFolder(); | ||
386 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
387 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
388 | |||
389 | var result = WixRunner.Execute(new[] | ||
390 | { | ||
391 | "build", | ||
392 | "-sw1031", // this is expected for this test | ||
393 | Path.Combine(folder, "DefaultDir", "DefaultDir.wxs"), | ||
394 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
395 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
396 | "-intermediateFolder", intermediateFolder, | ||
397 | "-o", msiPath | ||
398 | }); | ||
399 | |||
400 | result.AssertSuccess(); | ||
401 | |||
402 | Assert.True(File.Exists(msiPath)); | ||
403 | var results = Query.QueryDatabase(msiPath, new[] { "Directory" }); | ||
404 | WixAssert.CompareLineByLine(new[] | ||
405 | { | ||
406 | "Directory:DUPLICATENAMEANDSHORTNAME\tINSTALLFOLDER\tduplicat", | ||
407 | "Directory:Folder1\tINSTALLFOLDER\tFolder.1", | ||
408 | "Directory:Folder12\tINSTALLFOLDER\tFolder.12", | ||
409 | "Directory:Folder123\tINSTALLFOLDER\tFolder.123", | ||
410 | "Directory:Folder1234\tINSTALLFOLDER\tyakwclwy|Folder.1234", | ||
411 | "Directory:INSTALLFOLDER\tProgramFiles6432Folder\t1egc1laj|MsiPackage", | ||
412 | "Directory:NAMEANDSHORTNAME\tINSTALLFOLDER\tSHORTNAM|NameAndShortName", | ||
413 | "Directory:NAMEANDSHORTSOURCENAME\tINSTALLFOLDER\tNAMEASSN|NameAndShortSourceName", | ||
414 | "Directory:NAMEWITHSHORTVALUE\tINSTALLFOLDER\tSHORTVAL", | ||
415 | "Directory:ProgramFiles6432Folder\tProgramFilesFolder\t.", | ||
416 | "Directory:ProgramFilesFolder\tTARGETDIR\tPFiles", | ||
417 | "Directory:SHORTNAMEANDLONGSOURCENAME\tINSTALLFOLDER\tSHNALSNM:6ukthv5q|ShortNameAndLongSourceName", | ||
418 | "Directory:SHORTNAMEONLY\tINSTALLFOLDER\tSHORTONL", | ||
419 | "Directory:SOURCENAME\tINSTALLFOLDER\ts2s5bq-i|NameAndSourceName:dhnqygng|SourceNameWithName", | ||
420 | "Directory:SOURCENAMESONLY\tINSTALLFOLDER\t.:SRCNAMON|SourceNameOnly", | ||
421 | "Directory:SOURCENAMEWITHSHORTVALUE\tINSTALLFOLDER\t.:SRTSRCVL", | ||
422 | "Directory:TARGETDIR\t\tSourceDir", | ||
423 | }, results); | ||
424 | } | ||
425 | } | ||
426 | |||
427 | [Fact] | ||
428 | public void PopulatesEnvironmentTable() | ||
429 | { | ||
430 | var folder = TestData.Get(@"TestData"); | ||
431 | |||
432 | using (var fs = new DisposableFileSystem()) | ||
433 | { | ||
434 | var baseFolder = fs.GetFolder(); | ||
435 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
436 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
437 | |||
438 | var result = WixRunner.Execute(new[] | ||
439 | { | ||
440 | "build", | ||
441 | Path.Combine(folder, "Environment", "Environment.wxs"), | ||
442 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
443 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
444 | "-intermediateFolder", intermediateFolder, | ||
445 | "-o", msiPath | ||
446 | }); | ||
447 | |||
448 | result.AssertSuccess(); | ||
449 | |||
450 | Assert.True(File.Exists(msiPath)); | ||
451 | var results = Query.QueryDatabase(msiPath, new[] { "Environment" }); | ||
452 | WixAssert.CompareLineByLine(new[] | ||
453 | { | ||
454 | "Environment:PATH\t=-*PATH\t[INSTALLFOLDER]; ;[~]\tWixEnvironmentTest", | ||
455 | "Environment:WixEnvironmentTest1\t=-WixEnvTest1\t\tWixEnvironmentTest", | ||
456 | "Environment:WixEnvironmentTest2\t+-WixEnvTest1\t\tWixEnvironmentTest", | ||
457 | "Environment:WixEnvironmentTest3\t!-WixEnvTest1\t\tWixEnvironmentTest", | ||
458 | "Environment:WixEnvironmentTest4\t=-*WIX\t[INSTALLFOLDER]\tWixEnvironmentTest", | ||
459 | }, results); | ||
460 | } | ||
461 | } | ||
462 | |||
463 | [Fact(Skip = "Test demonstrates failure")] | ||
464 | public void PopulatesExampleTableBecauseOfEnsureTable() | ||
465 | { | ||
466 | var folder = TestData.Get(@"TestData"); | ||
467 | var extensionPath = Path.GetFullPath(new Uri(typeof(ExampleExtensionFactory).Assembly.CodeBase).LocalPath); | ||
468 | |||
469 | using (var fs = new DisposableFileSystem()) | ||
470 | { | ||
471 | var baseFolder = fs.GetFolder(); | ||
472 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
473 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
474 | |||
475 | var result = WixRunner.Execute(new[] | ||
476 | { | ||
477 | "build", | ||
478 | Path.Combine(folder, "EnsureTable", "EnsureTable.wxs"), | ||
479 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
480 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
481 | "-ext", extensionPath, | ||
482 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
483 | "-intermediateFolder", intermediateFolder, | ||
484 | "-o", msiPath | ||
485 | }); | ||
486 | |||
487 | result.AssertSuccess(); | ||
488 | |||
489 | Assert.True(File.Exists(msiPath)); | ||
490 | var results = Query.QueryDatabaseByTable(msiPath, new[] { "Wix4Example" }); | ||
491 | Assert.Empty(results["Wix4Example"]); | ||
492 | } | ||
493 | } | ||
494 | |||
495 | [Fact] | ||
496 | public void PopulatesFeatureTableWithParent() | ||
497 | { | ||
498 | var folder = TestData.Get(@"TestData"); | ||
499 | |||
500 | using (var fs = new DisposableFileSystem()) | ||
501 | { | ||
502 | var baseFolder = fs.GetFolder(); | ||
503 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
504 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
505 | |||
506 | var result = WixRunner.Execute(new[] | ||
507 | { | ||
508 | "build", | ||
509 | Path.Combine(folder, "FeatureGroup", "FeatureGroup.wxs"), | ||
510 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
511 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
512 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
513 | "-intermediateFolder", intermediateFolder, | ||
514 | "-o", msiPath | ||
515 | }); | ||
516 | |||
517 | result.AssertSuccess(); | ||
518 | |||
519 | Assert.True(File.Exists(msiPath)); | ||
520 | var results = Query.QueryDatabase(msiPath, new[] { "Feature" }); | ||
521 | WixAssert.CompareLineByLine(new[] | ||
522 | { | ||
523 | "Feature:ChildFeature\tParentFeature\tChildFeatureTitle\t\t2\t1\t\t0", | ||
524 | "Feature:ParentFeature\t\tParentFeatureTitle\t\t2\t1\t\t0", | ||
525 | "Feature:ProductFeature\t\tMsiPackageTitle\t\t2\t1\t\t0", | ||
526 | }, results); | ||
527 | } | ||
528 | } | ||
529 | |||
530 | [Fact] | ||
531 | public void PopulatesFontTableFromFontTitle() | ||
532 | { | ||
533 | var folder = TestData.Get(@"TestData"); | ||
534 | |||
535 | using (var fs = new DisposableFileSystem()) | ||
536 | { | ||
537 | var baseFolder = fs.GetFolder(); | ||
538 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
539 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
540 | |||
541 | var result = WixRunner.Execute(new[] | ||
542 | { | ||
543 | "build", | ||
544 | Path.Combine(folder, "Font", "FontTitle.wxs"), | ||
545 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
546 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
547 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
548 | "-intermediateFolder", intermediateFolder, | ||
549 | "-o", msiPath | ||
550 | }); | ||
551 | |||
552 | result.AssertSuccess(); | ||
553 | |||
554 | Assert.True(File.Exists(msiPath)); | ||
555 | var results = Query.QueryDatabase(msiPath, new[] { "Font" }); | ||
556 | WixAssert.CompareLineByLine(new[] | ||
557 | { | ||
558 | "Font:test.txt\tFakeFont", | ||
559 | }, results); | ||
560 | } | ||
561 | } | ||
562 | |||
563 | [Fact] | ||
564 | public void PopulatesFontTableFromTrueType() | ||
565 | { | ||
566 | var folder = TestData.Get(@"TestData"); | ||
567 | |||
568 | using (var fs = new DisposableFileSystem()) | ||
569 | { | ||
570 | var baseFolder = fs.GetFolder(); | ||
571 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
572 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
573 | |||
574 | var result = WixRunner.Execute(new[] | ||
575 | { | ||
576 | "build", | ||
577 | Path.Combine(folder, "Font", "TrueType.wxs"), | ||
578 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
579 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
580 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
581 | "-intermediateFolder", intermediateFolder, | ||
582 | "-o", msiPath | ||
583 | }); | ||
584 | |||
585 | result.AssertSuccess(); | ||
586 | |||
587 | Assert.True(File.Exists(msiPath)); | ||
588 | var results = Query.QueryDatabase(msiPath, new[] { "Font" }); | ||
589 | WixAssert.CompareLineByLine(new[] | ||
590 | { | ||
591 | "Font:TrueTypeFontFile\t", | ||
592 | }, results); | ||
593 | } | ||
594 | } | ||
595 | |||
596 | [Fact] | ||
597 | public void PopulatesInstallExecuteSequenceTable() | ||
598 | { | ||
599 | var folder = TestData.Get(@"TestData"); | ||
600 | |||
601 | using (var fs = new DisposableFileSystem()) | ||
602 | { | ||
603 | var baseFolder = fs.GetFolder(); | ||
604 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
605 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
606 | |||
607 | var result = WixRunner.Execute(new[] | ||
608 | { | ||
609 | "build", | ||
610 | Path.Combine(folder, "Upgrade", "DetectOnly.wxs"), | ||
611 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
612 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
613 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
614 | "-intermediateFolder", intermediateFolder, | ||
615 | "-o", msiPath | ||
616 | }); | ||
617 | |||
618 | result.AssertSuccess(); | ||
619 | |||
620 | Assert.True(File.Exists(msiPath)); | ||
621 | var results = Query.QueryDatabase(msiPath, new[] { "InstallExecuteSequence" }); | ||
622 | WixAssert.CompareLineByLine(new[] | ||
623 | { | ||
624 | "InstallExecuteSequence:CostFinalize\t\t1000", | ||
625 | "InstallExecuteSequence:CostInitialize\t\t800", | ||
626 | "InstallExecuteSequence:CreateFolders\t\t3700", | ||
627 | "InstallExecuteSequence:FileCost\t\t900", | ||
628 | "InstallExecuteSequence:FindRelatedProducts\t\t25", | ||
629 | "InstallExecuteSequence:InstallFiles\t\t4000", | ||
630 | "InstallExecuteSequence:InstallFinalize\t\t6600", | ||
631 | "InstallExecuteSequence:InstallInitialize\t\t1500", | ||
632 | "InstallExecuteSequence:InstallValidate\t\t1400", | ||
633 | "InstallExecuteSequence:LaunchConditions\t\t100", | ||
634 | "InstallExecuteSequence:MigrateFeatureStates\t\t1200", | ||
635 | "InstallExecuteSequence:ProcessComponents\t\t1600", | ||
636 | "InstallExecuteSequence:PublishFeatures\t\t6300", | ||
637 | "InstallExecuteSequence:PublishProduct\t\t6400", | ||
638 | "InstallExecuteSequence:RegisterProduct\t\t6100", | ||
639 | "InstallExecuteSequence:RegisterUser\t\t6000", | ||
640 | "InstallExecuteSequence:RemoveExistingProducts\t\t1401", | ||
641 | "InstallExecuteSequence:RemoveFiles\t\t3500", | ||
642 | "InstallExecuteSequence:RemoveFolders\t\t3600", | ||
643 | "InstallExecuteSequence:UnpublishFeatures\t\t1800", | ||
644 | "InstallExecuteSequence:ValidateProductID\t\t700", | ||
645 | }, results); | ||
646 | } | ||
647 | } | ||
648 | |||
649 | [Fact] | ||
650 | public void PopulatesLockPermissionsTableWithEmptyPermissions() | ||
651 | { | ||
652 | var folder = TestData.Get(@"TestData"); | ||
653 | |||
654 | using (var fs = new DisposableFileSystem()) | ||
655 | { | ||
656 | var baseFolder = fs.GetFolder(); | ||
657 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
658 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
659 | |||
660 | var result = WixRunner.Execute(new[] | ||
661 | { | ||
662 | "build", | ||
663 | Path.Combine(folder, "LockPermissions", "EmptyPermissions.wxs"), | ||
664 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
665 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
666 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
667 | "-intermediateFolder", intermediateFolder, | ||
668 | "-o", msiPath | ||
669 | }); | ||
670 | |||
671 | result.AssertSuccess(); | ||
672 | |||
673 | Assert.True(File.Exists(msiPath)); | ||
674 | var results = Query.QueryDatabase(msiPath, new[] { "LockPermissions" }); | ||
675 | WixAssert.CompareLineByLine(new[] | ||
676 | { | ||
677 | "LockPermissions:INSTALLFOLDER\tCreateFolder\t\tAdministrator\t0", | ||
678 | }, results); | ||
679 | } | ||
680 | } | ||
681 | |||
682 | [Fact] | ||
683 | public void PopulatesMsiAssemblyTables() | ||
684 | { | ||
685 | var folder = TestData.Get(@"TestData"); | ||
686 | |||
687 | using (var fs = new DisposableFileSystem()) | ||
688 | { | ||
689 | var baseFolder = fs.GetFolder(); | ||
690 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
691 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
692 | |||
693 | var result = WixRunner.Execute(new[] | ||
694 | { | ||
695 | "build", | ||
696 | Path.Combine(folder, "Assembly", "Win32Assembly.wxs"), | ||
697 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
698 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
699 | "-bindpath", Path.Combine(folder, "Assembly", "data"), | ||
700 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
701 | "-intermediateFolder", intermediateFolder, | ||
702 | "-o", msiPath | ||
703 | }); | ||
704 | |||
705 | result.AssertSuccess(); | ||
706 | |||
707 | Assert.True(File.Exists(msiPath)); | ||
708 | var results = Query.QueryDatabase(msiPath, new[] { "MsiAssembly", "MsiAssemblyName" }); | ||
709 | WixAssert.CompareLineByLine(new[] | ||
710 | { | ||
711 | "MsiAssembly:test.txt\tProductFeature\ttest.dll.manifest\t\t1", | ||
712 | "MsiAssemblyName:test.txt\tname\tMyApplication.app", | ||
713 | "MsiAssemblyName:test.txt\tversion\t1.0.0.0", | ||
714 | }, results); | ||
715 | } | ||
716 | } | ||
717 | |||
718 | [Fact] | ||
719 | public void PopulatesReserveCostTable() | ||
720 | { | ||
721 | var folder = TestData.Get(@"TestData"); | ||
722 | |||
723 | using (var fs = new DisposableFileSystem()) | ||
724 | { | ||
725 | var baseFolder = fs.GetFolder(); | ||
726 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
727 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
728 | |||
729 | var result = WixRunner.Execute(new[] | ||
730 | { | ||
731 | "build", | ||
732 | Path.Combine(folder, "ReserveCost", "ReserveCost.wxs"), | ||
733 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
734 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
735 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
736 | "-intermediateFolder", intermediateFolder, | ||
737 | "-o", msiPath | ||
738 | }); | ||
739 | |||
740 | result.AssertSuccess(); | ||
741 | |||
742 | Assert.True(File.Exists(msiPath)); | ||
743 | var results = Query.QueryDatabase(msiPath, new[] { "ReserveCost" }); | ||
744 | WixAssert.CompareLineByLine(new[] | ||
745 | { | ||
746 | "ReserveCost:TestCost\tReserveCostComp\tINSTALLFOLDER\t100\t200", | ||
747 | }, results); | ||
748 | } | ||
749 | } | ||
750 | |||
751 | [Fact] | ||
752 | public void PopulatesServiceTables() | ||
753 | { | ||
754 | var folder = TestData.Get(@"TestData"); | ||
755 | |||
756 | using (var fs = new DisposableFileSystem()) | ||
757 | { | ||
758 | var baseFolder = fs.GetFolder(); | ||
759 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
760 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
761 | |||
762 | var result = WixRunner.Execute(new[] | ||
763 | { | ||
764 | "build", | ||
765 | Path.Combine(folder, "ServiceInstall", "OwnProcess.wxs"), | ||
766 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
767 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
768 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
769 | "-intermediateFolder", intermediateFolder, | ||
770 | "-o", msiPath | ||
771 | }); | ||
772 | |||
773 | result.AssertSuccess(); | ||
774 | |||
775 | Assert.True(File.Exists(msiPath)); | ||
776 | var results = Query.QueryDatabase(msiPath, new[] { "ServiceInstall", "ServiceControl" }); | ||
777 | WixAssert.CompareLineByLine(new[] | ||
778 | { | ||
779 | "ServiceControl:SampleService\tSampleService\t161\t\t1\ttest.txt", | ||
780 | "ServiceInstall:SampleService\tSampleService\t\t16\t4\t0\t\t\t\t\t\ttest.txt\t", | ||
781 | }, results); | ||
782 | } | ||
783 | } | ||
784 | |||
785 | [Fact] | ||
786 | public void PopulatesTextStyleTableWhenColorIsNull() | ||
787 | { | ||
788 | var folder = TestData.Get(@"TestData"); | ||
789 | |||
790 | using (var fs = new DisposableFileSystem()) | ||
791 | { | ||
792 | var baseFolder = fs.GetFolder(); | ||
793 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
794 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
795 | |||
796 | var result = WixRunner.Execute(new[] | ||
797 | { | ||
798 | "build", | ||
799 | Path.Combine(folder, "TextStyle", "ColorNull.wxs"), | ||
800 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
801 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
802 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
803 | "-intermediateFolder", intermediateFolder, | ||
804 | "-o", msiPath | ||
805 | }); | ||
806 | |||
807 | result.AssertSuccess(); | ||
808 | |||
809 | Assert.True(File.Exists(msiPath)); | ||
810 | var results = Query.QueryDatabase(msiPath, new[] { "TextStyle" }); | ||
811 | WixAssert.CompareLineByLine(new[] | ||
812 | { | ||
813 | "TextStyle:FirstTextStyle\tArial\t2\t\t", | ||
814 | }, results); | ||
815 | } | ||
816 | } | ||
817 | |||
818 | [Fact] | ||
819 | public void PopulatesTextStyleTableWhenSizeIsLocalized() | ||
820 | { | ||
821 | var folder = TestData.Get(@"TestData"); | ||
822 | |||
823 | using (var fs = new DisposableFileSystem()) | ||
824 | { | ||
825 | var baseFolder = fs.GetFolder(); | ||
826 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
827 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
828 | |||
829 | var result = WixRunner.Execute(new[] | ||
830 | { | ||
831 | "build", | ||
832 | Path.Combine(folder, "TextStyle", "SizeLocalized.wxs"), | ||
833 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
834 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
835 | "-loc", Path.Combine(folder, "TextStyle", "SizeLocalized.en-us.wxl"), | ||
836 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
837 | "-intermediateFolder", intermediateFolder, | ||
838 | "-o", msiPath, | ||
839 | }); | ||
840 | |||
841 | result.AssertSuccess(); | ||
842 | |||
843 | Assert.True(File.Exists(msiPath)); | ||
844 | var results = Query.QueryDatabase(msiPath, new[] { "TextStyle" }); | ||
845 | WixAssert.CompareLineByLine(new[] | ||
846 | { | ||
847 | "TextStyle:CustomFont\tTahoma\t8\t\t", | ||
848 | }, results); | ||
849 | } | ||
850 | } | ||
851 | |||
852 | [Fact] | ||
853 | public void PopulatesTypeLibTableWhenLanguageIsZero() | ||
854 | { | ||
855 | var folder = TestData.Get(@"TestData"); | ||
856 | |||
857 | using (var fs = new DisposableFileSystem()) | ||
858 | { | ||
859 | var baseFolder = fs.GetFolder(); | ||
860 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
861 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
862 | |||
863 | var result = WixRunner.Execute(new[] | ||
864 | { | ||
865 | "build", | ||
866 | Path.Combine(folder, "TypeLib", "Language0.wxs"), | ||
867 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
868 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
869 | "-intermediateFolder", intermediateFolder, | ||
870 | "-o", msiPath | ||
871 | }); | ||
872 | |||
873 | result.AssertSuccess(); | ||
874 | |||
875 | Assert.True(File.Exists(msiPath)); | ||
876 | var results = Query.QueryDatabase(msiPath, new[] { "TypeLib" }); | ||
877 | WixAssert.CompareLineByLine(new[] | ||
878 | { | ||
879 | "TypeLib:{765BE8EE-BD7F-491E-90D2-C5A972462B50}\t0\tTypeLibComp\t\t\t\tProductFeature\t", | ||
880 | }, results); | ||
881 | } | ||
882 | } | ||
883 | |||
884 | [Fact] | ||
885 | public void PopulatesUpgradeTableFromManualUpgrade() | ||
886 | { | ||
887 | var folder = TestData.Get(@"TestData\ManualUpgrade"); | ||
888 | |||
889 | using (var fs = new DisposableFileSystem()) | ||
890 | { | ||
891 | var intermediateFolder = fs.GetFolder(); | ||
892 | var msiPath = Path.Combine(intermediateFolder, @"bin\test.msi"); | ||
893 | |||
894 | var result = WixRunner.Execute(new[] | ||
895 | { | ||
896 | "build", | ||
897 | Path.Combine(folder, "Package.wxs"), | ||
898 | Path.Combine(folder, "PackageComponents.wxs"), | ||
899 | "-loc", Path.Combine(folder, "Package.en-us.wxl"), | ||
900 | "-bindpath", Path.Combine(folder, "data"), | ||
901 | "-intermediateFolder", intermediateFolder, | ||
902 | "-o", msiPath | ||
903 | }, out var messages); | ||
904 | |||
905 | Assert.Equal(0, result); | ||
906 | |||
907 | Assert.True(File.Exists(msiPath)); | ||
908 | var results = Query.QueryDatabase(msiPath, new[] { "Upgrade" }); | ||
909 | WixAssert.CompareLineByLine(new[] | ||
910 | { | ||
911 | "Upgrade:{01120000-00E0-0000-0000-0000000FF1CE}\t12.0.0\t13.0.0\t\t260\t\tBLAHBLAHBLAH", | ||
912 | }, results); | ||
913 | } | ||
914 | } | ||
915 | |||
916 | [Fact] | ||
917 | public void PopulatesUpgradeTableFromDetectOnlyUpgrade() | ||
918 | { | ||
919 | var folder = TestData.Get(@"TestData"); | ||
920 | |||
921 | using (var fs = new DisposableFileSystem()) | ||
922 | { | ||
923 | var baseFolder = fs.GetFolder(); | ||
924 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
925 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
926 | |||
927 | var result = WixRunner.Execute(new[] | ||
928 | { | ||
929 | "build", | ||
930 | Path.Combine(folder, "Upgrade", "DetectOnly.wxs"), | ||
931 | Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), | ||
932 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | ||
933 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
934 | "-intermediateFolder", intermediateFolder, | ||
935 | "-o", msiPath | ||
936 | }); | ||
937 | |||
938 | result.AssertSuccess(); | ||
939 | |||
940 | Assert.True(File.Exists(msiPath)); | ||
941 | var results = Query.QueryDatabase(msiPath, new[] { "Upgrade" }); | ||
942 | WixAssert.CompareLineByLine(new[] | ||
943 | { | ||
944 | "Upgrade:{12E4699F-E774-4D05-8A01-5BDD41BBA127}\t\t1.0.0.0\t1033\t1\t\tWIX_UPGRADE_DETECTED", | ||
945 | "Upgrade:{12E4699F-E774-4D05-8A01-5BDD41BBA127}\t1.0.0.0\t\t1033\t2\t\tWIX_DOWNGRADE_DETECTED", | ||
946 | "Upgrade:{B05772EA-82B8-4DE0-B7EB-45B5F0CCFE6D}\t1.0.0\t\t\t256\t\tRELPRODFOUND", | ||
947 | }, results); | ||
948 | |||
949 | var prefix = "Property:SecureCustomProperties\t"; | ||
950 | var secureProperties = Query.QueryDatabase(msiPath, new[] { "Property" }).Where(p => p.StartsWith(prefix)).Single(); | ||
951 | WixAssert.CompareLineByLine(new[] | ||
952 | { | ||
953 | "RELPRODFOUND", | ||
954 | "WIX_DOWNGRADE_DETECTED", | ||
955 | "WIX_UPGRADE_DETECTED", | ||
956 | }, secureProperties.Substring(prefix.Length).Split(';').OrderBy(p => p).ToArray()); | ||
957 | } | ||
958 | } | ||
959 | |||
960 | [Fact] | ||
961 | public void CanMergeModule() | ||
962 | { | ||
963 | var folder = TestData.Get(@"TestData\SimpleMerge"); | ||
964 | |||
965 | using (var fs = new DisposableFileSystem()) | ||
966 | { | ||
967 | var intermediateFolder = fs.GetFolder(); | ||
968 | var msiPath = Path.Combine(intermediateFolder, @"bin\test.msi"); | ||
969 | var cabPath = Path.Combine(intermediateFolder, @"bin\cab1.cab"); | ||
970 | |||
971 | var result = WixRunner.Execute(new[] | ||
972 | { | ||
973 | "build", | ||
974 | Path.Combine(folder, "Package.wxs"), | ||
975 | "-loc", Path.Combine(folder, "Package.en-us.wxl"), | ||
976 | "-bindpath", Path.Combine(folder, ".data"), | ||
977 | "-intermediateFolder", intermediateFolder, | ||
978 | "-o", msiPath | ||
979 | }); | ||
980 | |||
981 | result.AssertSuccess(); | ||
982 | |||
983 | Assert.True(File.Exists(msiPath)); | ||
984 | Assert.True(File.Exists(Path.Combine(intermediateFolder, @"bin\test.wixpdb"))); | ||
985 | |||
986 | var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); | ||
987 | var section = intermediate.Sections.Single(); | ||
988 | Assert.Empty(section.Symbols.OfType<FileSymbol>()); | ||
989 | |||
990 | var data = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); | ||
991 | Assert.Empty(data.Tables["File"].Rows); | ||
992 | |||
993 | var results = Query.QueryDatabase(msiPath, new[] { "File" }); | ||
994 | WixAssert.CompareLineByLine(new[] | ||
995 | { | ||
996 | "File:filyIq8rqcxxf903Hsn5K9L0SWV73g.243FB739_4D05_472F_9CFB_EF6B1017B6DE\tModuleComponent.243FB739_4D05_472F_9CFB_EF6B1017B6DE\ttest.txt\t17\t\t\t512\t0" | ||
997 | }, results); | ||
998 | |||
999 | var files = Query.GetCabinetFiles(cabPath); | ||
1000 | WixAssert.CompareLineByLine(new[] | ||
1001 | { | ||
1002 | "filyIq8rqcxxf903Hsn5K9L0SWV73g.243FB739_4D05_472F_9CFB_EF6B1017B6DE" | ||
1003 | }, files.Select(f => f.Name).ToArray()); | ||
1004 | } | ||
1005 | } | ||
1006 | |||
1007 | [Fact] | ||
1008 | public void CanPublishComponentWithMultipleFeatureComponents() | ||
1009 | { | ||
1010 | var folder = TestData.Get(@"TestData\PublishComponent"); | ||
1011 | |||
1012 | using (var fs = new DisposableFileSystem()) | ||
1013 | { | ||
1014 | var baseFolder = fs.GetFolder(); | ||
1015 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
1016 | var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); | ||
1017 | |||
1018 | var result = WixRunner.Execute(new[] | ||
1019 | { | ||
1020 | "build", | ||
1021 | Path.Combine(folder, "Package.wxs"), | ||
1022 | "-loc", Path.Combine(folder, "Package.en-us.wxl"), | ||
1023 | "-bindpath", Path.Combine(folder, "data"), | ||
1024 | "-intermediateFolder", intermediateFolder, | ||
1025 | "-o", msiPath | ||
1026 | }); | ||
1027 | |||
1028 | result.AssertSuccess(); | ||
1029 | |||
1030 | Assert.True(File.Exists(msiPath)); | ||
1031 | var results = Query.QueryDatabase(msiPath, new[] { "PublishComponent" }); | ||
1032 | WixAssert.CompareLineByLine(new[] | ||
1033 | { | ||
1034 | "PublishComponent:{0A82C8F6-9CE9-4336-B8BE-91A39B5F7081} Qualifier2 Component2 AppData2 ProductFeature2", | ||
1035 | "PublishComponent:{BD245B5A-EC33-46ED-98FF-E9D3D416AD04} Qualifier1 Component1 AppData1 ProductFeature1", | ||
1036 | }, results); | ||
1037 | } | ||
1038 | } | ||
1039 | } | ||
1040 | } | ||