diff options
Diffstat (limited to 'src/wix/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs')
-rw-r--r-- | src/wix/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs | 316 |
1 files changed, 316 insertions, 0 deletions
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs new file mode 100644 index 00000000..d7296cfe --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs | |||
@@ -0,0 +1,316 @@ | |||
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 Xunit; | ||
14 | |||
15 | public class WixlibFixture | ||
16 | { | ||
17 | [Fact] | ||
18 | public void CanBuildSimpleBundleUsingWixlib() | ||
19 | { | ||
20 | var folder = TestData.Get(@"TestData\SimpleBundle"); | ||
21 | |||
22 | using (var fs = new DisposableFileSystem()) | ||
23 | { | ||
24 | var baseFolder = fs.GetFolder(); | ||
25 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
26 | |||
27 | var result = WixRunner.Execute(new[] | ||
28 | { | ||
29 | "build", | ||
30 | Path.Combine(folder, "MultiFileBootstrapperApplication.wxs"), | ||
31 | "-intermediateFolder", intermediateFolder, | ||
32 | "-o", Path.Combine(intermediateFolder, @"test.wixlib") | ||
33 | }); | ||
34 | |||
35 | result.AssertSuccess(); | ||
36 | |||
37 | result = WixRunner.Execute(new[] | ||
38 | { | ||
39 | "build", | ||
40 | Path.Combine(folder, "MultiFileBundle.wxs"), | ||
41 | "-loc", Path.Combine(folder, "Bundle.en-us.wxl"), | ||
42 | "-lib", Path.Combine(intermediateFolder, @"test.wixlib"), | ||
43 | "-bindpath", Path.Combine(folder, "data"), | ||
44 | "-intermediateFolder", intermediateFolder, | ||
45 | "-o", Path.Combine(baseFolder, @"bin\test.exe") | ||
46 | }); | ||
47 | |||
48 | result.AssertSuccess(); | ||
49 | |||
50 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.exe"))); | ||
51 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.wixpdb"))); | ||
52 | } | ||
53 | } | ||
54 | |||
55 | [Fact] | ||
56 | public void CanBuildWixlibWithBinariesFromNamedBindPaths() | ||
57 | { | ||
58 | var folder = TestData.Get(@"TestData\WixlibWithBinaries"); | ||
59 | |||
60 | using (var fs = new DisposableFileSystem()) | ||
61 | { | ||
62 | var baseFolder = fs.GetFolder(); | ||
63 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
64 | var wixlibPath = Path.Combine(intermediateFolder, @"test.wixlib"); | ||
65 | |||
66 | var result = WixRunner.Execute(new[] | ||
67 | { | ||
68 | "build", | ||
69 | Path.Combine(folder, "PackageComponents.wxs"), | ||
70 | "-bf", | ||
71 | "-bindpath", Path.Combine(folder, "data"), | ||
72 | // Use names that aren't excluded in default .gitignores. | ||
73 | "-bindpath", $"AlphaBits={Path.Combine(folder, "data", "alpha")}", | ||
74 | "-bindpath", $"MipsBits={Path.Combine(folder, "data", "mips")}", | ||
75 | "-bindpath", $"PowerBits={Path.Combine(folder, "data", "powerpc")}", | ||
76 | "-intermediateFolder", intermediateFolder, | ||
77 | "-o", wixlibPath, | ||
78 | }); | ||
79 | |||
80 | result.AssertSuccess(); | ||
81 | |||
82 | var wixlib = Intermediate.Load(wixlibPath); | ||
83 | var binarySymbols = wixlib.Sections.SelectMany(s => s.Symbols).OfType<BinarySymbol>().ToList(); | ||
84 | Assert.Equal(3, binarySymbols.Count); | ||
85 | Assert.Single(binarySymbols.Where(t => t.Data.Path == "wix-ir/foo.dll")); | ||
86 | Assert.Single(binarySymbols.Where(t => t.Data.Path == "wix-ir/foo.dll-1")); | ||
87 | Assert.Single(binarySymbols.Where(t => t.Data.Path == "wix-ir/foo.dll-2")); | ||
88 | } | ||
89 | } | ||
90 | |||
91 | [Fact] | ||
92 | public void CanBuildSingleFileUsingWixlib() | ||
93 | { | ||
94 | var folder = TestData.Get(@"TestData\SingleFile"); | ||
95 | |||
96 | using (var fs = new DisposableFileSystem()) | ||
97 | { | ||
98 | var baseFolder = fs.GetFolder(); | ||
99 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
100 | var wixlibPath = Path.Combine(intermediateFolder, @"test.wixlib"); | ||
101 | |||
102 | var result = WixRunner.Execute(new[] | ||
103 | { | ||
104 | "build", | ||
105 | Path.Combine(folder, "PackageComponents.wxs"), | ||
106 | "-intermediateFolder", intermediateFolder, | ||
107 | "-o", wixlibPath, | ||
108 | }); | ||
109 | |||
110 | result.AssertSuccess(); | ||
111 | |||
112 | var wixlib = Intermediate.Load(wixlibPath); | ||
113 | |||
114 | Assert.True(wixlib.HasLevel(IntermediateLevels.Compiled)); | ||
115 | Assert.True(wixlib.HasLevel(IntermediateLevels.Combined)); | ||
116 | Assert.False(wixlib.HasLevel(IntermediateLevels.Linked)); | ||
117 | Assert.False(wixlib.HasLevel(IntermediateLevels.Resolved)); | ||
118 | |||
119 | result = WixRunner.Execute(new[] | ||
120 | { | ||
121 | "build", | ||
122 | Path.Combine(folder, "Package.wxs"), | ||
123 | "-loc", Path.Combine(folder, "Package.en-us.wxl"), | ||
124 | "-lib", Path.Combine(intermediateFolder, @"test.wixlib"), | ||
125 | "-bindpath", Path.Combine(folder, "data"), | ||
126 | "-intermediateFolder", intermediateFolder, | ||
127 | "-o", Path.Combine(baseFolder, @"bin\test.msi") | ||
128 | }); | ||
129 | |||
130 | result.AssertSuccess(); | ||
131 | |||
132 | var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); | ||
133 | |||
134 | Assert.False(intermediate.HasLevel(IntermediateLevels.Compiled)); | ||
135 | Assert.False(intermediate.HasLevel(IntermediateLevels.Combined)); | ||
136 | Assert.True(intermediate.HasLevel(IntermediateLevels.Linked)); | ||
137 | Assert.True(intermediate.HasLevel(IntermediateLevels.Resolved)); | ||
138 | |||
139 | var section = intermediate.Sections.Single(); | ||
140 | |||
141 | var wixFile = section.Symbols.OfType<FileSymbol>().First(); | ||
142 | Assert.Equal(Path.Combine(folder, @"data\test.txt"), wixFile[FileSymbolFields.Source].AsPath().Path); | ||
143 | Assert.Equal(@"test.txt", wixFile[FileSymbolFields.Source].PreviousValue.AsPath().Path); | ||
144 | } | ||
145 | } | ||
146 | |||
147 | [Fact] | ||
148 | public void CanOverridePathWixVariable() | ||
149 | { | ||
150 | var folder = TestData.Get(@"TestData\WixVariableOverride"); | ||
151 | |||
152 | using (var fs = new DisposableFileSystem()) | ||
153 | { | ||
154 | var baseFolder = fs.GetFolder(); | ||
155 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
156 | var wixlibPath = Path.Combine(intermediateFolder, @"test.wixlib"); | ||
157 | |||
158 | var result = WixRunner.Execute(new[] | ||
159 | { | ||
160 | "build", | ||
161 | Path.Combine(folder, "PackageComponents.wxs"), | ||
162 | "-bf", | ||
163 | "-bindpath", Path.Combine(folder, "data"), | ||
164 | "-intermediateFolder", intermediateFolder, | ||
165 | "-o", wixlibPath, | ||
166 | }); | ||
167 | |||
168 | result.AssertSuccess(); | ||
169 | |||
170 | var wixlib = Intermediate.Load(wixlibPath); | ||
171 | |||
172 | Assert.True(wixlib.HasLevel(IntermediateLevels.Compiled)); | ||
173 | Assert.True(wixlib.HasLevel(IntermediateLevels.Combined)); | ||
174 | Assert.False(wixlib.HasLevel(IntermediateLevels.Linked)); | ||
175 | Assert.False(wixlib.HasLevel(IntermediateLevels.Resolved)); | ||
176 | |||
177 | result = WixRunner.Execute(new[] | ||
178 | { | ||
179 | "build", | ||
180 | Path.Combine(folder, "Package.wxs"), | ||
181 | "-loc", Path.Combine(folder, "Package.en-us.wxl"), | ||
182 | "-lib", Path.Combine(intermediateFolder, @"test.wixlib"), | ||
183 | "-bindpath", Path.Combine(folder, "data"), | ||
184 | "-intermediateFolder", intermediateFolder, | ||
185 | "-o", Path.Combine(baseFolder, @"bin\test.msi") | ||
186 | }); | ||
187 | |||
188 | result.AssertSuccess(); | ||
189 | |||
190 | var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); | ||
191 | |||
192 | Assert.False(intermediate.HasLevel(IntermediateLevels.Compiled)); | ||
193 | Assert.False(intermediate.HasLevel(IntermediateLevels.Combined)); | ||
194 | Assert.True(intermediate.HasLevel(IntermediateLevels.Linked)); | ||
195 | Assert.True(intermediate.HasLevel(IntermediateLevels.Resolved)); | ||
196 | |||
197 | var section = intermediate.Sections.Single(); | ||
198 | |||
199 | var wixFile = section.Symbols.OfType<BinarySymbol>().First(); | ||
200 | Assert.Equal(Path.Combine(folder, @"data\test2.txt"), wixFile.Data.Path); | ||
201 | } | ||
202 | } | ||
203 | |||
204 | [Fact] | ||
205 | public void CanBuildWithExtensionUsingWixlib() | ||
206 | { | ||
207 | var folder = TestData.Get(@"TestData\ExampleExtension"); | ||
208 | var extensionPath = Path.GetFullPath(new Uri(typeof(ExampleExtensionFactory).Assembly.CodeBase).LocalPath); | ||
209 | |||
210 | using (var fs = new DisposableFileSystem()) | ||
211 | { | ||
212 | var baseFolder = fs.GetFolder(); | ||
213 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
214 | |||
215 | var result = WixRunner.Execute(new[] | ||
216 | { | ||
217 | "build", | ||
218 | Path.Combine(folder, "PackageComponents.wxs"), | ||
219 | "-ext", extensionPath, | ||
220 | "-intermediateFolder", intermediateFolder, | ||
221 | "-o", Path.Combine(intermediateFolder, @"test.wixlib") | ||
222 | }); | ||
223 | |||
224 | result.AssertSuccess(); | ||
225 | |||
226 | result = WixRunner.Execute(new[] | ||
227 | { | ||
228 | "build", | ||
229 | Path.Combine(folder, "Package.wxs"), | ||
230 | "-loc", Path.Combine(folder, "Package.en-us.wxl"), | ||
231 | "-lib", Path.Combine(intermediateFolder, @"test.wixlib"), | ||
232 | "-ext", extensionPath, | ||
233 | "-bindpath", Path.Combine(folder, "data"), | ||
234 | "-intermediateFolder", intermediateFolder, | ||
235 | "-o", Path.Combine(intermediateFolder, @"bin\test.msi") | ||
236 | }); | ||
237 | |||
238 | result.AssertSuccess(); | ||
239 | |||
240 | var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); | ||
241 | var section = intermediate.Sections.Single(); | ||
242 | |||
243 | var fileSymbol = section.Symbols.OfType<FileSymbol>().Single(); | ||
244 | Assert.Equal(Path.Combine(folder, @"data\example.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path); | ||
245 | Assert.Equal(@"example.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path); | ||
246 | |||
247 | var example = section.Symbols.Where(t => t.Definition.Type == SymbolDefinitionType.MustBeFromAnExtension).Single(); | ||
248 | Assert.Equal("Foo", example.Id?.Id); | ||
249 | Assert.Equal("Bar", example[0].AsString()); | ||
250 | } | ||
251 | } | ||
252 | |||
253 | [Fact] | ||
254 | public void CanBuildWithExtensionUsingMultipleWixlibs() | ||
255 | { | ||
256 | var folder = TestData.Get(@"TestData\ComplexExampleExtension"); | ||
257 | var extensionPath = Path.GetFullPath(new Uri(typeof(ExampleExtensionFactory).Assembly.CodeBase).LocalPath); | ||
258 | |||
259 | using (var fs = new DisposableFileSystem()) | ||
260 | { | ||
261 | var baseFolder = fs.GetFolder(); | ||
262 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
263 | |||
264 | var result = WixRunner.Execute(new[] | ||
265 | { | ||
266 | "build", | ||
267 | Path.Combine(folder, "PackageComponents.wxs"), | ||
268 | "-ext", extensionPath, | ||
269 | "-intermediateFolder", intermediateFolder, | ||
270 | "-o", Path.Combine(intermediateFolder, @"components.wixlib") | ||
271 | }); | ||
272 | |||
273 | result.AssertSuccess(); | ||
274 | |||
275 | result = WixRunner.Execute(new[] | ||
276 | { | ||
277 | "build", | ||
278 | Path.Combine(folder, "OtherComponents.wxs"), | ||
279 | "-ext", extensionPath, | ||
280 | "-intermediateFolder", intermediateFolder, | ||
281 | "-o", Path.Combine(intermediateFolder, @"other.wixlib") | ||
282 | }); | ||
283 | |||
284 | result.AssertSuccess(); | ||
285 | |||
286 | result = WixRunner.Execute(new[] | ||
287 | { | ||
288 | "build", | ||
289 | Path.Combine(folder, "Package.wxs"), | ||
290 | "-loc", Path.Combine(folder, "Package.en-us.wxl"), | ||
291 | "-lib", Path.Combine(intermediateFolder, @"components.wixlib"), | ||
292 | "-lib", Path.Combine(intermediateFolder, @"other.wixlib"), | ||
293 | "-ext", extensionPath, | ||
294 | "-bindpath", Path.Combine(folder, "data"), | ||
295 | "-intermediateFolder", intermediateFolder, | ||
296 | "-o", Path.Combine(intermediateFolder, @"bin\test.msi") | ||
297 | }); | ||
298 | |||
299 | result.AssertSuccess(); | ||
300 | |||
301 | var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); | ||
302 | var section = intermediate.Sections.Single(); | ||
303 | |||
304 | var fileSymbols = section.Symbols.OfType<FileSymbol>().OrderBy(t => Path.GetFileName(t.Source.Path)).ToArray(); | ||
305 | Assert.Equal(Path.Combine(folder, @"data\example.txt"), fileSymbols[0][FileSymbolFields.Source].AsPath().Path); | ||
306 | Assert.Equal(@"example.txt", fileSymbols[0][FileSymbolFields.Source].PreviousValue.AsPath().Path); | ||
307 | Assert.Equal(Path.Combine(folder, @"data\other.txt"), fileSymbols[1][FileSymbolFields.Source].AsPath().Path); | ||
308 | Assert.Equal(@"other.txt", fileSymbols[1][FileSymbolFields.Source].PreviousValue.AsPath().Path); | ||
309 | |||
310 | var examples = section.Symbols.Where(t => t.Definition.Type == SymbolDefinitionType.MustBeFromAnExtension).ToArray(); | ||
311 | Assert.Equal(new string[] { "Foo", "Other" }, examples.Select(t => t.Id?.Id).ToArray()); | ||
312 | Assert.Equal(new[] { "Bar", "Value" }, examples.Select(t => t[0].AsString()).ToArray()); | ||
313 | } | ||
314 | } | ||
315 | } | ||
316 | } | ||