From f9ae2561ac4a39ba810234db3b562ca2898ccaf4 Mon Sep 17 00:00:00 2001 From: Bob Arnson Date: Thu, 4 Apr 2024 16:49:16 -0400 Subject: Prevent source directories from being harvested. Fixes https://github.com/wixtoolset/issues/issues/8096. --- .../SetBuildNumber/Directory.Packages.props.pp | 1 + src/wix/WixToolset.Core/HarvestFilesCommand.cs | 4 +- .../HarvestFilesFixture.cs | 397 ++++++++++----------- .../WixToolsetTest.CoreIntegration.csproj | 1 + 4 files changed, 196 insertions(+), 207 deletions(-) diff --git a/src/internal/SetBuildNumber/Directory.Packages.props.pp b/src/internal/SetBuildNumber/Directory.Packages.props.pp index bb0f96d8..0c4b1dfb 100644 --- a/src/internal/SetBuildNumber/Directory.Packages.props.pp +++ b/src/internal/SetBuildNumber/Directory.Packages.props.pp @@ -5,6 +5,7 @@ + diff --git a/src/wix/WixToolset.Core/HarvestFilesCommand.cs b/src/wix/WixToolset.Core/HarvestFilesCommand.cs index 4f0c2e2a..9d2d0fe8 100644 --- a/src/wix/WixToolset.Core/HarvestFilesCommand.cs +++ b/src/wix/WixToolset.Core/HarvestFilesCommand.cs @@ -128,7 +128,7 @@ namespace WixToolset.Core private IEnumerable GetWildcardFiles(HarvestFilesSymbol harvestFile, IEnumerable patterns) { var sourceLineNumbers = harvestFile.SourceLineNumbers; - var sourcePath = harvestFile.SourcePath; + var sourcePath = harvestFile.SourcePath?.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); var files = new List(); @@ -158,7 +158,7 @@ namespace WixToolset.Core else if (!Path.IsPathRooted(directoryPortion)) { directoryPortion = Path.Combine(sourceDirectory, directoryPortion); - recursiveDirOffset = sourceDirectory.Length + 1; + recursiveDirOffset = directoryPortion.Length + 1; } var foundFiles = Directory.EnumerateFiles(directoryPortion, filePortion, recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly); diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/HarvestFilesFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/HarvestFilesFixture.cs index 8bf03ebb..821660ff 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/HarvestFilesFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/HarvestFilesFixture.cs @@ -2,6 +2,7 @@ namespace WixToolsetTest.CoreIntegration { + using System; using System.Data; using System.IO; using System.Linq; @@ -14,257 +15,293 @@ namespace WixToolsetTest.CoreIntegration [Fact] public void MustIncludeSomeFiles() { - var messages = BuildAndQueryComponentFileDirectoryTables("BadAuthoring.wxs", isPackage: true, 10); - Assert.Equal(new[] + Build("BadAuthoring.wxs", (_, result) => { - "10", - }, messages); + var messages = result.Messages.Select(m => m.Id); + Assert.Equal(new[] + { + 10, + }, messages); + }); } [Fact] public void ZeroFilesHarvestedIsAWarning() { - var messages = BuildAndQueryComponentFileDirectoryTables("ZeroFiles.wxs", isPackage: true, 8600); - Assert.Equal(new[] + Build("ZeroFiles.wxs", (_, result) => { - "8600", - }, messages); + var messages = result.Messages.Select(m => m.Id); + Assert.Equal(new[] + { + 8600, + }, messages); + }); } [Fact] public void MissingHarvestDirectoryIsAWarning() { - var messages = BuildAndQueryComponentFileDirectoryTables("BadDirectory.wxs", isPackage: true, 8601); - Assert.Equal(new[] + Build("BadDirectory.wxs", (_, result) => { - "8601", - "8601", - }, messages); + var messages = result.Messages.Select(m => m.Id); + Assert.Equal(new[] + { + 8601, + 8601, + }, messages); + }); } [Fact] public void DuplicateFilesSomethingSomething() { - var messages = BuildAndQueryComponentFileDirectoryTables("DuplicateFiles.wxs", isPackage: true, 8602); - Assert.Equal(new[] + Build("DuplicateFiles.wxs", (_, result) => { - "8602", - "8602", - "8602", - "8602", - }, messages); + var messages = result.Messages.Select(m => m.Id); + Assert.Equal(new[] + { + 8602, + 8602, + 8602, + 8602, + }, messages); + }); } [Fact] - public void CanHarvestFilesInComponentGroup() + public void HarvestedFilesUnderPackageWithAuthoredFeatureAreOrphaned() { - BuildQueryAssertFiles("ComponentGroup.wxs", new[] + Build("PackageWithoutDefaultFeature.wxs", (_, result) => { - "FileName.Extension", - "test20.txt", - "test21.txt", - "test3.txt", - "test4.txt", + var messages = result.Messages.Select(m => m.Id); + Assert.Equal(new[] + { + 267, + 267, + 267, + 267, + }, messages); }); } + [Fact] + public void CanHarvestFilesInComponentGroup() + { + var expected = new[] + { + @"fls4di7CtiJhJnEwixr8_c5G8k8aNY=PFiles\MsiPackage\test3.txt", + @"flsk5E532wcxn9MfpYQYRnrPi3dsOA=PFiles\MsiPackage\test4.txt", + @"flsYh0SwdEpJEootWp2keHMLnnpeb4=PFiles\MsiPackage\files2_sub2\test20.txt", + @"flsI4uo74epTPY4TLIcWKVaH.HTbVQ=PFiles\MsiPackage\files2_sub2\test21.txt", + @"fls5xOtTcUOA9ZDnUsz1D4Arbw7l_A=PFiles\MsiPackage\files2_sub3\FileName.Extension", + }; + + Build("ComponentGroup.wxs", (msiPath, _) => AssertFileIdsAndTargetPaths(msiPath, expected)); + } + [Fact] public void CanHarvestFilesInDirectory() { - BuildQueryAssertFiles("Directory.wxs", new[] + var expected = new[] { - "test10.txt", - "test120.txt", - "test2.txt", - "test3.txt", - "test4.txt", - }); + @"flsD7JQZm.Ts2375WMT.zsTxqCAf.s=PFiles\MsiPackage\files1_sub1\test10.txt", + @"flslrDWblm4pE.4i4jR58_XyYMmR8I=PFiles\MsiPackage\files1_sub1\files1_sub2\test120.txt", + @"flsj.cb0sFWqIPHPFSKJSEEaPDuAQ4=PFiles\MsiPackage\test2.txt", + @"flsaFu0CvigRX6Psea0ic6ZWevzLmI=PFiles\MsiPackage\test3.txt", + @"flsJBy_HKCNejalUyud4HisGqhd72E=PFiles\MsiPackage\test4.txt", + }; + + Build("Directory.wxs", (msiPath, _) => AssertFileIdsAndTargetPaths(msiPath, expected)); } [Fact] public void CanHarvestFilesInDirectoryRef() { - BuildQueryAssertFiles("DirectoryRef.wxs", new[] + var expected = new[] { - "notatest.txt", - "pleasedontincludeme.dat", - "test1.txt", - "test120.txt", - "test2.txt", - "test20.txt", - "test21.txt", - "test3.txt", - "test4.txt", - }); + @"flsYgiwrDUkZnBEK6iUMkxxaJlD8yQ=PFiles\MsiPackage\test1.txt", + @"flsj.cb0sFWqIPHPFSKJSEEaPDuAQ4=PFiles\MsiPackage\test2.txt", + @"flslrDWblm4pE.4i4jR58_XyYMmR8I=PFiles\MsiPackage\files1_sub1\files1_sub2\test120.txt", + @"flsIpBotASYdALXxudRqekdQdKEKdQ=PFiles\MsiPackage\notatest.txt", + @"flsaFu0CvigRX6Psea0ic6ZWevzLmI=PFiles\MsiPackage\test3.txt", + @"flsJBy_HKCNejalUyud4HisGqhd72E=PFiles\MsiPackage\test4.txt", + @"flsLXU67KiOVU00lZL1jaDaBVpg.Dw=PFiles\MsiPackage\files2_sub2\pleasedontincludeme.dat", + @"fls05.yw49T0FVAq3Wvq2ihNp3KWfI=PFiles\MsiPackage\files2_sub2\test20.txt", + @"flsf0falU_gCTJjtbSCNiFpJQ1d8EM=PFiles\MsiPackage\files2_sub2\test21.txt", + }; + + Build("DirectoryRef.wxs", (msiPath, _) => AssertFileIdsAndTargetPaths(msiPath, expected)); } [Fact] public void CanHarvestFilesInFeature() { - var rows = BuildAndQueryComponentFileDirectoryTables("Feature.wxs"); + var expected = new[] + { + @"flsFGp4MRR_h3Qm.CuBFwC0AJo6b6M=PFiles\Example Product\test2.txt", + @"flsTCB.ifIor30C7HfezIDjMB3mrdk=PFiles\Example Product\Assets\test3.txt", + @"flsTIP5QnXmYzSzwEM2casYcyn1eR4=PFiles\Example Product\Assets\test4.txt", + }; - AssertFileComponentIds(3, rows); + Build("Feature.wxs", (msiPath, _) => AssertFileIdsAndTargetPaths(msiPath, expected)); } [Fact] public void CanHarvestFilesInFeatureGroup() { - BuildQueryAssertFiles("FeatureGroup.wxs", new[] + var expected = new[] { - "FileName.Extension", - "notatest.txt", - "pleasedontincludeme.dat", - "test1.txt", - "test2.txt", - "test20.txt", - "test21.txt", - "test3.txt", - "test4.txt", - }); + @"flsYgiwrDUkZnBEK6iUMkxxaJlD8yQ=PFiles\MsiPackage\test1.txt", + @"flsj.cb0sFWqIPHPFSKJSEEaPDuAQ4=PFiles\MsiPackage\test2.txt", + @"flsXCzqPnLIc2S0BUeTH_BHeaHJgbw=PFiles\MsiPackage\assets\notatest.txt", + @"flsiPGfLix0PMEZQ.BGdIfMp43g0m0=PFiles\MsiPackage\assets\test3.txt", + @"flsQp7vl8wg1R6a9pWOuj0y8X9tFdk=PFiles\MsiPackage\assets\test4.txt", + @"flsROfaiHyEp8AGBy4ZIkz26B8x0QE=PFiles\MsiPackage\assets\files2_sub2\pleasedontincludeme.dat", + @"flsR7cMdABXp6bHg2a89trPLf9NuKU=PFiles\MsiPackage\assets\files2_sub2\test20.txt", + @"flse0V.F.q.LFFjytlCECxjK5io7g0=PFiles\MsiPackage\assets\files2_sub2\test21.txt", + @"flsQk6.O4lkg78pGc4Ye64mosdl3hY=PFiles\MsiPackage\assets\files2_sub3\FileName.Extension", + }; + + Build("FeatureGroup.wxs", (msiPath, _) => AssertFileIdsAndTargetPaths(msiPath, expected)); } [Fact] public void CanHarvestFilesInStraightAndCrookedTrees() { - var rows = BuildAndQueryComponentFileDirectoryTables("CrookedTree.wxs"); - var directoryRows = rows.Where(row => row.StartsWith("Directory:")).Select(d => d.Substring(10)).ToArray(); - - var rootDirectoryId = directoryRows.Single(r => r.EndsWith("\troot")).Split('\t')[0]; - - foreach (var ch in new[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'z' }) + var expected = new[] { - var directoryRow = directoryRows.Single(r => r.EndsWith($"\t{ch}")); - var parentDirectory = directoryRow.Split('\t')[1]; - Assert.Equal(rootDirectoryId, parentDirectory); - } + @"flsKwXKj_Znab7ED_V5tgmdm6I35Mk=PFiles\root\a\file.ext", + @"flsG_e554dKs4hJ6VckjXfvHVbrQ_c=PFiles\root\b\file.ext", + @"fls6QPA6Lio8i18jzGOvfZpb2vxh9M=PFiles\root\c\file.ext", + @"flsfPnakkQEQynhlS0Z9wVZMXLjKx4=PFiles\root\d\file.ext", + @"fls9z8lqK0ZvjlnUEzCDIE7bF01zXU=PFiles\root\e\file.ext", + @"flsFqGICaLl5ZLPsdJY.Z2m6xC2Khs=PFiles\root\f\file.ext", + @"flsUT96SVd6kTNE4X7vBFL7r3Zl4sM=PFiles\root\g\file.ext", + @"fls.i3qm35eVOQoWBJFaj3c9792GKc=PFiles\root\h\file.ext", + @"flsgKGasxQIkFWfpTA6kQurqEL4Afg=PFiles\root\file.ext", + @"flsZGaHZm_l9M8jaQS8XSgxnlykcKI=PFiles\root\z\y\x\w\v\u\t\s\r\q\file.ext", + }; + + Build("CrookedTree.wxs", (msiPath, _) => AssertFileIdsAndTargetPaths(msiPath, expected)); } [Fact] public void CanHarvestFilesInFeatureRef() { - BuildQueryAssertFiles("FeatureRef.wxs", new[] + var expected = new[] { - "FileName.Extension", - "notatest.txt", - "pleasedontincludeme.dat", - "test1.txt", - "test2.txt", - "test20.txt", - "test21.txt", - "test3.txt", - "test4.txt", - }); + @"flsYgiwrDUkZnBEK6iUMkxxaJlD8yQ=PFiles\MsiPackage\test1.txt", + @"flsj.cb0sFWqIPHPFSKJSEEaPDuAQ4=PFiles\MsiPackage\test2.txt", + @"flsXCzqPnLIc2S0BUeTH_BHeaHJgbw=PFiles\MsiPackage\assets\notatest.txt", + @"flsiPGfLix0PMEZQ.BGdIfMp43g0m0=PFiles\MsiPackage\assets\test3.txt", + @"flsQp7vl8wg1R6a9pWOuj0y8X9tFdk=PFiles\MsiPackage\assets\test4.txt", + @"flsROfaiHyEp8AGBy4ZIkz26B8x0QE=PFiles\MsiPackage\assets\files2_sub2\pleasedontincludeme.dat", + @"flsR7cMdABXp6bHg2a89trPLf9NuKU=PFiles\MsiPackage\assets\files2_sub2\test20.txt", + @"flse0V.F.q.LFFjytlCECxjK5io7g0=PFiles\MsiPackage\assets\files2_sub2\test21.txt", + @"flsQk6.O4lkg78pGc4Ye64mosdl3hY=PFiles\MsiPackage\assets\files2_sub3\FileName.Extension", + }; + + Build("FeatureRef.wxs", (msiPath, _) => AssertFileIdsAndTargetPaths(msiPath, expected)); } [Fact] public void CanHarvestFilesInFragments() { - BuildQueryAssertFiles("Fragment.wxs", new[] + var expected = new[] { - "notatest.txt", - "test1.txt", - "test2.txt", - "test3.txt", - "test4.txt", - }); + @"flsOQDmBHyBKZnyRziE3.z5HjmBv4k=PFiles\MsiPackage\test1.txt", + @"flsHjzoVbTTY2jQbthZHKG7Rn4yMZo=PFiles\MsiPackage\test2.txt", + @"flsPLx4KqFVkbnYyg3Uo4QdiRLFbL8=PFiles\MsiPackage\notatest.txt", + @"fls4di7CtiJhJnEwixr8_c5G8k8aNY=PFiles\MsiPackage\test3.txt", + @"flsk5E532wcxn9MfpYQYRnrPi3dsOA=PFiles\MsiPackage\test4.txt", + }; + + Build("Fragment.wxs", (msiPath, _) => AssertFileIdsAndTargetPaths(msiPath, expected)); } [Fact] public void CanHarvestFilesInModules() { - BuildQueryAssertFiles("Module.wxs", new[] + var expected = new[] { - "notatest.txt", - "test1.txt", - "test2.txt", - "test3.txt", - "test4.txt", - }, isPackage: false); + @"flsgrgAVAsCQ8tCCxfnbBNis66623c.E535B765_1019_4A4F_B3EA_AE28870E6D73=PFiles\MergeModule\test1.txt", + @"flsDBWSWjpVSU3Zs33bREsJa2ygSQM.E535B765_1019_4A4F_B3EA_AE28870E6D73=PFiles\MergeModule\test2.txt", + @"flsehdwEdXusUijRShuTszSxwf8joA.E535B765_1019_4A4F_B3EA_AE28870E6D73=PFiles\MergeModule\test3.txt", + @"flsBvxG729t7hKBa4KOmfvNMPptZkM.E535B765_1019_4A4F_B3EA_AE28870E6D73=PFiles\MergeModule\test4.txt", + @"flskqOUVMfAE13k2h.ZkPhurwO4Y1c.E535B765_1019_4A4F_B3EA_AE28870E6D73=PFiles\MergeModule\notatest.txt", + }; + + Build("Module.wxs", (msiPath, _) => AssertFileIdsAndTargetPaths(msiPath, expected), isPackage: false); } [Fact] public void CanHarvestFilesWithBindPaths() { - BuildQueryAssertFiles("BindPaths.wxs", new[] + var expected = new[] { - "FileName.Extension", - "test1.txt", - "test10.txt", - "test120.txt", - "test2.txt", - "test20.txt", - "test21.txt", - "test3.txt", - "test4.txt", - }); - } - - [Fact] - public void HarvestedFilesUnderPackageWithAuthoredFeatureAreOrphaned() - { - var messages = BuildAndQueryComponentFileDirectoryTables("PackageWithoutDefaultFeature.wxs", isPackage: true, 267); - Assert.Equal(new[] - { - "267", - "267", - "267", - "267", - }, messages); + @"flsNNsTNrgmjASmTBbP.45J1F50dEc=PFiles\HarvestedFiles\test1.txt", + @"flsASLR5pHQzLmWRE.Snra7ndH7sIA=PFiles\HarvestedFiles\test2.txt", + @"flsTZFPiMHb.qfUxdGKQYrnXOhZ.8M=PFiles\HarvestedFiles\files1_sub1\test10.txt", + @"flsLGcTTZPIU3ELiWybqnm.PQ0Ih_g=PFiles\HarvestedFiles\files1_sub1\files1_sub2\test120.txt", + @"fls1Jx2Y9Vea_.WZBH_h2e79arvDRU=PFiles\HarvestedFiles\test3.txt", + @"flsJ9gNxWaau2X3ufphQuCV9WwAgcw=PFiles\HarvestedFiles\test4.txt", + @"flswcmX9dpMQytmD_5QA5aJ5szoQVA=PFiles\HarvestedFiles\files2_sub2\test20.txt", + @"flskKeCKFUtCYMuvw564rgPLJmyBx0=PFiles\HarvestedFiles\files2_sub2\test21.txt", + @"fls2agLZFnQwjoijShwT9Z0RwHyGrI=PFiles\HarvestedFiles\files2_sub3\FileName.Extension", + }; + + Build("BindPaths.wxs", (msiPath, _) => AssertFileIdsAndTargetPaths(msiPath, expected)); } [Fact] public void CanHarvestFilesInStandardDirectory() { - BuildQueryAssertFiles("StandardDirectory.wxs", new[] + var expected = new[] { - "FileName.Extension", - "notatest.txt", - "pleasedontincludeme.dat", - "test1.txt", - "test10.txt", - "test120.txt", - "test2.txt", - "test20.txt", - "test21.txt", - "test3.txt", - "test4.txt", - }); + @"flsxKKnXWKGChnZD8KSNY4Mwb48nHc=PFiles\MsiPackage\test1.txt", + @"flsVa.JZ23qQ1vXrc1jjOLIyJMyuqM=PFiles\MsiPackage\test2.txt", + @"fls4_TTxMCivlzpVJiyNHQRa2eU2ZA=PFiles\MsiPackage\files1_sub1\test10.txt", + @"flsBQqnyJp3XnmzomCYT_1qJqKLeSA=PFiles\MsiPackage\files1_sub1\files1_sub2\test120.txt", + @"flsbr7Ii_L1MRmxOImvY3N7np5FqAU=PFiles\MsiPackage\notatest.txt", + @"fls5VacfuX4Iub..BmTvssAOUcUI1o=PFiles\MsiPackage\test3.txt", + @"flsTtxen6j9kDjhKw2rnKSlYn5e2_k=PFiles\MsiPackage\test4.txt", + @"flsKEAYr7hAov7KfiRTjHg1VBg6T38=PFiles\MsiPackage\files2_sub2\pleasedontincludeme.dat", + @"flsvw4WMs4foeBokT9VUN3qjPDg8jc=PFiles\MsiPackage\files2_sub2\test20.txt", + @"flspraz8bfD0UXdCBW9CS2jr49hl1k=PFiles\MsiPackage\files2_sub2\test21.txt", + @"flsCgt3Noa1VJHlHG5HOVjD5vdJm5Q=PFiles\MsiPackage\files2_sub3\FileName.Extension", + }; + + Build("StandardDirectory.wxs", (msiPath, _) => AssertFileIdsAndTargetPaths(msiPath, expected)); } [Fact] public void CanHarvestFilesInFiveLines() { - BuildQueryAssertFiles("PackageFiveLiner.wxs", new[] + var expected = new[] { - "FileName.Extension", - "notatest.txt", - "pleasedontincludeme.dat", - "test20.txt", - "test21.txt", - "test3.txt", - "test4.txt", - }); + @"flsIpBotASYdALXxudRqekdQdKEKdQ=PFiles\Example Corporation MsiPackage\notatest.txt", + @"flsaFu0CvigRX6Psea0ic6ZWevzLmI=PFiles\Example Corporation MsiPackage\test3.txt", + @"flsJBy_HKCNejalUyud4HisGqhd72E=PFiles\Example Corporation MsiPackage\test4.txt", + @"flsLXU67KiOVU00lZL1jaDaBVpg.Dw=PFiles\Example Corporation MsiPackage\files2_sub2\pleasedontincludeme.dat", + @"fls05.yw49T0FVAq3Wvq2ihNp3KWfI=PFiles\Example Corporation MsiPackage\files2_sub2\test20.txt", + @"flsf0falU_gCTJjtbSCNiFpJQ1d8EM=PFiles\Example Corporation MsiPackage\files2_sub2\test21.txt", + @"fls6Dd0lNq_VzYLYjK7ty5WxNy5KCs=PFiles\Example Corporation MsiPackage\files2_sub3\FileName.Extension", + }; + + Build("PackageFiveLiner.wxs", (msiPath, _) => AssertFileIdsAndTargetPaths(msiPath, expected)); } - private static void BuildQueryAssertFiles(string file, string[] expectedFileNames, bool isPackage = true, int? exitCode = null) + private static void AssertFileIdsAndTargetPaths(string msiPath, string[] expected) { - var rows = BuildAndQueryComponentFileDirectoryTables(file, isPackage, exitCode); + var pkg = new WixToolset.Dtf.WindowsInstaller.Package.InstallPackage(msiPath, + WixToolset.Dtf.WindowsInstaller.DatabaseOpenMode.ReadOnly); + var sortedExpected = expected.OrderBy(s => s); + var actual = pkg.Files.OrderBy(kvp => kvp.Key).Select(kvp => $"{kvp.Key}={kvp.Value.TargetPath}"); - var fileNames = AssertFileComponentIds(expectedFileNames.Length, rows); - - Assert.Equal(expectedFileNames, fileNames); + Assert.Equal(sortedExpected, actual); } - private static void BuildQueryDirectoryComponent(string file, string[] expectedFileNames, bool isPackage = true, int? exitCode = null) - { - var rows = BuildAndQueryComponentFileDirectoryTables(file, isPackage, exitCode); - - var fileNames = AssertFileComponentIds(expectedFileNames.Length, rows); - - Assert.Equal(expectedFileNames, fileNames); - } - - private static string[] BuildAndQueryComponentFileDirectoryTables(string file, bool isPackage = true, int? exitCode = null) + private static void Build(string file, Action tester, bool isPackage = true) { var folder = TestData.Get("TestData", "HarvestFiles"); @@ -288,57 +325,7 @@ namespace WixToolsetTest.CoreIntegration var result = WixRunner.Execute(arguments); - if (exitCode.HasValue) - { - Assert.Equal(exitCode.Value, result.ExitCode); - - return result.Messages.Select(m => m.Id.ToString()).ToArray(); - } - else - { - result.AssertSuccess(); - - return Query.QueryDatabase(msiPath, new[] { "Component", "File", "Directory" }) - .OrderBy(s => s) - .ToArray(); - } - } - } - - private static string[] AssertFileComponentIds(int fileCount, string[] rows) - { - var componentRows = rows.Where(row => row.StartsWith("Component:")).ToArray(); - var fileRows = rows.Where(row => row.StartsWith("File:")).ToArray(); - - Assert.Equal(componentRows.Length, fileRows.Length); - - // Component id == Component keypath == File id - foreach (var componentRow in componentRows) - { - var columns = componentRow.Split(':', '\t'); - Assert.Equal(columns[1], columns[6]); - } - - foreach (var fileRow in fileRows) - { - var columns = fileRow.Split(':', '\t'); - Assert.Equal(columns[1], columns[2]); - } - - Assert.Equal(fileCount, componentRows.Length); - - var files = fileRows.Select(row => row.Split('\t')[2]); - var lfns = files.Select(name => name.Split('|')); - - return fileRows - .Select(row => row.Split('\t')[2]) - .Select(GetLFN) - .OrderBy(name => name).ToArray(); - - static string GetLFN(string possibleSfnLfnPair) - { - var parts = possibleSfnLfnPair.Split('|'); - return parts[parts.Length - 1]; + tester(msiPath, result); } } } diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/WixToolsetTest.CoreIntegration.csproj b/src/wix/test/WixToolsetTest.CoreIntegration/WixToolsetTest.CoreIntegration.csproj index 7d7c9a0c..e0b5afd4 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/WixToolsetTest.CoreIntegration.csproj +++ b/src/wix/test/WixToolsetTest.CoreIntegration/WixToolsetTest.CoreIntegration.csproj @@ -22,5 +22,6 @@ + -- cgit v1.2.3-55-g6feb