main
cs 362 lines 16.2 KB
Raw
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 WixInternal.TestSupport;
9 using WixInternal.Core.TestPackage;
10 using WixToolset.Data;
11 using WixToolset.Data.WindowsInstaller;
12 using Xunit;
13
14 public class DirectoryFixture
15 {
16 [Fact]
17 public void CanGetDefaultInstallFolder()
18 {
19 var folder = TestData.Get(@"TestData\SingleFile");
20
21 using (var fs = new DisposableFileSystem())
22 {
23 var baseFolder = fs.GetFolder();
24 var intermediateFolder = Path.Combine(baseFolder, "obj");
25 var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
26
27 var result = WixRunner.Execute(new[]
28 {
29 "build",
30 Path.Combine(folder, "Package.wxs"),
31 Path.Combine(folder, "PackageComponents.wxs"),
32 "-loc", Path.Combine(folder, "Package.en-us.wxl"),
33 "-bindpath", Path.Combine(folder, "data"),
34 "-intermediateFolder", intermediateFolder,
35 "-o", msiPath
36 });
37
38 result.AssertSuccess();
39
40 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
41 var section = intermediate.Sections.Single();
42
43 var dirSymbols = section.Symbols.OfType<WixToolset.Data.Symbols.DirectorySymbol>().ToList();
44 WixAssert.CompareLineByLine(new[]
45 {
46 "INSTALLFOLDER:ProgramFiles6432Folder:Example Corporation MsiPackage",
47 "ProgramFiles6432Folder:ProgramFilesFolder:.",
48 "ProgramFilesFolder:TARGETDIR:PFiles",
49 "TARGETDIR::SourceDir"
50 }, dirSymbols.OrderBy(d => d.Id.Id).Select(d => d.Id.Id + ":" + d.ParentDirectoryRef + ":" + d.Name).ToArray());
51 }
52 }
53
54 [Fact]
55 public void CanGet32bitProgramFiles6432Folder()
56 {
57 var folder = TestData.Get(@"TestData");
58
59 using (var fs = new DisposableFileSystem())
60 {
61 var baseFolder = fs.GetFolder();
62 var intermediateFolder = Path.Combine(baseFolder, "obj");
63 var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
64
65 var result = WixRunner.Execute(new[]
66 {
67 "build",
68 Path.Combine(folder, "Directory", "Empty.wxs"),
69 Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
70 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
71 "-intermediateFolder", intermediateFolder,
72 "-o", msiPath
73 });
74
75 result.AssertSuccess();
76
77 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
78 var section = intermediate.Sections.Single();
79
80 var dirSymbols = section.Symbols.OfType<WixToolset.Data.Symbols.DirectorySymbol>().ToList();
81 WixAssert.CompareLineByLine(new[]
82 {
83 "INSTALLFOLDER:ProgramFiles6432Folder:MsiPackage",
84 "ProgramFiles6432Folder:ProgramFilesFolder:.",
85 "ProgramFilesFolder:TARGETDIR:PFiles",
86 "TARGETDIR::SourceDir"
87 }, dirSymbols.OrderBy(d => d.Id.Id).Select(d => d.Id.Id + ":" + d.ParentDirectoryRef + ":" + d.Name).ToArray());
88 }
89 }
90
91 [Fact]
92 public void CanGet64bitProgramFiles6432Folder()
93 {
94 var folder = TestData.Get(@"TestData");
95
96 using (var fs = new DisposableFileSystem())
97 {
98 var baseFolder = fs.GetFolder();
99 var intermediateFolder = Path.Combine(baseFolder, "obj");
100 var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
101
102 var result = WixRunner.Execute(new[]
103 {
104 "build",
105 "-arch", "x64",
106 Path.Combine(folder, "Directory", "Empty.wxs"),
107 Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
108 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
109 "-intermediateFolder", intermediateFolder,
110 "-o", msiPath
111 });
112
113 result.AssertSuccess();
114
115 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
116 var section = intermediate.Sections.Single();
117
118 var dirSymbols = section.Symbols.OfType<WixToolset.Data.Symbols.DirectorySymbol>().ToList();
119 WixAssert.CompareLineByLine(new[]
120 {
121 "INSTALLFOLDER:ProgramFiles6432Folder:MsiPackage",
122 "ProgramFiles6432Folder:ProgramFiles64Folder:.",
123 "ProgramFiles64Folder:TARGETDIR:PFiles64",
124 "TARGETDIR::SourceDir"
125 }, dirSymbols.OrderBy(d => d.Id.Id).Select(d => d.Id.Id + ":" + d.ParentDirectoryRef + ":" + d.Name).ToArray());
126 }
127 }
128
129 [Fact]
130 public void CanGetDefaultName()
131 {
132 var folder = TestData.Get(@"TestData");
133
134 using (var fs = new DisposableFileSystem())
135 {
136 var baseFolder = fs.GetFolder();
137 var intermediateFolder = Path.Combine(baseFolder, "obj");
138 var msiPath = Path.Combine(baseFolder, "bin", "test.msi");
139 var wixpdbPath = Path.Combine(baseFolder, "bin", "test.wixpdb");
140
141 var result = WixRunner.Execute(new[]
142 {
143 "build",
144 Path.Combine(folder, "Directory", "DefaultName.wxs"),
145 Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
146 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
147 "-intermediateFolder", intermediateFolder,
148 "-o", msiPath
149 });
150
151 result.AssertSuccess();
152
153 var intermediate = Intermediate.Load(wixpdbPath);
154 var section = intermediate.Sections.Single();
155
156 var dirSymbols = section.Symbols.OfType<WixToolset.Data.Symbols.DirectorySymbol>().ToList();
157 WixAssert.CompareLineByLine(new[]
158 {
159 "BinFolder\tCompanyFolder\t.",
160 "CompanyFolder\tProgramFilesFolder\tExample Corporation",
161 "DesktopFolder\tTARGETDIR\tDesktop",
162 "ProgramFilesFolder\tTARGETDIR\tPFiles",
163 "ProgramMenuFolder\tTARGETDIR\tPMenu",
164 "TARGETDIR\t\tSourceDir"
165 }, dirSymbols.Select(d => String.Join('\t', d.Id.Id, d.ParentDirectoryRef, d.Name)).OrderBy(s => s).ToArray());
166
167 var data = WindowsInstallerData.Load(wixpdbPath);
168 var directoryRows = data.Tables["Directory"].Rows;
169 WixAssert.CompareLineByLine(new[]
170 {
171 "BinFolder\tCompanyFolder\t.",
172 "CompanyFolder\tProgramFilesFolder\tu7-b4gch|Example Corporation",
173 "DesktopFolder\tTARGETDIR\tDesktop",
174 "ProgramFilesFolder\tTARGETDIR\tPFiles",
175 "ProgramMenuFolder\tTARGETDIR\tPMenu",
176 "TARGETDIR\t\tSourceDir"
177 }, directoryRows.Select(r => String.Join('\t', r.FieldAsString(0), r.FieldAsString(1), r.FieldAsString(2))).OrderBy(s => s).ToArray());
178 }
179 }
180
181 [Fact]
182 public void CanGetDuplicateDir()
183 {
184 var folder = TestData.Get(@"TestData");
185
186 using (var fs = new DisposableFileSystem())
187 {
188 var baseFolder = fs.GetFolder();
189 var intermediateFolder = Path.Combine(baseFolder, "obj");
190 var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
191
192 var result = WixRunner.Execute(new[]
193 {
194 "build",
195 "-arch", "x64",
196 Path.Combine(folder, "DuplicateDir", "DuplicateDir.wxs"),
197 Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
198 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
199 "-intermediateFolder", intermediateFolder,
200 "-o", msiPath
201 });
202
203 result.AssertSuccess();
204
205 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
206 var section = intermediate.Sections.Single();
207
208 var dirSymbols = section.Symbols.OfType<WixToolset.Data.Symbols.DirectorySymbol>().ToList();
209 WixAssert.CompareLineByLine(new[]
210 {
211 @"d6axmdFGwwNJUBTBpSSKcI7uWXo8:INSTALLFOLDER:path\to\path1",
212 @"dQ9mCRk.rZXStHc.ILz66dIhE0FI:INSTALLFOLDER:path\to\path2",
213 "INSTALLFOLDER:ProgramFiles6432Folder:MsiPackage",
214 "ProgramFiles6432Folder:ProgramFiles64Folder:.",
215 "ProgramFiles64Folder:TARGETDIR:PFiles64",
216 "TARGETDIR::SourceDir"
217 }, dirSymbols.OrderBy(d => d.Id.Id).Select(d => d.Id.Id + ":" + d.ParentDirectoryRef + ":" + d.Name).ToArray());
218 }
219 }
220
221 [Fact]
222 public void CanGetWithMultiNestedSubdirectory()
223 {
224 var folder = TestData.Get(@"TestData");
225
226 using (var fs = new DisposableFileSystem())
227 {
228 var baseFolder = fs.GetFolder();
229 var intermediateFolder = Path.Combine(baseFolder, "obj");
230 var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
231
232 var result = WixRunner.Execute(new[]
233 {
234 "build",
235 "-arch", "x64",
236 Path.Combine(folder, "Directory", "Nested.wxs"),
237 Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
238 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
239 "-intermediateFolder", intermediateFolder,
240 "-o", msiPath
241 });
242
243 result.AssertSuccess();
244
245 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
246 var section = intermediate.Sections.Single();
247
248 var dirSymbols = section.Symbols.OfType<WixToolset.Data.Symbols.DirectorySymbol>().ToList();
249 WixAssert.CompareLineByLine(new[]
250 {
251 "BinFolder:ProgramFilesFolder:Example Corporation\\Test Product\\bin",
252 "ProgramFilesFolder:TARGETDIR:PFiles",
253 "TARGETDIR::SourceDir"
254 }, dirSymbols.OrderBy(d => d.Id.Id).Select(d => d.Id.Id + ":" + d.ParentDirectoryRef + ":" + d.Name).ToArray());
255
256 var data = WindowsInstallerData.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
257 var directoryRows = data.Tables["Directory"].Rows;
258 WixAssert.CompareLineByLine(new[]
259 {
260 "d4EceYatXTyy8HXPt5B6DT9Rj.wE:ProgramFilesFolder:u7-b4gch|Example Corporation",
261 "dSJ1pgiASlW7kJTu0wqsGBklJsS0:d4EceYatXTyy8HXPt5B6DT9Rj.wE:vjj-gxay|Test Product",
262 "BinFolder:dSJ1pgiASlW7kJTu0wqsGBklJsS0:bin",
263 "ProgramFilesFolder:TARGETDIR:PFiles",
264 "TARGETDIR::SourceDir"
265 }, directoryRows.Select(r => r.FieldAsString(0) + ":" + r.FieldAsString(1) + ":" + r.FieldAsString(2)).ToArray());
266 }
267 }
268
269 [Fact]
270 public void CanGetDuplicateTargetSourceName()
271 {
272 var folder = TestData.Get(@"TestData");
273
274 using (var fs = new DisposableFileSystem())
275 {
276 var baseFolder = fs.GetFolder();
277 var intermediateFolder = Path.Combine(baseFolder, "obj");
278 var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
279
280 var result = WixRunner.Execute(new[]
281 {
282 "build",
283 "-arch", "x64",
284 Path.Combine(folder, "Directory", "DuplicateTargetSourceName.wxs"),
285 Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
286 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
287 "-intermediateFolder", intermediateFolder,
288 "-o", msiPath
289 });
290
291 result.AssertSuccess();
292
293 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
294 var section = intermediate.Sections.Single();
295
296 var dirSymbols = section.Symbols.OfType<WixToolset.Data.Symbols.DirectorySymbol>().ToList();
297 WixAssert.CompareLineByLine(new[]
298 {
299 "BinFolder\tProgramFilesFolder\tbin",
300 "ProgramFilesFolder\tTARGETDIR\tPFiles",
301 "TARGETDIR\t\tSourceDir"
302 }, dirSymbols.OrderBy(d => d.Id.Id).Select(d => String.Join('\t', d.Id.Id, d.ParentDirectoryRef, d.Name)).ToArray());
303
304 var data = WindowsInstallerData.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
305 var directoryRows = data.Tables["Directory"].Rows;
306 WixAssert.CompareLineByLine(new[]
307 {
308 "BinFolder\tProgramFilesFolder\tbin",
309 "ProgramFilesFolder\tTARGETDIR\tPFiles",
310 "TARGETDIR\t\tSourceDir"
311 }, directoryRows.Select(r => String.Join('\t', r.FieldAsString(0), r.FieldAsString(1), r.FieldAsString(2))).ToArray());
312 }
313 }
314
315 [Fact]
316 public void CanFindRedundantSubdirectoryInSecondSection()
317 {
318 var folder = TestData.Get(@"TestData");
319
320 using (var fs = new DisposableFileSystem())
321 {
322 var baseFolder = fs.GetFolder();
323 var intermediateFolder = Path.Combine(baseFolder, "obj");
324 var msiPath = Path.Combine(baseFolder, "bin", "test.msi");
325 var wixpdbPath = Path.ChangeExtension(msiPath, ".wixpdb");
326
327 var result = WixRunner.Execute(new[]
328 {
329 "build",
330 Path.Combine(folder, "Directory", "RedundantSubdirectoryInSecondSection.wxs"),
331 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
332 "-intermediateFolder", intermediateFolder,
333 "-o", msiPath
334 });
335
336 result.AssertSuccess();
337
338 var intermediate = Intermediate.Load(wixpdbPath);
339 var section = intermediate.Sections.Single();
340
341 var dirSymbols = section.Symbols.OfType<WixToolset.Data.Symbols.DirectorySymbol>().ToList();
342 WixAssert.CompareLineByLine(new[]
343 {
344 @"dKO7wPCF.XLmq6KnqybHHgcBBqtU:ProgramFilesFolder:a\b\c",
345 @"ProgramFilesFolder:TARGETDIR:PFiles",
346 @"TARGETDIR::SourceDir"
347 }, dirSymbols.OrderBy(d => d.Id.Id).Select(d => d.Id.Id + ":" + d.ParentDirectoryRef + ":" + d.Name).OrderBy(s => s).ToArray());
348
349 var data = WindowsInstallerData.Load(wixpdbPath);
350 var directoryRows = data.Tables["Directory"].Rows;
351 WixAssert.CompareLineByLine(new[]
352 {
353 @"d1nVb5_zcCwRCz7i2YXNAofGRmfc:ProgramFilesFolder:a",
354 @"dijlG.bNicFgvj1_DujiGg9EBGrQ:d1nVb5_zcCwRCz7i2YXNAofGRmfc:b",
355 @"dKO7wPCF.XLmq6KnqybHHgcBBqtU:dijlG.bNicFgvj1_DujiGg9EBGrQ:c",
356 "ProgramFilesFolder:TARGETDIR:PFiles",
357 "TARGETDIR::SourceDir"
358 }, directoryRows.Select(r => r.FieldAsString(0) + ":" + r.FieldAsString(1) + ":" + r.FieldAsString(2)).OrderBy(s => s).ToArray());
359 }
360 }
361 }
362 }