@joebigelow / wix-1 / commits / 7eab2953

Correctly set the parent SourceLineNumber for include files

Rob Mensching committed Mar 1, 2021 at 23:34 UTC 7eab295351796e2b41c1805d027957e1a7d9ddc6
5 files changed +50 -6
src/WixToolset.Core/Preprocessor.cs
+2 -2
@@ -1351,7 +1351,7 @@ namespace WixToolset.Core
1351
1352 if (state.Context.CurrentSourceLineNumber.LineNumber != newLine)
1353 {
1354 - state.Context.CurrentSourceLineNumber = new SourceLineNumber(state.Context.CurrentSourceLineNumber.FileName, newLine);
1354 + state.Context.CurrentSourceLineNumber = new SourceLineNumber(state.Context.CurrentSourceLineNumber.FileName, state.Context.CurrentSourceLineNumber.Parent, newLine);
1355 }
1356 }
1357 }
@@ -1372,7 +1372,7 @@ namespace WixToolset.Core
1372
1373 state.CurrentFileStack.Push(path);
1374 state.SourceStack.Push(state.Context.CurrentSourceLineNumber);
1375 - state.Context.CurrentSourceLineNumber = new SourceLineNumber(path);
1375 + state.Context.CurrentSourceLineNumber = new SourceLineNumber(path, state.Context.CurrentSourceLineNumber);
1376 state.IncludeNextStack.Push(true);
1377 }
1378
src/test/WixToolsetTest.CoreIntegration/PreprocessorFixture.cs
+40
@@ -8,6 +8,7 @@ namespace WixToolsetTest.CoreIntegration
8 using WixToolset.Core;
9 using WixToolset.Core.TestPackage;
10 using WixToolset.Data;
11 + using WixToolset.Data.Symbols;
12 using WixToolset.Extensibility.Data;
13 using Xunit;
14
@@ -39,6 +40,45 @@ namespace WixToolsetTest.CoreIntegration
40 Assert.Null(includedFile.SourceLineNumbers.Parent);
41 }
42
43 + [Fact]
44 + public void IncludeSourceLineNumbersPreserved()
45 + {
46 + var folder = TestData.Get(@"TestData\IncludePath");
47 +
48 + using (var fs = new DisposableFileSystem())
49 + {
50 + var baseFolder = fs.GetFolder();
51 + var intermediateFolder = Path.Combine(baseFolder, "obj");
52 +
53 + var result = WixRunner.Execute(warningsAsErrors: false, new[]
54 + {
55 + "build",
56 + Path.Combine(folder, "Package.wxs"),
57 + Path.Combine(folder, "PackageComponents.wxs"),
58 + "-loc", Path.Combine(folder, "Package.en-us.wxl"),
59 + "-includepath", Path.Combine(folder, "data"),
60 + "-bindpath", Path.Combine(folder, "data"),
61 + "-intermediateFolder", intermediateFolder,
62 + "-o", Path.Combine(baseFolder, @"bin\test.msi")
63 + });
64 +
65 + result.AssertSuccess();
66 +
67 + using (var output = WixOutput.Read(Path.Combine(baseFolder, @"bin\test.wixpdb")))
68 + {
69 + var intermediate = Intermediate.Load(output);
70 + var component = intermediate.Sections.Single().Symbols.OfType<ComponentSymbol>().Single();
71 + Assert.Equal(3, component.SourceLineNumbers.LineNumber);
72 + Assert.Equal(5, component.SourceLineNumbers.Parent.LineNumber);
73 +
74 + var encoded = component.SourceLineNumbers.GetEncoded();
75 + var decoded = SourceLineNumber.CreateFromEncoded(encoded);
76 + Assert.Equal(3, decoded.LineNumber);
77 + Assert.Equal(5, decoded.Parent.LineNumber);
78 + }
79 + }
80 + }
81 +
82 [Fact]
83 /// <remarks>
84 /// This test will fail on 32-bit operating systems because it depends on "CommonProgramFiles(x86)"
src/test/WixToolsetTest.CoreIntegration/TestData/IncludePath/Package.wxs
+1 -1
@@ -1,4 +1,4 @@
1 -<?include Package.wxi ?>
1 +<?include Package.wxi ?>
2 <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3 <Package Name="MsiPackage" Language="1033" Version="$(var.ProductVersion)" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a" Compressed="no" InstallerVersion="200" Scope="perMachine">
4
src/test/WixToolsetTest.CoreIntegration/TestData/IncludePath/PackageComponents.wxs
+1 -3
@@ -2,9 +2,7 @@
2 <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3 <Fragment>
4 <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
5 - <Component>
6 - <File Source="test.txt" />
7 - </Component>
5 + <?include DontDoThis.wxi ?>
6 </ComponentGroup>
7 </Fragment>
8 </Wix>
src/test/WixToolsetTest.CoreIntegration/TestData/IncludePath/data/DontDoThis.wxi new
+6
@@ -0,0 +1,6 @@
1 +<?xml version="1.0" encoding="utf-8"?>
2 +<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
3 + <Component>
4 + <File Source="test.txt" />
5 + </Component>
6 +</Include>