From 7eab295351796e2b41c1805d027957e1a7d9ddc6 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Mon, 1 Mar 2021 23:34:57 -0800 Subject: Correctly set the parent SourceLineNumber for include files --- src/WixToolset.Core/Preprocessor.cs | 4 +-- .../PreprocessorFixture.cs | 40 ++++++++++++++++++++++ .../TestData/IncludePath/Package.wxs | 2 +- .../TestData/IncludePath/PackageComponents.wxs | 4 +-- .../TestData/IncludePath/data/DontDoThis.wxi | 6 ++++ 5 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 src/test/WixToolsetTest.CoreIntegration/TestData/IncludePath/data/DontDoThis.wxi diff --git a/src/WixToolset.Core/Preprocessor.cs b/src/WixToolset.Core/Preprocessor.cs index b111b291..81b17578 100644 --- a/src/WixToolset.Core/Preprocessor.cs +++ b/src/WixToolset.Core/Preprocessor.cs @@ -1351,7 +1351,7 @@ namespace WixToolset.Core if (state.Context.CurrentSourceLineNumber.LineNumber != newLine) { - state.Context.CurrentSourceLineNumber = new SourceLineNumber(state.Context.CurrentSourceLineNumber.FileName, newLine); + state.Context.CurrentSourceLineNumber = new SourceLineNumber(state.Context.CurrentSourceLineNumber.FileName, state.Context.CurrentSourceLineNumber.Parent, newLine); } } } @@ -1372,7 +1372,7 @@ namespace WixToolset.Core state.CurrentFileStack.Push(path); state.SourceStack.Push(state.Context.CurrentSourceLineNumber); - state.Context.CurrentSourceLineNumber = new SourceLineNumber(path); + state.Context.CurrentSourceLineNumber = new SourceLineNumber(path, state.Context.CurrentSourceLineNumber); state.IncludeNextStack.Push(true); } diff --git a/src/test/WixToolsetTest.CoreIntegration/PreprocessorFixture.cs b/src/test/WixToolsetTest.CoreIntegration/PreprocessorFixture.cs index aad3ed73..89057991 100644 --- a/src/test/WixToolsetTest.CoreIntegration/PreprocessorFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/PreprocessorFixture.cs @@ -8,6 +8,7 @@ namespace WixToolsetTest.CoreIntegration using WixToolset.Core; using WixToolset.Core.TestPackage; using WixToolset.Data; + using WixToolset.Data.Symbols; using WixToolset.Extensibility.Data; using Xunit; @@ -39,6 +40,45 @@ namespace WixToolsetTest.CoreIntegration Assert.Null(includedFile.SourceLineNumbers.Parent); } + [Fact] + public void IncludeSourceLineNumbersPreserved() + { + var folder = TestData.Get(@"TestData\IncludePath"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + + var result = WixRunner.Execute(warningsAsErrors: false, new[] + { + "build", + Path.Combine(folder, "Package.wxs"), + Path.Combine(folder, "PackageComponents.wxs"), + "-loc", Path.Combine(folder, "Package.en-us.wxl"), + "-includepath", Path.Combine(folder, "data"), + "-bindpath", Path.Combine(folder, "data"), + "-intermediateFolder", intermediateFolder, + "-o", Path.Combine(baseFolder, @"bin\test.msi") + }); + + result.AssertSuccess(); + + using (var output = WixOutput.Read(Path.Combine(baseFolder, @"bin\test.wixpdb"))) + { + var intermediate = Intermediate.Load(output); + var component = intermediate.Sections.Single().Symbols.OfType().Single(); + Assert.Equal(3, component.SourceLineNumbers.LineNumber); + Assert.Equal(5, component.SourceLineNumbers.Parent.LineNumber); + + var encoded = component.SourceLineNumbers.GetEncoded(); + var decoded = SourceLineNumber.CreateFromEncoded(encoded); + Assert.Equal(3, decoded.LineNumber); + Assert.Equal(5, decoded.Parent.LineNumber); + } + } + } + [Fact] /// /// This test will fail on 32-bit operating systems because it depends on "CommonProgramFiles(x86)" diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/IncludePath/Package.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/IncludePath/Package.wxs index 6269fe9d..48a38e85 100644 --- a/src/test/WixToolsetTest.CoreIntegration/TestData/IncludePath/Package.wxs +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/IncludePath/Package.wxs @@ -1,4 +1,4 @@ - + diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/IncludePath/PackageComponents.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/IncludePath/PackageComponents.wxs index e26c4509..7a0485ed 100644 --- a/src/test/WixToolsetTest.CoreIntegration/TestData/IncludePath/PackageComponents.wxs +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/IncludePath/PackageComponents.wxs @@ -2,9 +2,7 @@ - - - + diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/IncludePath/data/DontDoThis.wxi b/src/test/WixToolsetTest.CoreIntegration/TestData/IncludePath/data/DontDoThis.wxi new file mode 100644 index 00000000..03885e3e --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/IncludePath/data/DontDoThis.wxi @@ -0,0 +1,6 @@ + + + + + + -- cgit v1.2.3-55-g6feb