From 1adfdda935b814541693cd550bb34fdbf2942b1f Mon Sep 17 00:00:00 2001 From: Bob Arnson Date: Thu, 26 Mar 2020 13:51:14 -0400 Subject: Add intermediate levels to track how IR has been lowered. --- .../LinkerFixture.cs | 29 +++++++++++++ .../WixToolsetTest.CoreIntegration/MsiFixture.cs | 50 ++++++++++++++++++++++ .../WixiplFixture.cs | 16 ++++++- .../WixlibFixture.cs | 16 ++++++- 4 files changed, 108 insertions(+), 3 deletions(-) (limited to 'src/test') diff --git a/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs b/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs index da1a374f..254b78f8 100644 --- a/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs @@ -6,13 +6,42 @@ namespace WixToolsetTest.CoreIntegration using System.IO; using System.Linq; using WixBuildTools.TestSupport; + using WixToolset.Core; using WixToolset.Core.TestPackage; using WixToolset.Data; using WixToolset.Data.Tuples; + using WixToolset.Extensibility.Data; + using WixToolset.Extensibility.Services; using Xunit; public class LinkerFixture { + [Fact] + public void MustCompileBeforeLinking() + { + var intermediate1 = new Intermediate("TestIntermediate1", new[] { new IntermediateSection("test1", SectionType.Product, 65001) }, null); + var intermediate2 = new Intermediate("TestIntermediate2", new[] { new IntermediateSection("test2", SectionType.Fragment, 65001) }, null); + var serviceProvider = new WixToolsetServiceProvider(); + + var listener = new TestMessageListener(); + var messaging = serviceProvider.GetService(); + messaging.SetListener(listener); + + var creator = serviceProvider.GetService(); + var context = serviceProvider.GetService(); + context.Extensions = Enumerable.Empty(); + context.ExtensionData = Enumerable.Empty(); + context.Intermediates = new[] { intermediate1, intermediate2 }; + context.TupleDefinitionCreator = creator; + + var linker = serviceProvider.GetService(); + linker.Link(context); + + Assert.Equal((int)ErrorMessages.Ids.IntermediatesMustBeCompiled, messaging.LastErrorNumber); + Assert.Single(listener.Messages); + Assert.EndsWith("TestIntermediate1, TestIntermediate2", listener.Messages[0].ToString()); + } + [Fact] public void CanBuildWithOverridableActions() { diff --git a/src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs b/src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs index 9d057dd8..2141e68c 100644 --- a/src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs @@ -41,6 +41,12 @@ namespace WixToolsetTest.CoreIntegration Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\MsiPackage\test.txt"))); var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); + + Assert.False(intermediate.HasLevel(WixToolset.Data.IntermediateLevels.Compiled)); + Assert.True(intermediate.HasLevel(WixToolset.Data.IntermediateLevels.Linked)); + Assert.True(intermediate.HasLevel(WixToolset.Data.IntermediateLevels.Resolved)); + Assert.True(intermediate.HasLevel(WixToolset.Data.WindowsInstaller.IntermediateLevels.FullyBound)); + var section = intermediate.Sections.Single(); var fileTuple = section.Tuples.OfType().First(); @@ -468,6 +474,50 @@ namespace WixToolsetTest.CoreIntegration } } + [Fact] + public void CanBuildWithPartialWixpdbInput() + { + var folder = TestData.Get(@"TestData\SingleFile"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var wixpdbPath = Path.Combine(baseFolder, @"partial\test.wixpdb"); + + var result = WixRunner.Execute(new[] + { + "build", + 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, @"partial\test.msi"), + "-pdb", wixpdbPath, + "-pdbtype", "Partial", + }, out var messages); + Assert.Equal(0, result); + + result = WixRunner.Execute(new[] + { + "build", + wixpdbPath, + "-loc", Path.Combine(folder, "Package.en-us.wxl"), + "-bindpath", Path.Combine(folder, "data"), + "-intermediateFolder", intermediateFolder, + "-o", Path.Combine(baseFolder, @"bin\test.msi"), + }, out messages); + Assert.Equal(0, result); + + var builtFiles = Directory.GetFiles(Path.Combine(baseFolder, @"bin")); + Assert.Equal(new[]{ + "test.msi", + "test.wixpdb", + }, builtFiles.Select(Path.GetFileName).ToArray()); + } + } + [Fact] public void CanBuildWixlib() { diff --git a/src/test/WixToolsetTest.CoreIntegration/WixiplFixture.cs b/src/test/WixToolsetTest.CoreIntegration/WixiplFixture.cs index 5927987b..b3d7da26 100644 --- a/src/test/WixToolsetTest.CoreIntegration/WixiplFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/WixiplFixture.cs @@ -23,6 +23,7 @@ namespace WixToolsetTest.CoreIntegration { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); + var wixiplPath = Path.Combine(intermediateFolder, @"test.wixipl"); var result = WixRunner.Execute(new[] { @@ -30,11 +31,17 @@ namespace WixToolsetTest.CoreIntegration Path.Combine(folder, "Package.wxs"), Path.Combine(folder, "PackageComponents.wxs"), "-intermediateFolder", intermediateFolder, - "-o", Path.Combine(intermediateFolder, @"test.wixipl") + "-o", wixiplPath, }); result.AssertSuccess(); + var intermediate = Intermediate.Load(wixiplPath); + + Assert.False(intermediate.HasLevel(IntermediateLevels.Compiled)); + Assert.True(intermediate.HasLevel(IntermediateLevels.Linked)); + Assert.False(intermediate.HasLevel(IntermediateLevels.Resolved)); + result = WixRunner.Execute(new[] { "build", @@ -47,7 +54,12 @@ namespace WixToolsetTest.CoreIntegration result.AssertSuccess(); - var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); + intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); + + Assert.False(intermediate.HasLevel(IntermediateLevels.Compiled)); + Assert.True(intermediate.HasLevel(IntermediateLevels.Linked)); + Assert.True(intermediate.HasLevel(IntermediateLevels.Resolved)); + var section = intermediate.Sections.Single(); var fileTuple = section.Tuples.OfType().First(); diff --git a/src/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs b/src/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs index a48a8370..5f8a278e 100644 --- a/src/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs @@ -77,17 +77,25 @@ namespace WixToolsetTest.CoreIntegration { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); + var wixlibPath = Path.Combine(intermediateFolder, @"test.wixlib"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "PackageComponents.wxs"), "-intermediateFolder", intermediateFolder, - "-o", Path.Combine(intermediateFolder, @"test.wixlib") + "-o", wixlibPath, }); result.AssertSuccess(); + var wixlib = Intermediate.Load(wixlibPath); + + Assert.True(wixlib.HasLevel(IntermediateLevels.Compiled)); + Assert.True(wixlib.HasLevel(IntermediateLevels.Combined)); + Assert.False(wixlib.HasLevel(IntermediateLevels.Linked)); + Assert.False(wixlib.HasLevel(IntermediateLevels.Resolved)); + result = WixRunner.Execute(new[] { "build", @@ -102,6 +110,12 @@ namespace WixToolsetTest.CoreIntegration result.AssertSuccess(); var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); + + Assert.False(intermediate.HasLevel(IntermediateLevels.Compiled)); + Assert.False(intermediate.HasLevel(IntermediateLevels.Combined)); + Assert.True(intermediate.HasLevel(IntermediateLevels.Linked)); + Assert.True(intermediate.HasLevel(IntermediateLevels.Resolved)); + var section = intermediate.Sections.Single(); var wixFile = section.Tuples.OfType().First(); -- cgit v1.2.3-55-g6feb