From f3a228eaf7d40bcd46b64c3d49aa23df23e79aec Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Tue, 6 Apr 2021 15:56:45 -0700 Subject: Discards source directory name when identical to target name Fixes wixtoolset/issues#6418 --- .../DirectoryFixture.cs | 47 ++++++++++++++++++++++ .../Directory/DuplicateTargetSourceName.wxs | 11 +++++ 2 files changed, 58 insertions(+) create mode 100644 src/test/WixToolsetTest.CoreIntegration/TestData/Directory/DuplicateTargetSourceName.wxs (limited to 'src/test') diff --git a/src/test/WixToolsetTest.CoreIntegration/DirectoryFixture.cs b/src/test/WixToolsetTest.CoreIntegration/DirectoryFixture.cs index fe5bb531..e0b85509 100644 --- a/src/test/WixToolsetTest.CoreIntegration/DirectoryFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/DirectoryFixture.cs @@ -2,6 +2,7 @@ namespace WixToolsetTest.CoreIntegration { + using System; using System.IO; using System.Linq; using WixBuildTools.TestSupport; @@ -173,5 +174,51 @@ namespace WixToolsetTest.CoreIntegration }, directoryRows.Select(r => r.FieldAsString(0) + ":" + r.FieldAsString(1) + ":" + r.FieldAsString(2)).ToArray()); } } + + [Fact] + public void CanGetDuplicateTargetSourceName() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); + + var result = WixRunner.Execute(new[] + { + "build", + "-arch", "x64", + Path.Combine(folder, "Directory", "DuplicateTargetSourceName.wxs"), + Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-o", msiPath + }); + + result.AssertSuccess(); + + var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); + var section = intermediate.Sections.Single(); + + var dirSymbols = section.Symbols.OfType().ToList(); + Assert.Equal(new[] + { + "BinFolder\tProgramFilesFolder\tbin", + "ProgramFilesFolder\tTARGETDIR\tPFiles", + "TARGETDIR\t\tSourceDir" + }, dirSymbols.OrderBy(d => d.Id.Id).Select(d => String.Join('\t', d.Id.Id, d.ParentDirectoryRef, d.Name)).ToArray()); + + var data = WindowsInstallerData.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); + var directoryRows = data.Tables["Directory"].Rows; + Assert.Equal(new[] + { + "BinFolder\tProgramFilesFolder\tbin", + "ProgramFilesFolder\tTARGETDIR\tPFiles", + "TARGETDIR\t\tSourceDir" + }, directoryRows.Select(r => String.Join('\t', r.FieldAsString(0), r.FieldAsString(1), r.FieldAsString(2))).ToArray()); + } + } } } diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Directory/DuplicateTargetSourceName.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/Directory/DuplicateTargetSourceName.wxs new file mode 100644 index 00000000..6e9a4495 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Directory/DuplicateTargetSourceName.wxs @@ -0,0 +1,11 @@ + + + + + + + + + + + -- cgit v1.2.3-55-g6feb