main
cs 203 lines 8.39 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.Symbols;
12 using Example.Extension;
13 using Xunit;
14
15 public class WixiplFixture
16 {
17 [Fact]
18 public void CanBuildSingleFile()
19 {
20 var folder = TestData.Get(@"TestData\SingleFile");
21
22 using (var fs = new DisposableFileSystem())
23 {
24 var baseFolder = fs.GetFolder();
25 var intermediateFolder = Path.Combine(baseFolder, "obj");
26 var wixiplPath = Path.Combine(intermediateFolder, @"test.wixipl");
27
28 var result = WixRunner.Execute(new[]
29 {
30 "build",
31 Path.Combine(folder, "Package.wxs"),
32 Path.Combine(folder, "PackageComponents.wxs"),
33 "-intermediateFolder", intermediateFolder,
34 "-o", wixiplPath,
35 });
36
37 result.AssertSuccess();
38
39 var intermediate = Intermediate.Load(wixiplPath);
40
41 Assert.False(intermediate.HasLevel(IntermediateLevels.Compiled));
42 Assert.True(intermediate.HasLevel(IntermediateLevels.Linked));
43 Assert.False(intermediate.HasLevel(IntermediateLevels.Resolved));
44
45 result = WixRunner.Execute(new[]
46 {
47 "build",
48 Path.Combine(intermediateFolder, @"test.wixipl"),
49 "-loc", Path.Combine(folder, "Package.en-us.wxl"),
50 "-bindpath", Path.Combine(folder, "data"),
51 "-intermediateFolder", intermediateFolder,
52 "-o", Path.Combine(baseFolder, @"bin\test.msi")
53 });
54
55 result.AssertSuccess();
56
57 intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
58
59 Assert.False(intermediate.HasLevel(IntermediateLevels.Compiled));
60 Assert.True(intermediate.HasLevel(IntermediateLevels.Linked));
61 Assert.True(intermediate.HasLevel(IntermediateLevels.Resolved));
62
63 var section = intermediate.Sections.Single();
64
65 var fileSymbol = section.Symbols.OfType<FileSymbol>().First();
66 WixAssert.StringEqual(Path.Combine(folder, @"data\test.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
67 WixAssert.StringEqual(@"test.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
68 }
69 }
70
71 [Fact]
72 public void CannotBuildWithSourceFileAndWixipl()
73 {
74 var folder = TestData.Get(@"TestData\SingleFile");
75
76 using (var fs = new DisposableFileSystem())
77 {
78 var baseFolder = fs.GetFolder();
79 var intermediateFolder = Path.Combine(baseFolder, "obj");
80
81 var result = WixRunner.Execute(new[]
82 {
83 "build",
84 Path.Combine(folder, "Package.wxs"),
85 Path.Combine(folder, "PackageComponents.wxs"),
86 "-intermediateFolder", intermediateFolder,
87 "-o", Path.Combine(intermediateFolder, @"test.wixipl")
88 });
89
90 result.AssertSuccess();
91
92 result = WixRunner.Execute(new[]
93 {
94 "build",
95 Path.Combine(folder, "Package.wxs"),
96 Path.Combine(intermediateFolder, @"test.wixipl"),
97 "-loc", Path.Combine(folder, "Package.en-us.wxl"),
98 "-bindpath", Path.Combine(folder, "data"),
99 "-intermediateFolder", intermediateFolder,
100 "-o", Path.Combine(baseFolder, @"bin\test.msi")
101 });
102 Assert.Equal((int)ErrorMessages.Ids.WixiplSourceFileIsExclusive, result.ExitCode);
103 }
104 }
105
106 [Fact]
107 public void CanBuildMsiUsingExtensionLibrary()
108 {
109 var folder = TestData.Get(@"TestData\Wixipl");
110
111 using (var fs = new DisposableFileSystem())
112 {
113 var baseFolder = fs.GetFolder();
114 var intermediateFolder = Path.Combine(baseFolder, "obj");
115
116 var result = WixRunner.Execute(new[]
117 {
118 "build",
119 "-ext", ExtensionPaths.ExampleExtensionPath,
120 Path.Combine(folder, "Package.wxs"),
121 Path.Combine(folder, "PackageComponents.wxs"),
122 "-loc", Path.Combine(folder, "Package.en-us.wxl"),
123 "-bindpath", Path.Combine(folder, "data"),
124 "-intermediateFolder", intermediateFolder,
125 "-o", Path.Combine(baseFolder, @"bin\test.msi"),
126 });
127
128 result.AssertSuccess();
129
130 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
131 var section = intermediate.Sections.Single();
132
133 {
134 var fileSymbol = section.Symbols.OfType<FileSymbol>().Single();
135 WixAssert.StringEqual(Path.Combine(folder, @"data\test.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
136 WixAssert.StringEqual(@"test.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
137 }
138
139 {
140 var binary = section.Symbols.OfType<BinarySymbol>().Single();
141 var path = binary[BinarySymbolFields.Data].AsPath().Path;
142 Assert.StartsWith(Path.Combine(baseFolder, @"obj\Example.Extension"), path);
143 Assert.EndsWith(@"wix-ir\example.txt", path);
144 WixAssert.StringEqual(@"BinFromWir", binary.Id.Id);
145 }
146 }
147 }
148
149 [Fact]
150 public void CanBuildWixiplUsingExtensionLibrary()
151 {
152 var folder = TestData.Get(@"TestData\Wixipl");
153
154 using (var fs = new DisposableFileSystem())
155 {
156 var baseFolder = fs.GetFolder();
157 var intermediateFolder = Path.Combine(baseFolder, "obj");
158
159 var result = WixRunner.Execute(new[]
160 {
161 "build",
162 "-ext", ExtensionPaths.ExampleExtensionPath,
163 Path.Combine(folder, "Package.wxs"),
164 Path.Combine(folder, "PackageComponents.wxs"),
165 "-intermediateFolder", intermediateFolder,
166 "-o", Path.Combine(intermediateFolder, @"test.wixipl"),
167 });
168
169 result.AssertSuccess();
170
171 result = WixRunner.Execute(new[]
172 {
173 "build",
174 Path.Combine(intermediateFolder, @"test.wixipl"),
175 "-ext", ExtensionPaths.ExampleExtensionPath,
176 "-loc", Path.Combine(folder, "Package.en-us.wxl"),
177 "-bindpath", Path.Combine(folder, "data"),
178 "-intermediateFolder", intermediateFolder,
179 "-o", Path.Combine(baseFolder, @"bin\test.msi"),
180 });
181
182 result.AssertSuccess();
183
184 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
185 var section = intermediate.Sections.Single();
186
187 {
188 var fileSymbol = section.Symbols.OfType<FileSymbol>().Single();
189 WixAssert.StringEqual(Path.Combine(folder, @"data\test.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
190 WixAssert.StringEqual(@"test.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
191 }
192
193 {
194 var binary = section.Symbols.OfType<BinarySymbol>().Single();
195 var path = binary[BinarySymbolFields.Data].AsPath().Path;
196 Assert.StartsWith(Path.Combine(baseFolder, @"obj\test"), path);
197 Assert.EndsWith(@"wix-ir\example.txt", path);
198 WixAssert.StringEqual(@"BinFromWir", binary.Id.Id);
199 }
200 }
201 }
202 }
203 }