aboutsummaryrefslogtreecommitdiff
path: root/src/ext/UI/test/WixToolsetTest.UI
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2023-03-09 03:43:57 -0800
committerRob Mensching <rob@firegiant.com>2023-03-09 06:17:00 -0700
commit3efe3f3a8682f333741b3c52e10eea2297f43dc9 (patch)
treec4935644e337175b44ba137e99265144444857bc /src/ext/UI/test/WixToolsetTest.UI
parent3bc1056b69b420de75ce571c102b3b24c8cab390 (diff)
downloadwix-3efe3f3a8682f333741b3c52e10eea2297f43dc9.tar.gz
wix-3efe3f3a8682f333741b3c52e10eea2297f43dc9.tar.bz2
wix-3efe3f3a8682f333741b3c52e10eea2297f43dc9.zip
Prevent direct references to platform neutral WixUI
Fixes 7265
Diffstat (limited to 'src/ext/UI/test/WixToolsetTest.UI')
-rw-r--r--src/ext/UI/test/WixToolsetTest.UI/TestData/InvalidUIRef/Package.wxs23
-rw-r--r--src/ext/UI/test/WixToolsetTest.UI/UIExtensionFixture.cs68
2 files changed, 69 insertions, 22 deletions
diff --git a/src/ext/UI/test/WixToolsetTest.UI/TestData/InvalidUIRef/Package.wxs b/src/ext/UI/test/WixToolsetTest.UI/TestData/InvalidUIRef/Package.wxs
new file mode 100644
index 00000000..3cf78b3a
--- /dev/null
+++ b/src/ext/UI/test/WixToolsetTest.UI/TestData/InvalidUIRef/Package.wxs
@@ -0,0 +1,23 @@
1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:ui="http://wixtoolset.org/schemas/v4/wxs/ui">
2 <Package Name="MsiPackage" Language="1033" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a" InstallerVersion="200">
3 <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
4
5 <Feature Id="ProductFeature" Title="MsiPackage">
6 <ComponentGroupRef Id="ProductComponents" />
7 </Feature>
8
9 <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
10 <Component>
11 <File Source="example.txt" />
12 </Component>
13 </ComponentGroup>
14
15 <UIRef Id="WixUI_Mondo" />
16 </Package>
17
18 <Fragment>
19 <StandardDirectory Id="ProgramFilesFolder">
20 <Directory Id="INSTALLFOLDER" Name="MsiPackage" />
21 </StandardDirectory>
22 </Fragment>
23</Wix>
diff --git a/src/ext/UI/test/WixToolsetTest.UI/UIExtensionFixture.cs b/src/ext/UI/test/WixToolsetTest.UI/UIExtensionFixture.cs
index e1f18be5..7f9b7313 100644
--- a/src/ext/UI/test/WixToolsetTest.UI/UIExtensionFixture.cs
+++ b/src/ext/UI/test/WixToolsetTest.UI/UIExtensionFixture.cs
@@ -2,11 +2,10 @@
2 2
3namespace WixToolsetTest.UI 3namespace WixToolsetTest.UI
4{ 4{
5 using System;
6 using System.IO; 5 using System.IO;
7 using System.Linq; 6 using System.Linq;
8 using WixInternal.TestSupport;
9 using WixInternal.Core.TestPackage; 7 using WixInternal.Core.TestPackage;
8 using WixInternal.TestSupport;
10 using WixToolset.Data.WindowsInstaller; 9 using WixToolset.Data.WindowsInstaller;
11 using WixToolset.UI; 10 using WixToolset.UI;
12 using Xunit; 11 using Xunit;
@@ -16,8 +15,8 @@ namespace WixToolsetTest.UI
16 [Fact] 15 [Fact]
17 public void CanBuildUsingWixUIAdvanced() 16 public void CanBuildUsingWixUIAdvanced()
18 { 17 {
19 var folder = TestData.Get(@"TestData\WixUI_Advanced"); 18 var folder = TestData.Get(@"TestData", "WixUI_Advanced");
20 var bindFolder = TestData.Get(@"TestData\data"); 19 var bindFolder = TestData.Get(@"TestData", "data");
21 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); 20 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
22 21
23 var results = build.BuildAndQuery(Build, "Binary", "Dialog", "CustomAction", "ControlEvent"); 22 var results = build.BuildAndQuery(Build, "Binary", "Dialog", "CustomAction", "ControlEvent");
@@ -52,8 +51,8 @@ namespace WixToolsetTest.UI
52 [Fact] 51 [Fact]
53 public void CanBuildUsingWixUIAdvancedX64() 52 public void CanBuildUsingWixUIAdvancedX64()
54 { 53 {
55 var folder = TestData.Get(@"TestData\WixUI_Advanced"); 54 var folder = TestData.Get(@"TestData", "WixUI_Advanced");
56 var bindFolder = TestData.Get(@"TestData\data"); 55 var bindFolder = TestData.Get(@"TestData", "data");
57 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); 56 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
58 57
59 var results = build.BuildAndQuery(BuildX64, "Binary", "Dialog", "CustomAction", "ControlEvent"); 58 var results = build.BuildAndQuery(BuildX64, "Binary", "Dialog", "CustomAction", "ControlEvent");
@@ -88,8 +87,8 @@ namespace WixToolsetTest.UI
88 [Fact] 87 [Fact]
89 public void CanBuildUsingWixUIAdvancedARM64() 88 public void CanBuildUsingWixUIAdvancedARM64()
90 { 89 {
91 var folder = TestData.Get(@"TestData\WixUI_Advanced"); 90 var folder = TestData.Get(@"TestData", "WixUI_Advanced");
92 var bindFolder = TestData.Get(@"TestData\data"); 91 var bindFolder = TestData.Get(@"TestData", "data");
93 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); 92 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
94 93
95 var results = build.BuildAndQuery(BuildARM64, "Binary", "Dialog", "CustomAction", "ControlEvent"); 94 var results = build.BuildAndQuery(BuildARM64, "Binary", "Dialog", "CustomAction", "ControlEvent");
@@ -124,8 +123,8 @@ namespace WixToolsetTest.UI
124 [Fact] 123 [Fact]
125 public void CanBuildUsingWixUIFeatureTree() 124 public void CanBuildUsingWixUIFeatureTree()
126 { 125 {
127 var folder = TestData.Get(@"TestData\WixUI_FeatureTree"); 126 var folder = TestData.Get(@"TestData", "WixUI_FeatureTree");
128 var bindFolder = TestData.Get(@"TestData\data"); 127 var bindFolder = TestData.Get(@"TestData", "data");
129 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); 128 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
130 129
131 var results = build.BuildAndQuery(BuildX64, "Binary", "Dialog", "CustomAction", "ControlEvent"); 130 var results = build.BuildAndQuery(BuildX64, "Binary", "Dialog", "CustomAction", "ControlEvent");
@@ -155,8 +154,8 @@ namespace WixToolsetTest.UI
155 [Fact] 154 [Fact]
156 public void CanBuildUsingWixUIInstallDir() 155 public void CanBuildUsingWixUIInstallDir()
157 { 156 {
158 var folder = TestData.Get(@"TestData\WixUI_InstallDir"); 157 var folder = TestData.Get(@"TestData", "WixUI_InstallDir");
159 var bindFolder = TestData.Get(@"TestData\data"); 158 var bindFolder = TestData.Get(@"TestData", "data");
160 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); 159 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
161 160
162 var results = build.BuildAndQuery(Build, "Binary", "Dialog", "CustomAction", "Property", "ControlEvent"); 161 var results = build.BuildAndQuery(Build, "Binary", "Dialog", "CustomAction", "Property", "ControlEvent");
@@ -191,8 +190,8 @@ namespace WixToolsetTest.UI
191 [Fact] 190 [Fact]
192 public void CanBuildUsingWixUIMinimal() 191 public void CanBuildUsingWixUIMinimal()
193 { 192 {
194 var folder = TestData.Get(@"TestData\WixUI_Minimal"); 193 var folder = TestData.Get(@"TestData", "WixUI_Minimal");
195 var bindFolder = TestData.Get(@"TestData\data"); 194 var bindFolder = TestData.Get(@"TestData", "data");
196 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); 195 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
197 196
198 var results = build.BuildAndQuery(Build, "Binary", "Dialog", "CustomAction", "ControlEvent"); 197 var results = build.BuildAndQuery(Build, "Binary", "Dialog", "CustomAction", "ControlEvent");
@@ -220,8 +219,8 @@ namespace WixToolsetTest.UI
220 [Fact] 219 [Fact]
221 public void CanBuildUsingWixUIMinimalInKazakh() 220 public void CanBuildUsingWixUIMinimalInKazakh()
222 { 221 {
223 var folder = TestData.Get(@"TestData\WixUI_Minimal"); 222 var folder = TestData.Get(@"TestData", "WixUI_Minimal");
224 var bindFolder = TestData.Get(@"TestData\data"); 223 var bindFolder = TestData.Get(@"TestData", "data");
225 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); 224 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
226 225
227 var results = build.BuildAndQuery(BuildInKazakh, "Dialog"); 226 var results = build.BuildAndQuery(BuildInKazakh, "Dialog");
@@ -232,8 +231,8 @@ namespace WixToolsetTest.UI
232 [Fact] 231 [Fact]
233 public void CanBuildUsingWixUIMinimalAndReadPdb() 232 public void CanBuildUsingWixUIMinimalAndReadPdb()
234 { 233 {
235 var folder = TestData.Get(@"TestData\WixUI_Minimal"); 234 var folder = TestData.Get(@"TestData", "WixUI_Minimal");
236 var bindFolder = TestData.Get(@"TestData\data"); 235 var bindFolder = TestData.Get(@"TestData", "data");
237 236
238 using (var fs = new DisposableFileSystem()) 237 using (var fs = new DisposableFileSystem())
239 { 238 {
@@ -258,8 +257,8 @@ namespace WixToolsetTest.UI
258 [Fact] 257 [Fact]
259 public void CanBuildUsingWixUIMondo() 258 public void CanBuildUsingWixUIMondo()
260 { 259 {
261 var folder = TestData.Get(@"TestData\WixUI_Mondo"); 260 var folder = TestData.Get(@"TestData", "WixUI_Mondo");
262 var bindFolder = TestData.Get(@"TestData\data"); 261 var bindFolder = TestData.Get(@"TestData", "data");
263 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); 262 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
264 263
265 var results = build.BuildAndQuery(Build, "Binary", "Dialog", "CustomAction", "ControlEvent"); 264 var results = build.BuildAndQuery(Build, "Binary", "Dialog", "CustomAction", "ControlEvent");
@@ -292,8 +291,8 @@ namespace WixToolsetTest.UI
292 [Fact] 291 [Fact]
293 public void CanBuildUsingWixUIMondoLocalized() 292 public void CanBuildUsingWixUIMondoLocalized()
294 { 293 {
295 var folder = TestData.Get(@"TestData\WixUI_Mondo"); 294 var folder = TestData.Get(@"TestData", "WixUI_Mondo");
296 var bindFolder = TestData.Get(@"TestData\data"); 295 var bindFolder = TestData.Get(@"TestData", "data");
297 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); 296 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
298 297
299 var results = build.BuildAndQuery(BuildInGerman, "Control"); 298 var results = build.BuildAndQuery(BuildInGerman, "Control");
@@ -303,6 +302,31 @@ namespace WixToolsetTest.UI
303 }, results.Where(s => s.StartsWith("Control:ErrorDlg\tY")).Select(s => s.Split('\t')[9]).ToArray()); 302 }, results.Where(s => s.StartsWith("Control:ErrorDlg\tY")).Select(s => s.Split('\t')[9]).ToArray());
304 } 303 }
305 304
305 [Fact]
306 public void CannotBuildWithV3LikeUIRef()
307 {
308 var folder = TestData.Get(@"TestData", "InvalidUIRef");
309
310 using (var fs = new DisposableFileSystem())
311 {
312 var intermediateFolder = fs.GetFolder();
313 var outputPath = Path.Combine(intermediateFolder, "bin", "test.msi");
314
315 var args = new[]
316 {
317 "build",
318 Path.Combine(folder, "Package.wxs"),
319 "-ext", typeof(UIExtensionFactory).Assembly.Location,
320 "-intermediateFolder", intermediateFolder,
321 "-o", outputPath,
322 };
323
324 var results = WixRunner.Execute(args);
325 var message = results.Messages.Single();
326 Assert.Equal("The identifier 'WixUI:WixUI_Mondo' is inaccessible due to its protection level.", message.ToString());
327 }
328 }
329
306 private static void Build(string[] args) 330 private static void Build(string[] args)
307 { 331 {
308 var result = WixRunner.Execute(args) 332 var result = WixRunner.Execute(args)