aboutsummaryrefslogtreecommitdiff
path: root/src/wix/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/wix/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs')
-rw-r--r--src/wix/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs316
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
3namespace 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}