From 7ce477c6863c74ef0a50d117d8c28b2f19971b42 Mon Sep 17 00:00:00 2001 From: Bob Arnson Date: Sat, 29 Jan 2022 23:44:11 -0500 Subject: Add compiler extension to handle platforms. Custom actions to print EULA and validate install directories are defined in WixUIExtension compiler extension, to handle platform-specific custom actions referred to from `DoAction` control events. This is the least-worst solution, given the `DoAction` approach used in the WixUI authoring and anyone customizing a WixUI set. --- .../TestData/WixUI_Advanced/Package.wxs | 6 +- .../TestData/WixUI_FeatureTree/Package.wxs | 4 +- .../TestData/WixUI_InstallDir/Package.wxs | 4 +- .../TestData/WixUI_Minimal/Package.wxs | 4 +- .../TestData/WixUI_Mondo/Package.wxs | 4 +- .../test/WixToolsetTest.UI/UIExtensionFixture.cs | 99 +++++++++++++++------- 6 files changed, 79 insertions(+), 42 deletions(-) (limited to 'src/ext/UI/test/WixToolsetTest.UI') diff --git a/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_Advanced/Package.wxs b/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_Advanced/Package.wxs index 5ce4b00f..c22328e6 100644 --- a/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_Advanced/Package.wxs +++ b/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_Advanced/Package.wxs @@ -1,5 +1,5 @@ - - + + @@ -12,7 +12,7 @@ - + diff --git a/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_FeatureTree/Package.wxs b/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_FeatureTree/Package.wxs index aff1c077..7c4db223 100644 --- a/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_FeatureTree/Package.wxs +++ b/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_FeatureTree/Package.wxs @@ -1,4 +1,4 @@ - + @@ -12,7 +12,7 @@ - + diff --git a/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_InstallDir/Package.wxs b/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_InstallDir/Package.wxs index 7c2ceae0..b6f2344a 100644 --- a/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_InstallDir/Package.wxs +++ b/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_InstallDir/Package.wxs @@ -1,4 +1,4 @@ - + @@ -12,7 +12,7 @@ - + diff --git a/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_Minimal/Package.wxs b/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_Minimal/Package.wxs index d2ff256c..962be579 100644 --- a/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_Minimal/Package.wxs +++ b/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_Minimal/Package.wxs @@ -1,4 +1,4 @@ - + @@ -12,7 +12,7 @@ - + diff --git a/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_Mondo/Package.wxs b/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_Mondo/Package.wxs index 8d5a856a..9eca9790 100644 --- a/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_Mondo/Package.wxs +++ b/src/ext/UI/test/WixToolsetTest.UI/TestData/WixUI_Mondo/Package.wxs @@ -1,4 +1,4 @@ - + @@ -12,7 +12,7 @@ - + diff --git a/src/ext/UI/test/WixToolsetTest.UI/UIExtensionFixture.cs b/src/ext/UI/test/WixToolsetTest.UI/UIExtensionFixture.cs index 778bfb64..4ab7ec3f 100644 --- a/src/ext/UI/test/WixToolsetTest.UI/UIExtensionFixture.cs +++ b/src/ext/UI/test/WixToolsetTest.UI/UIExtensionFixture.cs @@ -7,8 +7,6 @@ namespace WixToolsetTest.UI using System.Linq; using WixBuildTools.TestSupport; using WixToolset.Core.TestPackage; - using WixToolset.Data; - using WixToolset.Data.Symbols; using WixToolset.Data.WindowsInstaller; using WixToolset.UI; using Xunit; @@ -22,11 +20,48 @@ namespace WixToolsetTest.UI var bindFolder = TestData.Get(@"TestData\data"); var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); - var results = build.BuildAndQuery(Build, "Property"); - WixAssert.CompareLineByLine(new[] - { - "Property:WixUI_Mode\tAdvanced", - }, results.Where(s => s.StartsWith("Property:WixUI_Mode")).ToArray()); + var results = build.BuildAndQuery(Build, "Dialog", "CustomAction"); + Assert.Single(results, result => result.StartsWith("Dialog:AdvancedWelcomeEulaDlg\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixSetDefaultPerMachineFolder\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixSetDefaultPerUserFolder\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixSetPerMachineFolder\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixSetPerUserFolder\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixUIPrintEula\t65\tWixUiCa_X86\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixUIValidatePath\t65\tWixUiCa_X86\t")); + } + + [Fact] + public void CanBuildUsingWixUIAdvancedX64() + { + var folder = TestData.Get(@"TestData\WixUI_Advanced"); + var bindFolder = TestData.Get(@"TestData\data"); + var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); + + var results = build.BuildAndQuery(BuildX64, "Dialog", "CustomAction"); + Assert.Single(results, result => result.StartsWith("Dialog:AdvancedWelcomeEulaDlg\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixSetDefaultPerMachineFolder\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixSetDefaultPerUserFolder\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixSetPerMachineFolder\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixSetPerUserFolder\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixUIPrintEula\t65\tWixUiCa_X64\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixUIValidatePath\t65\tWixUiCa_X64\t")); + } + + [Fact] + public void CanBuildUsingWixUIAdvancedARM64() + { + var folder = TestData.Get(@"TestData\WixUI_Advanced"); + var bindFolder = TestData.Get(@"TestData\data"); + var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); + + var results = build.BuildAndQuery(BuildARM64, "Dialog", "CustomAction"); + Assert.Single(results, result => result.StartsWith("Dialog:AdvancedWelcomeEulaDlg\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixSetDefaultPerMachineFolder\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixSetDefaultPerUserFolder\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixSetPerMachineFolder\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixSetPerUserFolder\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixUIPrintEula\t65\tWixUiCa_A64\t")); + Assert.Single(results, result => result.StartsWith("CustomAction:WixUIValidatePath\t65\tWixUiCa_A64\t")); } [Fact] @@ -36,11 +71,10 @@ namespace WixToolsetTest.UI var bindFolder = TestData.Get(@"TestData\data"); var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); - var results = build.BuildAndQuery(Build, "Property"); - WixAssert.CompareLineByLine(new[] - { - "Property:WixUI_Mode\tFeatureTree", - }, results.Where(s => s.StartsWith("Property:WixUI_Mode")).ToArray()); + var results = build.BuildAndQuery(Build, "Dialog", "CustomAction"); + Assert.Single(results, result => result.StartsWith("Dialog:WelcomeDlg\t")); + Assert.Single(results, result => result.StartsWith("Dialog:CustomizeDlg\t")); + Assert.Empty(results.Where(result => result.StartsWith("Dialog:SetupTypeDlg\t"))); } [Fact] @@ -50,11 +84,8 @@ namespace WixToolsetTest.UI var bindFolder = TestData.Get(@"TestData\data"); var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); - var results = build.BuildAndQuery(Build, "Property"); - WixAssert.CompareLineByLine(new[] - { - "Property:WixUI_Mode\tInstallDir", - }, results.Where(s => s.StartsWith("Property:WixUI_Mode")).ToArray()); + var results = build.BuildAndQuery(Build, "Dialog", "CustomAction"); + Assert.Single(results, result => result.StartsWith("Dialog:InstallDirDlg\t")); } [Fact] @@ -64,11 +95,8 @@ namespace WixToolsetTest.UI var bindFolder = TestData.Get(@"TestData\data"); var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); - var results = build.BuildAndQuery(Build, "Property"); - WixAssert.CompareLineByLine(new[] - { - "Property:WixUI_Mode\tMinimal", - }, results.Where(s => s.StartsWith("Property:WixUI_Mode")).ToArray()); + var results = build.BuildAndQuery(Build, "Dialog", "CustomAction"); + Assert.Single(results, result => result.StartsWith("Dialog:WelcomeEulaDlg\t")); } [Fact] @@ -92,10 +120,8 @@ namespace WixToolsetTest.UI }); var wid = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); - var propertyTable = wid.Tables["Property"]; - - var propertyRow = propertyTable.Rows.Single(r => r.GetPrimaryKey() == "WixUI_Mode"); - WixAssert.StringEqual("Minimal", propertyRow.FieldAsString(1)); + var dialogTable = wid.Tables["Dialog"]; + var dialogRow = dialogTable.Rows.Single(r => r.GetPrimaryKey() == "WelcomeEulaDlg"); } } @@ -106,11 +132,10 @@ namespace WixToolsetTest.UI var bindFolder = TestData.Get(@"TestData\data"); var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder }); - var results = build.BuildAndQuery(Build, "Property"); - WixAssert.CompareLineByLine(new[] - { - "Property:WixUI_Mode\tMondo", - }, results.Where(s => s.StartsWith("Property:WixUI_Mode")).ToArray()); + var results = build.BuildAndQuery(Build, "Dialog", "CustomAction"); + Assert.Single(results, result => result.StartsWith("Dialog:WelcomeDlg\t")); + Assert.Single(results, result => result.StartsWith("Dialog:CustomizeDlg\t")); + Assert.Single(results, result => result.StartsWith("Dialog:SetupTypeDlg\t")); } [Fact] @@ -133,6 +158,18 @@ namespace WixToolsetTest.UI .AssertSuccess(); } + private static void BuildX64(string[] args) + { + var result = WixRunner.Execute(args.Concat(new[] { "-arch", "x64" }).ToArray()) + .AssertSuccess(); + } + + private static void BuildARM64(string[] args) + { + var result = WixRunner.Execute(args.Concat(new[] { "-arch", "arm64" }).ToArray()) + .AssertSuccess(); + } + private static void BuildInGerman(string[] args) { var localizedArgs = args.Append("-culture").Append("de-DE").ToArray(); -- cgit v1.2.3-55-g6feb