| 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.VisualStudio |
| 4 | { |
| 5 | using WixInternal.TestSupport; |
| 6 | using WixInternal.Core.TestPackage; |
| 7 | using WixToolset.VisualStudio; |
| 8 | using Xunit; |
| 9 | using System.Linq; |
| 10 | |
| 11 | public class VisualStudioExtensionFixture |
| 12 | { |
| 13 | [Fact] |
| 14 | public void CanBuildUsingVsixPackage() |
| 15 | { |
| 16 | var folder = TestData.Get(@"TestData\UsingVsixPackage"); |
| 17 | var build = new Builder(folder, typeof(VSExtensionFactory), new[] { folder }); |
| 18 | |
| 19 | var results = build.BuildAndQuery(Build, "CustomAction"); |
| 20 | WixAssert.CompareLineByLine(new[] |
| 21 | { |
| 22 | "CustomAction:SetVS2010Vsix\t51\tVS_VSIX_INSTALLER_PATH\t[VS2010_VSIX_INSTALLER_PATH]\t", |
| 23 | "CustomAction:SetVS2012Vsix\t51\tVS_VSIX_INSTALLER_PATH\t[VS2012_VSIX_INSTALLER_PATH]\t", |
| 24 | "CustomAction:SetVS2013Vsix\t51\tVS_VSIX_INSTALLER_PATH\t[VS2013_VSIX_INSTALLER_PATH]\t", |
| 25 | "CustomAction:SetVS2015Vsix\t51\tVS_VSIX_INSTALLER_PATH\t[VS2015_VSIX_INSTALLER_PATH]\t", |
| 26 | "CustomAction:vimLa9TyFoAVwf8JmA0_ZJHA69J2fo\t3122\tVS_VSIX_INSTALLER_PATH\t/q \"[#filzi8nwT8Ta133xcfp7qSIdGdRiC0]\" /admin\t", |
| 27 | "CustomAction:viuMpl8IvFSDAzTulrmpAzBwAmCRTQ\t1074\tVS_VSIX_INSTALLER_PATH\t/q \"[#filzi8nwT8Ta133xcfp7qSIdGdRiC0]\"\t", |
| 28 | "CustomAction:vrmLa9TyFoAVwf8JmA0_ZJHA69J2fo\t3442\tVS_VSIX_INSTALLER_PATH\t/q /u:\"ExampleVsix\" /admin\t", |
| 29 | "CustomAction:vruMpl8IvFSDAzTulrmpAzBwAmCRTQ\t1394\tVS_VSIX_INSTALLER_PATH\t/q /u:\"ExampleVsix\"\t", |
| 30 | "CustomAction:vumLa9TyFoAVwf8JmA0_ZJHA69J2fo\t3186\tVS_VSIX_INSTALLER_PATH\t/q /u:\"ExampleVsix\" /admin\t", |
| 31 | "CustomAction:vuuMpl8IvFSDAzTulrmpAzBwAmCRTQ\t1138\tVS_VSIX_INSTALLER_PATH\t/q /u:\"ExampleVsix\"\t", |
| 32 | "CustomAction:Vwd2012VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2012_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t", |
| 33 | "CustomAction:Vwd2013VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2013_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t", |
| 34 | "CustomAction:Vwd2015VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2015_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t", |
| 35 | "CustomAction:Wix4VSFindInstances_X86\t257\tVSCA_X86\tFindInstances\t", |
| 36 | }, results); |
| 37 | } |
| 38 | |
| 39 | [Fact] |
| 40 | public void CanBuildUsingVsixPackageOnArm64() |
| 41 | { |
| 42 | var folder = TestData.Get(@"TestData\UsingVsixPackage"); |
| 43 | var build = new Builder(folder, typeof(VSExtensionFactory), new[] { folder }); |
| 44 | |
| 45 | var results = build.BuildAndQuery(BuildARM64, "CustomAction", "Property"); |
| 46 | |
| 47 | var customActionResults = results.Where(r => r.StartsWith("CustomAction:")).ToArray(); |
| 48 | WixAssert.CompareLineByLine(new[] |
| 49 | { |
| 50 | "CustomAction:SetVS2010Vsix\t51\tVS_VSIX_INSTALLER_PATH\t[VS2010_VSIX_INSTALLER_PATH]\t", |
| 51 | "CustomAction:SetVS2012Vsix\t51\tVS_VSIX_INSTALLER_PATH\t[VS2012_VSIX_INSTALLER_PATH]\t", |
| 52 | "CustomAction:SetVS2013Vsix\t51\tVS_VSIX_INSTALLER_PATH\t[VS2013_VSIX_INSTALLER_PATH]\t", |
| 53 | "CustomAction:SetVS2015Vsix\t51\tVS_VSIX_INSTALLER_PATH\t[VS2015_VSIX_INSTALLER_PATH]\t", |
| 54 | "CustomAction:vimLa9TyFoAVwf8JmA0_ZJHA69J2fo\t3122\tVS_VSIX_INSTALLER_PATH\t/q \"[#filzi8nwT8Ta133xcfp7qSIdGdRiC0]\" /admin\t", |
| 55 | "CustomAction:viuMpl8IvFSDAzTulrmpAzBwAmCRTQ\t1074\tVS_VSIX_INSTALLER_PATH\t/q \"[#filzi8nwT8Ta133xcfp7qSIdGdRiC0]\"\t", |
| 56 | "CustomAction:vrmLa9TyFoAVwf8JmA0_ZJHA69J2fo\t3442\tVS_VSIX_INSTALLER_PATH\t/q /u:\"ExampleVsix\" /admin\t", |
| 57 | "CustomAction:vruMpl8IvFSDAzTulrmpAzBwAmCRTQ\t1394\tVS_VSIX_INSTALLER_PATH\t/q /u:\"ExampleVsix\"\t", |
| 58 | "CustomAction:vumLa9TyFoAVwf8JmA0_ZJHA69J2fo\t3186\tVS_VSIX_INSTALLER_PATH\t/q /u:\"ExampleVsix\" /admin\t", |
| 59 | "CustomAction:vuuMpl8IvFSDAzTulrmpAzBwAmCRTQ\t1138\tVS_VSIX_INSTALLER_PATH\t/q /u:\"ExampleVsix\"\t", |
| 60 | "CustomAction:Vwd2012VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2012_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t", |
| 61 | "CustomAction:Vwd2013VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2013_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t", |
| 62 | "CustomAction:Vwd2015VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2015_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t", |
| 63 | "CustomAction:Wix4VSFindInstances_A64\t257\tVSCA_A64\tFindInstances\t", |
| 64 | }, customActionResults); |
| 65 | |
| 66 | var propertyResults = results.Single(r => r.StartsWith("Property:SecureCustomProperties")).Split('\t')[1].Split(';'); |
| 67 | WixAssert.CompareLineByLine(new[] |
| 68 | { |
| 69 | "VS_VSIX_INSTALLER_PATH", |
| 70 | "VS2010_VSIX_INSTALLER_PATH", |
| 71 | "VS2012_VSIX_INSTALLER_PATH", |
| 72 | "VS2013_VSIX_INSTALLER_PATH", |
| 73 | "VS2015_VSIX_INSTALLER_PATH", |
| 74 | "VS2017_IDE_DIR", |
| 75 | "VS2017_ROOT_FOLDER", |
| 76 | "VS2017DEVENV", |
| 77 | "VS2019_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED", |
| 78 | "VS2022_ROOT_FOLDER", |
| 79 | "WIX_DOWNGRADE_DETECTED", |
| 80 | "WIX_UPGRADE_DETECTED", |
| 81 | }, propertyResults); |
| 82 | } |
| 83 | |
| 84 | private static void Build(string[] args) |
| 85 | { |
| 86 | var result = WixRunner.Execute(args) |
| 87 | .AssertSuccess(); |
| 88 | } |
| 89 | |
| 90 | private static void BuildARM64(string[] args) |
| 91 | { |
| 92 | var newArgs = args.ToList(); |
| 93 | newArgs.Add("-platform"); |
| 94 | newArgs.Add("arm64"); |
| 95 | |
| 96 | var result = WixRunner.Execute(newArgs.ToArray()); |
| 97 | result.AssertSuccess(); |
| 98 | } |
| 99 | } |
| 100 | } |