From 42727c42248d1cb12ef8d9bc6f8ce7dda3f404c9 Mon Sep 17 00:00:00 2001 From: Bob Arnson Date: Wed, 20 Mar 2019 21:18:37 -0400 Subject: Bug: Wixipl references to extension libraries Add test demonstrating that a persisted .wixipl file has broken references to bits in an extension's library. Same project built via wix.exe in one pass works as expected. --- .../TestData/Wixipl/Package.en-us.wxl | 11 +++ .../TestData/Wixipl/Package.wxs | 23 +++++ .../TestData/Wixipl/PackageComponents.wxs | 10 ++ .../TestData/Wixipl/data/test.txt | 1 + .../WixToolsetTest.CoreIntegration.csproj | 4 + .../WixiplFixture.cs | 101 +++++++++++++++++++++ 6 files changed, 150 insertions(+) create mode 100644 src/test/WixToolsetTest.CoreIntegration/TestData/Wixipl/Package.en-us.wxl create mode 100644 src/test/WixToolsetTest.CoreIntegration/TestData/Wixipl/Package.wxs create mode 100644 src/test/WixToolsetTest.CoreIntegration/TestData/Wixipl/PackageComponents.wxs create mode 100644 src/test/WixToolsetTest.CoreIntegration/TestData/Wixipl/data/test.txt diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Wixipl/Package.en-us.wxl b/src/test/WixToolsetTest.CoreIntegration/TestData/Wixipl/Package.en-us.wxl new file mode 100644 index 00000000..38c12ac1 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Wixipl/Package.en-us.wxl @@ -0,0 +1,11 @@ + + + + + + A newer version of [ProductName] is already installed. + MsiPackage + + diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Wixipl/Package.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/Wixipl/Package.wxs new file mode 100644 index 00000000..15807698 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Wixipl/Package.wxs @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Wixipl/PackageComponents.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/Wixipl/PackageComponents.wxs new file mode 100644 index 00000000..e26c4509 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Wixipl/PackageComponents.wxs @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Wixipl/data/test.txt b/src/test/WixToolsetTest.CoreIntegration/TestData/Wixipl/data/test.txt new file mode 100644 index 00000000..cd0db0e1 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Wixipl/data/test.txt @@ -0,0 +1 @@ +This is test.txt. \ No newline at end of file diff --git a/src/test/WixToolsetTest.CoreIntegration/WixToolsetTest.CoreIntegration.csproj b/src/test/WixToolsetTest.CoreIntegration/WixToolsetTest.CoreIntegration.csproj index 2b202350..874ee70b 100644 --- a/src/test/WixToolsetTest.CoreIntegration/WixToolsetTest.CoreIntegration.csproj +++ b/src/test/WixToolsetTest.CoreIntegration/WixToolsetTest.CoreIntegration.csproj @@ -81,6 +81,10 @@ + + + + diff --git a/src/test/WixToolsetTest.CoreIntegration/WixiplFixture.cs b/src/test/WixToolsetTest.CoreIntegration/WixiplFixture.cs index df6542e2..60706948 100644 --- a/src/test/WixToolsetTest.CoreIntegration/WixiplFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/WixiplFixture.cs @@ -2,12 +2,14 @@ namespace WixToolsetTest.CoreIntegration { + using System; using System.IO; using System.Linq; using WixBuildTools.TestSupport; using WixToolset.Core.TestPackage; using WixToolset.Data; using WixToolset.Data.Tuples; + using Example.Extension; using Xunit; public class WixiplFixture @@ -88,5 +90,104 @@ namespace WixToolsetTest.CoreIntegration Assert.Equal((int)ErrorMessages.Ids.WixiplSourceFileIsExclusive, result.ExitCode); } } + + [Fact] + public void CanBuildMsiUsingExtensionLibrary() + { + var folder = TestData.Get(@"TestData\Wixipl"); + var extensionPath = Path.GetFullPath(new Uri(typeof(ExampleExtensionFactory).Assembly.CodeBase).LocalPath); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + + var result = WixRunner.Execute(new[] + { + "build", + "-ext", extensionPath, + Path.Combine(folder, "Package.wxs"), + Path.Combine(folder, "PackageComponents.wxs"), + "-loc", Path.Combine(folder, "Package.en-us.wxl"), + "-bindpath", Path.Combine(folder, "data"), + "-intermediateFolder", intermediateFolder, + "-o", Path.Combine(baseFolder, @"bin\test.msi"), + }); + + result.AssertSuccess(); + + var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"obj\test.wir")); + var section = intermediate.Sections.Single(); + + { + var wixFile = section.Tuples.OfType().Single(); + Assert.Equal(Path.Combine(folder, @"data\test.txt"), wixFile[WixFileTupleFields.Source].AsPath().Path); + Assert.Equal(@"test.txt", wixFile[WixFileTupleFields.Source].PreviousValue.AsPath().Path); + } + + { + var binary = section.Tuples.OfType().Single(); + var path = binary[BinaryTupleFields.Data].AsPath().Path; + Assert.Contains("Example.Extension", path); + Assert.EndsWith(@"\0", path); + Assert.Equal(@"BinFromWir", binary[BinaryTupleFields.Name].AsString()); + } + } + } + + [Fact] + public void CanBuildWixiplUsingExtensionLibrary() + { + var folder = TestData.Get(@"TestData\Wixipl"); + var extensionPath = Path.GetFullPath(new Uri(typeof(ExampleExtensionFactory).Assembly.CodeBase).LocalPath); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + + var result = WixRunner.Execute(new[] + { + "build", + "-ext", extensionPath, + Path.Combine(folder, "Package.wxs"), + Path.Combine(folder, "PackageComponents.wxs"), + "-intermediateFolder", intermediateFolder, + "-o", Path.Combine(intermediateFolder, @"test.wixipl"), + }); + + result.AssertSuccess(); + + result = WixRunner.Execute(new[] + { + "build", + Path.Combine(intermediateFolder, @"test.wixipl"), + "-ext", extensionPath, + "-loc", Path.Combine(folder, "Package.en-us.wxl"), + "-bindpath", Path.Combine(folder, "data"), + "-intermediateFolder", intermediateFolder, + "-o", Path.Combine(baseFolder, @"bin\test.msi"), + }); + + result.AssertSuccess(); + + var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"obj\test.wir")); + var section = intermediate.Sections.Single(); + + { + var wixFile = section.Tuples.OfType().Single(); + Assert.Equal(Path.Combine(folder, @"data\test.txt"), wixFile[WixFileTupleFields.Source].AsPath().Path); + Assert.Equal(@"test.txt", wixFile[WixFileTupleFields.Source].PreviousValue.AsPath().Path); + } + + { + var binary = section.Tuples.OfType().Single(); + var path = binary[BinaryTupleFields.Data].AsPath().Path; + Assert.Contains("Example.Extension", path); + Assert.EndsWith(@"\0", path); + Assert.Equal(@"BinFromWir", binary[BinaryTupleFields.Name].AsString()); + } + } + } } } -- cgit v1.2.3-55-g6feb