diff options
Diffstat (limited to 'src/WixTestTools')
| -rw-r--r-- | src/WixTestTools/BundleRegistration.cs | 5 | ||||
| -rw-r--r-- | src/WixTestTools/BundleVerifier.cs | 11 | ||||
| -rw-r--r-- | src/WixTestTools/PackageInstaller.cs | 14 | ||||
| -rw-r--r-- | src/WixTestTools/PackageVerifier.cs | 30 | ||||
| -rw-r--r-- | src/WixTestTools/WixTestContext.cs | 10 |
5 files changed, 38 insertions, 32 deletions
diff --git a/src/WixTestTools/BundleRegistration.cs b/src/WixTestTools/BundleRegistration.cs index bf9e2903..75660838 100644 --- a/src/WixTestTools/BundleRegistration.cs +++ b/src/WixTestTools/BundleRegistration.cs | |||
| @@ -88,9 +88,10 @@ namespace WixTestTools | |||
| 88 | 88 | ||
| 89 | public string Version { get; set; } | 89 | public string Version { get; set; } |
| 90 | 90 | ||
| 91 | public static bool TryGetPerMachineBundleRegistrationById(string bundleId, out BundleRegistration registration) | 91 | public static bool TryGetPerMachineBundleRegistrationById(string bundleId, bool x64, out BundleRegistration registration) |
| 92 | { | 92 | { |
| 93 | var registrationKeyPath = $"{BURN_REGISTRATION_REGISTRY_UNINSTALL_KEY_WOW6432NODE}\\{bundleId}"; | 93 | var baseKeyPath = x64 ? BURN_REGISTRATION_REGISTRY_UNINSTALL_KEY : BURN_REGISTRATION_REGISTRY_UNINSTALL_KEY_WOW6432NODE; |
| 94 | var registrationKeyPath = $"{baseKeyPath}\\{bundleId}"; | ||
| 94 | using var registrationKey = Registry.LocalMachine.OpenSubKey(registrationKeyPath); | 95 | using var registrationKey = Registry.LocalMachine.OpenSubKey(registrationKeyPath); |
| 95 | var success = registrationKey != null; | 96 | var success = registrationKey != null; |
| 96 | registration = success ? GetBundleRegistration(registrationKey) : null; | 97 | registration = success ? GetBundleRegistration(registrationKey) : null; |
diff --git a/src/WixTestTools/BundleVerifier.cs b/src/WixTestTools/BundleVerifier.cs index 293da560..984df169 100644 --- a/src/WixTestTools/BundleVerifier.cs +++ b/src/WixTestTools/BundleVerifier.cs | |||
| @@ -73,10 +73,11 @@ namespace WixTestTools | |||
| 73 | public bool TryGetRegistration(out BundleRegistration registration) | 73 | public bool TryGetRegistration(out BundleRegistration registration) |
| 74 | { | 74 | { |
| 75 | var bundleSymbol = this.GetBundleSymbol(); | 75 | var bundleSymbol = this.GetBundleSymbol(); |
| 76 | var x64 = bundleSymbol.Platform != Platform.X86; | ||
| 76 | var bundleId = bundleSymbol.BundleId; | 77 | var bundleId = bundleSymbol.BundleId; |
| 77 | if (bundleSymbol.PerMachine) | 78 | if (bundleSymbol.PerMachine) |
| 78 | { | 79 | { |
| 79 | return BundleRegistration.TryGetPerMachineBundleRegistrationById(bundleId, out registration); | 80 | return BundleRegistration.TryGetPerMachineBundleRegistrationById(bundleId, x64, out registration); |
| 80 | } | 81 | } |
| 81 | else | 82 | else |
| 82 | { | 83 | { |
| @@ -132,9 +133,9 @@ namespace WixTestTools | |||
| 132 | Assert.True(Directory.Exists(cachePath)); | 133 | Assert.True(Directory.Exists(cachePath)); |
| 133 | } | 134 | } |
| 134 | 135 | ||
| 135 | public void VerifyExeTestRegistryRootDeleted(string name) | 136 | public void VerifyExeTestRegistryRootDeleted(string name, bool x64 = false) |
| 136 | { | 137 | { |
| 137 | using var testRegistryRoot = this.TestContext.GetTestRegistryRoot(name); | 138 | using var testRegistryRoot = this.TestContext.GetTestRegistryRoot(x64, name); |
| 138 | if (testRegistryRoot != null) | 139 | if (testRegistryRoot != null) |
| 139 | { | 140 | { |
| 140 | var actualValue = testRegistryRoot.GetValue("Version") as string; | 141 | var actualValue = testRegistryRoot.GetValue("Version") as string; |
| @@ -142,9 +143,9 @@ namespace WixTestTools | |||
| 142 | } | 143 | } |
| 143 | } | 144 | } |
| 144 | 145 | ||
| 145 | public void VerifyExeTestRegistryValue(string name, string expectedValue) | 146 | public void VerifyExeTestRegistryValue(string name, string expectedValue, bool x64 = false) |
| 146 | { | 147 | { |
| 147 | using (var root = this.TestContext.GetTestRegistryRoot(name)) | 148 | using (var root = this.TestContext.GetTestRegistryRoot(x64, name)) |
| 148 | { | 149 | { |
| 149 | Assert.NotNull(root); | 150 | Assert.NotNull(root); |
| 150 | var actualValue = root.GetValue("Version") as string; | 151 | var actualValue = root.GetValue("Version") as string; |
diff --git a/src/WixTestTools/PackageInstaller.cs b/src/WixTestTools/PackageInstaller.cs index 86376b9f..d32f499b 100644 --- a/src/WixTestTools/PackageInstaller.cs +++ b/src/WixTestTools/PackageInstaller.cs | |||
| @@ -4,6 +4,10 @@ namespace WixTestTools | |||
| 4 | { | 4 | { |
| 5 | using System; | 5 | using System; |
| 6 | using System.IO; | 6 | using System.IO; |
| 7 | using System.Linq; | ||
| 8 | using WixToolset.Data; | ||
| 9 | using WixToolset.Data.Symbols; | ||
| 10 | using WixToolset.Data.WindowsInstaller; | ||
| 7 | using static WixTestTools.MSIExec; | 11 | using static WixTestTools.MSIExec; |
| 8 | 12 | ||
| 9 | public partial class PackageInstaller : IDisposable | 13 | public partial class PackageInstaller : IDisposable |
| @@ -13,6 +17,16 @@ namespace WixTestTools | |||
| 13 | this.Package = Path.Combine(testContext.TestDataFolder, $"{filename}.msi"); | 17 | this.Package = Path.Combine(testContext.TestDataFolder, $"{filename}.msi"); |
| 14 | this.PackagePdb = Path.Combine(testContext.TestDataFolder, $"{filename}.wixpdb"); | 18 | this.PackagePdb = Path.Combine(testContext.TestDataFolder, $"{filename}.wixpdb"); |
| 15 | this.TestContext = testContext; | 19 | this.TestContext = testContext; |
| 20 | |||
| 21 | using var wixOutput = WixOutput.Read(this.PackagePdb); | ||
| 22 | |||
| 23 | var intermediate = Intermediate.Load(wixOutput); | ||
| 24 | var section = intermediate.Sections.Single(); | ||
| 25 | var platformSummary = section.Symbols.OfType<SummaryInformationSymbol>().Single(s => s.PropertyId == SummaryInformationType.PlatformAndLanguage); | ||
| 26 | var platformString = platformSummary.Value.Split(new char[] { ';' }, 2)[0]; | ||
| 27 | this.IsX64 = platformString != "Intel"; | ||
| 28 | |||
| 29 | this.WiData = WindowsInstallerData.Load(wixOutput); | ||
| 16 | } | 30 | } |
| 17 | 31 | ||
| 18 | public string Package { get; } | 32 | public string Package { get; } |
diff --git a/src/WixTestTools/PackageVerifier.cs b/src/WixTestTools/PackageVerifier.cs index 073e83b0..2f42dd21 100644 --- a/src/WixTestTools/PackageVerifier.cs +++ b/src/WixTestTools/PackageVerifier.cs | |||
| @@ -5,7 +5,6 @@ namespace WixTestTools | |||
| 5 | using System; | 5 | using System; |
| 6 | using System.IO; | 6 | using System.IO; |
| 7 | using System.Linq; | 7 | using System.Linq; |
| 8 | using WixToolset.Data; | ||
| 9 | using WixToolset.Data.WindowsInstaller; | 8 | using WixToolset.Data.WindowsInstaller; |
| 10 | using WixToolset.Data.WindowsInstaller.Rows; | 9 | using WixToolset.Data.WindowsInstaller.Rows; |
| 11 | using Xunit; | 10 | using Xunit; |
| @@ -14,28 +13,18 @@ namespace WixTestTools | |||
| 14 | { | 13 | { |
| 15 | public string PackagePdb { get; } | 14 | public string PackagePdb { get; } |
| 16 | 15 | ||
| 17 | private WindowsInstallerData WiData { get; set; } | 16 | private bool IsX64 { get; } |
| 18 | 17 | ||
| 19 | public string GetInstalledFilePath(string filename) | 18 | private WindowsInstallerData WiData { get; } |
| 20 | { | ||
| 21 | return this.TestContext.GetTestInstallFolder(Path.Combine(this.GetInstallFolderName(), filename)); | ||
| 22 | } | ||
| 23 | 19 | ||
| 24 | private WindowsInstallerData GetWindowsInstallerData() | 20 | public string GetInstalledFilePath(string filename) |
| 25 | { | 21 | { |
| 26 | if (this.WiData == null) | 22 | return this.TestContext.GetTestInstallFolder(this.IsX64, Path.Combine(this.GetInstallFolderName(), filename)); |
| 27 | { | ||
| 28 | using var wixOutput = WixOutput.Read(this.PackagePdb); | ||
| 29 | this.WiData = WindowsInstallerData.Load(wixOutput); | ||
| 30 | } | ||
| 31 | |||
| 32 | return this.WiData; | ||
| 33 | } | 23 | } |
| 34 | 24 | ||
| 35 | public string GetInstallFolderName() | 25 | public string GetInstallFolderName() |
| 36 | { | 26 | { |
| 37 | var wiData = this.GetWindowsInstallerData(); | 27 | var row = this.WiData.Tables["Directory"].Rows.Single(r => r.FieldAsString(0) == "INSTALLFOLDER"); |
| 38 | var row = wiData.Tables["Directory"].Rows.Single(r => r.FieldAsString(0) == "INSTALLFOLDER"); | ||
| 39 | var value = row.FieldAsString(2); | 28 | var value = row.FieldAsString(2); |
| 40 | var longNameIndex = value.IndexOf('|') + 1; | 29 | var longNameIndex = value.IndexOf('|') + 1; |
| 41 | if (longNameIndex > 0) | 30 | if (longNameIndex > 0) |
| @@ -47,8 +36,7 @@ namespace WixTestTools | |||
| 47 | 36 | ||
| 48 | public string GetProperty(string name) | 37 | public string GetProperty(string name) |
| 49 | { | 38 | { |
| 50 | var wiData = this.GetWindowsInstallerData(); | 39 | var row = this.WiData.Tables["Property"].Rows.Cast<PropertyRow>().Single(r => r.Property == name); |
| 51 | var row = wiData.Tables["Property"].Rows.Cast<PropertyRow>().Single(r => r.Property == name); | ||
| 52 | return row.Value; | 40 | return row.Value; |
| 53 | } | 41 | } |
| 54 | 42 | ||
| @@ -67,7 +55,7 @@ namespace WixTestTools | |||
| 67 | 55 | ||
| 68 | public void DeleteTestRegistryValue(string name) | 56 | public void DeleteTestRegistryValue(string name) |
| 69 | { | 57 | { |
| 70 | using (var root = this.TestContext.GetTestRegistryRoot()) | 58 | using (var root = this.TestContext.GetTestRegistryRoot(this.IsX64)) |
| 71 | { | 59 | { |
| 72 | Assert.NotNull(root); | 60 | Assert.NotNull(root); |
| 73 | root.DeleteValue(name); | 61 | root.DeleteValue(name); |
| @@ -76,13 +64,13 @@ namespace WixTestTools | |||
| 76 | 64 | ||
| 77 | public void VerifyTestRegistryRootDeleted() | 65 | public void VerifyTestRegistryRootDeleted() |
| 78 | { | 66 | { |
| 79 | using var testRegistryRoot = this.TestContext.GetTestRegistryRoot(); | 67 | using var testRegistryRoot = this.TestContext.GetTestRegistryRoot(this.IsX64); |
| 80 | Assert.Null(testRegistryRoot); | 68 | Assert.Null(testRegistryRoot); |
| 81 | } | 69 | } |
| 82 | 70 | ||
| 83 | public void VerifyTestRegistryValue(string name, string expectedValue) | 71 | public void VerifyTestRegistryValue(string name, string expectedValue) |
| 84 | { | 72 | { |
| 85 | using (var root = this.TestContext.GetTestRegistryRoot()) | 73 | using (var root = this.TestContext.GetTestRegistryRoot(this.IsX64)) |
| 86 | { | 74 | { |
| 87 | Assert.NotNull(root); | 75 | Assert.NotNull(root); |
| 88 | var actualValue = root.GetValue(name) as string; | 76 | var actualValue = root.GetValue(name) as string; |
diff --git a/src/WixTestTools/WixTestContext.cs b/src/WixTestTools/WixTestContext.cs index c00f5723..a4e666f1 100644 --- a/src/WixTestTools/WixTestContext.cs +++ b/src/WixTestTools/WixTestContext.cs | |||
| @@ -42,9 +42,10 @@ namespace WixTestTools | |||
| 42 | /// <remarks> | 42 | /// <remarks> |
| 43 | /// The package or bundle must install into [ProgramFilesFolder]\~Test WiX\[TestGroupName]\([Additional]). | 43 | /// The package or bundle must install into [ProgramFilesFolder]\~Test WiX\[TestGroupName]\([Additional]). |
| 44 | /// </remarks> | 44 | /// </remarks> |
| 45 | public string GetTestInstallFolder(string additionalPath = null) | 45 | public string GetTestInstallFolder(bool x64, string additionalPath = null) |
| 46 | { | 46 | { |
| 47 | return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "~Test WiX", this.TestGroupName, additionalPath ?? String.Empty); | 47 | var baseDirectory = x64 ? Environment.SpecialFolder.ProgramFiles : Environment.SpecialFolder.ProgramFilesX86; |
| 48 | return Path.Combine(Environment.GetFolderPath(baseDirectory), "~Test WiX", this.TestGroupName, additionalPath ?? String.Empty); | ||
| 48 | } | 49 | } |
| 49 | 50 | ||
| 50 | /// <summary> | 51 | /// <summary> |
| @@ -55,9 +56,10 @@ namespace WixTestTools | |||
| 55 | /// <remarks> | 56 | /// <remarks> |
| 56 | /// The package must write into HKLM\Software\WiX\Tests\[TestGroupName]\([Additional]). | 57 | /// The package must write into HKLM\Software\WiX\Tests\[TestGroupName]\([Additional]). |
| 57 | /// </remarks> | 58 | /// </remarks> |
| 58 | public RegistryKey GetTestRegistryRoot(string additionalPath = null) | 59 | public RegistryKey GetTestRegistryRoot(bool x64, string additionalPath = null) |
| 59 | { | 60 | { |
| 60 | var key = String.Format(@"Software\WOW6432Node\WiX\Tests\{0}\{1}", this.TestGroupName, additionalPath ?? String.Empty); | 61 | var baseKey = x64 ? "Software" : @"Software\WOW6432Node"; |
| 62 | var key = String.Format(@"{0}\WiX\Tests\{1}\{2}", baseKey, this.TestGroupName, additionalPath ?? String.Empty); | ||
| 61 | return Registry.LocalMachine.OpenSubKey(key, true); | 63 | return Registry.LocalMachine.OpenSubKey(key, true); |
| 62 | } | 64 | } |
| 63 | 65 | ||
